电子元件

土壤湿度传感器、泵,ardunio uno,面包板,三极管,水位传感器,电阻
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里 (图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源代码
在这里插入图片描述

手机上下载Blinker软件
在这里插入图片描述
在这里插入图片描述

源代码
在这里插入图片描述

源代码

烧录到esp8266

/*
 * esp8266
 */

#define BLINKER_WIFI
#define BLINKER_PRINT Serial
#define BLINKER_APCONFIG  //启用热点 wifi一键配置功能
#define LED_BUILTIN   2 //esp8266 板子上的灯是  D4 ,此处必须这么设置,不然控制不到灯
#include <Blinker.h>
#include <EEPROM.h>
#include <ESP8266WiFi.h>
void timeSendEeprom();//时间存
void timeGetEeprom();//时间取
void beginText();
char auth[] = "2fa38771f67c";// blinker app提供的秘钥,用于mqtt协议远程控制用

//新建组件对象
BlinkerButton Button1("btn-abc");//LED灯
BlinkerNumber HUMI("humi");//湿度数据键
BlinkerText Text1("time");//显示上传浇灌时间,文本组件
BlinkerButton Button2("shuax");//刷新
BlinkerButton Button3("water");//浇水的开关
BlinkerSlider Slider1("humimin");//湿度值设置
//定义所需参数
//湿度的数据
int humi1=0;
//上次浇灌时间数据
int yearr=0,mouth=0,day=0,hourr=0,minn=0,secondd=0;
//温湿度阈值定义
int humid=40;//湿度下限
//扫描串口,获得从arduino传过来的数据
char find1[]="humi";
char find2[]="gengx";//发现gengx时开始处理串口数据
//处理调用时间格式存储于timesend
String timesend="";
String xie="";
String mao=":";
//进行一次灌溉功能函数//记录本次灌溉时间发送给app
void fun(int humi1)
{
  digitalWrite(2,1);
  Blinker.delay(2000);//浇水2s
  digitalWrite(2,0);  //2号引脚没办法直接驱动
  //获取时间
  yearr=Blinker.year();
  mouth=Blinker.month();
  day=Blinker.mday();
  hourr=Blinker.hour();
  minn=Blinker.minute();
  secondd=Blinker.second();
  timesend=String(yearr)+xie+String(mouth)+xie+String(day)+" "+String(hourr)+mao+String(secondd);
  Text1.print("上次灌溉时间",timesend);
  timeSendEeprom();//存储时间数据
}
//上电初始化组件显示数据
void beginText()
{
  EEPROM.begin(20);
  timeGetEeprom();
  timesend=String(yearr)+xie+String(mouth)+xie+String(day)+" "+String(hourr)+mao+String(secondd);
  Text1.print("上次灌溉时间",timesend);

  EEPROM.end();
  Serial.println("初始化完成");
}
//在eeprom内刷新上次灌溉时间数据
//int year=0;mouth=0;day=0;hourr=0;minn=0;secondd=0;
void timeSendEeprom()
{
  EEPROM.begin(20);
  EEPROM.write(5,yearr);
  EEPROM.write(6,mouth);
  EEPROM.write(7,day);
  EEPROM.write(8,hourr);
  EEPROM.write(9,minn);
  EEPROM.write(10,secondd);
  EEPROM.end();
 }
 //获取eeprom保存的时间数据
 void timeGetEeprom()
 {
   yearr=EEPROM.read(5);
   mouth=EEPROM.read(6);
   day=EEPROM.read(7);
   hourr=EEPROM.read(8);   
   minn=EEPROM.read(9);
   secondd=EEPROM.read(10);
  }
//存储湿度到云端
void dataStorage()
{
    Blinker.dataStorage("humi",humi1);
 }
  //心跳包函数/59s一次
  void heartbeat()
  {
    HUMI.print(humi1);
    Serial.println("heart");
    
   }
   //button按键回调函数,意思是app上按了这个键就会调用这个函数
   void button2_callback(const String & state)
   {
      BLINKER_LOG("get button state:",state);
      beginText();
      Button1.print();
    }
    void button3_callback(const String & state )
    {
        if(state==BLINKER_CMD_ON){
             digitalWrite(2,HIGH);
             Button2.print("on");
          }
          else{
              digitalWrite(2,LOW);
              Button2.print("off");
            }
      }
     
// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
     if (state == BLINKER_CMD_ON) {
        digitalWrite(LED_BUILTIN, LOW);

        BLINKER_LOG("Toggle on!");
        Button1.print("on");
}
 else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED_BUILTIN, HIGH);

        BLINKER_LOG("Toggle off!");

        //Button1.icon("icon_1");
        Button1.color("#ff66b3");
       // Button1.text("Your button name or describe");
        // Button1.text("Your button name", "describe");
        Button1.print("off");
    }
}
void slider1_callback(int32_t value)
{
    humid=value;
    BLINKER_LOG("get slider value:",value);
  }

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
     Blinker.vibrate();
     fun(humi1);
     HUMI.print(humi1);
     uint32_t BlinkerTime=millis();
     Blinker.print("millis",BlinkerTime);
}

// 系统初始化函数, 系统入口
void setup()
{
    Serial.begin(115200); //设置波特率 
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll(); //开启调试模式,可以看到 blinker mqtt 协议相关交互信息
  // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
     // 初始化blinker
    Blinker.begin(auth);
    Blinker.attachData(dataRead);//没有绑定的控件 函数注册
    //注册一个心跳包
    Blinker.attachHeartbeat(heartbeat);
    //上传数据到云端的回调函数
    Blinker.attachDataStorage(dataStorage);
    //设置时区
    Blinker.setTimezone(8.0);
    //按键回调函数
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    Button3.attach(button3_callback);
    Slider1.attach(slider1_callback);
    
}

void loop()
{//让主代码放在这里重复运行
    Blinker.run();
    if(Serial.available()>0)
    {
        if(humi1<humid)
        {
            fun(humi1);
            Serial.println("water");
          }
          Blinker.delay(60000);//浇水完成后的渗透时间
          if(Serial.find(find2))
          {
              if(Serial.find(find1))
              {
                  humi1=Serial.parseInt();
                  Serial.print("humi:");
                  Serial.println(humi1);
                }
            }
      }
}

烧录到arduino

/*
 * 烧录到ardunio
 * 发送数据格式 “gengxhumi70”
 */

 #include<math.h>
 #define N A0
 const int M=7;//获取GPIO2的数值
 const int D=8;//水泵驱动引脚
 void getHumi();
 String sendl="gengxhumi";
 String sendDate="";
 float h=0;
 void SendDate(){
     if(h!=0)
     {
         sendDate=sendl+(String)((int)h); 
         Serial.println(sendDate);
      }
  }

  void setup()
  {
      Serial.begin(115200); //init Serail band rate
    }

  void Mote()
  {
      pinMode(7,INPUT);
      pinMode(8,OUTPUT);
      if(digitalRead(7)==HIGH){
          digitalWrite(8,HIGH);
        }
        else{
              digitalWrite(8,LOW);//arduino 一个引脚定义输入做判断esp8266D2引脚高还是低,做水泵的开或关操作
          }
    }

    void loop()
    {
        getHumi();//湿度
        SendDate();//date transport
        Serial.print("humi:");
        Serial.println("int(h)");
        Mote();
      }

      void getHumi()
      {
          h=analogRead(A0);
          h=((1024-h)/1024)*100;
          if(isnan(h))
          {
             Serial.println("Falid to read from sensor");
            }
            delay(2000);
        }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐