查看: 242|回复: 8

[已解决] 植物智能管理基于blinker

[复制链接]

该用户从未签到

发表于 2021-11-23 18:10 | 显示全部楼层 |阅读模式
本帖最后由 wgzh_026 于 2021-11-23 18:13 编辑

大棚作物智能管理,研究了很久直接上代码
微信图片_202111231812251.jpg
微信图片_20211123181225.jpg
微信图片_202111231812252.jpg

该用户从未签到

 楼主| 发表于 2021-11-23 18:11 | 显示全部楼层
#define BLINKER_WIFI
#define DHT11PIN D5 //定义引脚温湿度
#include <dht11.h>//库文件
#include <Blinker.h>//库文件
#include <LiquidCrystal_I2C.h>//库文件
LiquidCrystal_I2C lcd(0x3F,16,2);
dht11 DHT11;      //温湿度传感类
Ticker flipper;       //创建定时器对象
int zlhPin0 =D3;//水泵继电器
int zlhPin1=D4;   //喷雾继电器
int zlhPin2=D6;  // 加热继电器
int zlhPin3=D7;  //通风继电器
int zlhPin4=D8;  //卷帘继电器
int zlhPin5=D9;  //放帘继电器
int val; //用来存储湿度值
float h=0;  //初始化
float t=0;
// 新建组件对象
BlinkerButton Button1("btn-1");//手动浇水开关
BlinkerButton Button2("btn-2");//手动开帘开关
BlinkerButton Button3("btn-3");//手动放帘开关
BlinkerNumber Number1("rssi");//路由信号强度
BlinkerNumber Number2("soil");//土壤湿度
BlinkerNumber   T("t");//温度
BlinkerNumber   H("h");//湿度
BlinkerText text1("text1");//文本提示1
BlinkerText text2("text2");//文本提示2
BlinkerText text3("text3");//文本提示3
BlinkerText text4("text4");//文本提示4
BlinkerText text5("text5");//文本提示5
BlinkerText text6("text6");//文本提示5
BlinkerText text7("text7");//文本提示5
char auth[] = "f6f1c4f81ea2";//密钥
char ssid[] = "TP-LINK_9E7A"; //wifi名称
char pswd[] = "wobuzhidao";//wifi密码


void heartbeat() //心跳包使得我们每次打开APP都可以看到实时的最新湿度数据
{
    Number1.print(WiFi.RSSI()); //信号强度发送给手机APP端
    Number2.print(val);         //同步土壤湿度数据
     T.print(t);//同步温度数据
     H.print(h);//同步湿度数据
}

// 按手动浇水即会执行该函数
void button1_callback(const String &state)
{
    BLINKER_LOG("get button1 state: ", state);
    if(state=="on")
    {
        digitalWrite(zlhPin0, LOW);
        // 反馈开关状态
        Button1.text("打开水泵");
        text1.print("打开水泵");
        Button1.color("#fddb00");
        Button1.print("on");
        
    } else if(state=="off")
    {
        digitalWrite(zlhPin0, HIGH);
       // 反馈开关状态
       Button1.text("关闭水泵");
       text1.print("关闭水泵");
       Button1.color("#0ddb00");
       Button1.print("off");
        
    }
}
// 按手动开帘即会执行该函数
void button2_callback(const String &state)
{
    BLINKER_LOG("get button2 state: ", state);
    if(state=="on")
    {
        digitalWrite(zlhPin4, HIGH);
        // 反馈开关状态
        Button2.text("打开帘子");
        text6.print("打开帘子");
        Button2.color("#fddb00");
        Button2.print("on");
        
    } else if(state=="off")
    {
        digitalWrite(zlhPin4, LOW);
       // 反馈开关状态
       Button2.text("关闭帘子");
       text6.print("关闭帘子");
       Button2.color("#0ddb00");
       Button2.print("off");
        
    }
}
// 按手动放帘即会执行该函数
void button3_callback(const String &state)
{
    BLINKER_LOG("get button3 state: ", state);
     if(state=="on")
    {
        digitalWrite(zlhPin5, HIGH);
        // 反馈开关状态
        Button3.text("打开遮阳");
        text7.print("打开遮阳");
        Button3.color("#fddb00");
        Button3.print("on");
        
    } else if(state=="off")
    {
        digitalWrite(zlhPin5, LOW);
       // 反馈开关状态
       Button3.text("关闭遮阳");
       text7.print("关闭遮阳");
       Button3.color("#0ddb00");
       Button3.print("off");
        
    }
}
void flip()
{
    val = 100 - (analogRead(A0)/10.24); //获取土壤湿度
    BLINKER_LOG(val);
}
void dataStorage() //图表
{
    Blinker.dataStorage("soil", val);
    Blinker.dataStorage("t",(float)DHT11.temperature);//存储温度
    Blinker.dataStorage("h", (float)DHT11.humidity);//存储湿度
}
void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    Button3.attach(button3_callback);
    Blinker.attachHeartbeat(heartbeat);
    flipper.attach(2, flip);                //定时器每5秒调用一次flip函数
    Blinker.attachDataStorage(dataStorage); //图表
     lcd.init();                      // initialize the lcd //lcd 还有对比度,调后面的电阻
     lcd.init();                      //两行
     lcd.backlight();                 //lcd的背光
   // 初始化有LED的IO
    pinMode(zlhPin0, OUTPUT);
    pinMode(zlhPin1, OUTPUT);
    pinMode(zlhPin2, OUTPUT);
    pinMode(zlhPin3, OUTPUT);
    pinMode(zlhPin4, OUTPUT);
    pinMode(zlhPin5, OUTPUT);
    digitalWrite(zlhPin0, HIGH);
    digitalWrite(zlhPin1, HIGH);
    digitalWrite(zlhPin2, HIGH);
    digitalWrite(zlhPin3, HIGH);
    digitalWrite(zlhPin4, HIGH);
    digitalWrite(zlhPin5, HIGH);
}

void loop()
{
    Blinker.run();
     Blinker.run();
  int AAA = DHT11.read(DHT11PIN);//读取数据,
  //电脑串口显示
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);//湿度
  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);//温度
   h=((float)DHT11.humidity);
   t=((float)DHT11.temperature);
   Blinker.delay(20);
  //lcd显示
  lcd.setCursor(0,0);//lcd显示
  lcd.print("Humi(%): ");//湿度
  lcd.setCursor(10,0);//
  lcd.print((float)DHT11.humidity, 2);
  lcd.setCursor(0,1);
  lcd.print("Temp(oC): ");//温度
  lcd.setCursor(10,1);
  lcd.print((float)DHT11.temperature, 2);
  Blinker.delay(200);

   val = 100 - (analogRead(A0)/10.24); //获取湿度
    if (val < 50) //如果检测到湿度过低,执行浇水3秒  这个温湿度计是湿度越大数值越小
    {
       digitalWrite(zlhPin0, HIGH);
       text2.print("自动浇水");
    }else
  {
   digitalWrite(zlhPin0, LOW);
  text2.print("停止浇水");
  }
  Serial.println(val);
  Blinker.delay(200);
//增加湿度模块
  float  HUMIDITY=DHT11.humidity;
if(HUMIDITY<30){
  digitalWrite(zlhPin1,HIGH);//继电器
  text3.print("打开喷雾");
  
}else
{
  digitalWrite(zlhPin1,LOW);
  text3.print("停止喷雾");
}
Blinker.delay(200);

//升温模块
  
  float TEMPERATURE=DHT11.temperature;
if(TEMPERATURE<5)
{
  digitalWrite(zlhPin2,HIGH);// 继电器
  text4.print("打开加热");
  
  }else
  {
   digitalWrite(zlhPin2,LOW);
   text4.print("停止加热");
  }
  Blinker.delay(200);
  if(TEMPERATURE>28)
{
  digitalWrite(zlhPin3,HIGH);//继电器
  text5.print("打开通风");
  
  }else
  {
   digitalWrite(zlhPin3,LOW);
   text5.print("停止通风");
  }
  Blinker.delay(2000);
}

该用户从未签到

发表于 2021-11-24 17:05 | 显示全部楼层

66666,666呀

该用户从未签到

发表于 2021-11-25 10:04 | 显示全部楼层
做的不错,你这盒子用啥做的

该用户从未签到

发表于 2021-11-25 21:53 | 显示全部楼层

我也在做类似的一个设计,自己设计的板子,功能上和你这个很类似呀

该用户从未签到

发表于 2021-11-25 21:56 | 显示全部楼层
这个功能和你这个很类似,程序也是
22N)[K8JTXENPX{AT{U}CQB.png

该用户从未签到

发表于 2021-11-25 21:58 | 显示全部楼层
开源地址:

该用户从未签到

发表于 2021-11-25 21:59 | 显示全部楼层

https://oshwhub.com/htit0/xiaohua01
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

esp8266  Node mcu多用 含土壤温湿度和DHT11和四路继电器
esp8266 Node mcu多用 含
原来有空气湿度 和四路继电器 现在新加了土壤湿度的在这个里面 这个是为什么?
ArduinoBox
ArduinoBox
这个软件具体是做什么用的? 可以导入程序进行模拟吗?
按键个数上限
按键个数上限
使用ESP32 arduino 蓝牙开发时,设置了许多按键,前12个没有问题,之后的都不会响应如
ESP32 S2 的 SPI
ESP32 S2 的 SPI
ESP32 S2的Arduino环境对于 SPI 的定义是有问题的。 打开ESP32-S2技术参考手册 (“es
啃萝卜可不可以用于arduino UNO R3 开发板
啃萝卜可不可以用于arduin
啃萝卜可不可以用于arduino UNO R3 开发板
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表