|
楼主 |
发表于 2021-11-23 18:11
|
显示全部楼层
本帖最后由 wgzh_026 于 2021-12-20 09:40 编辑
#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[] = "xxxxxxxx";//密钥
char ssid[] = "xxxxxxxxx"; //wifi名称
char pswd[] = " ?";//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(); //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) //如果检测到湿度低执行
{
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);
} |
|