可以用天猫精灵Blinker设定手/自动控制的温湿度器
看了论坛中制作温湿度器一些作品,我也忍不住做了一个,该温湿度器可以设定湿度开启值和关闭值,可以用手机查看和设置。废话不多说,先看手机界面和制作过程需要器件:
wifi模块 esp12f
温湿度传感器 dht11
加湿器
按键开关
传程序用USB转TTL
接线(自己可以根据情况修改):
温湿度计 D2
加湿继电器 D3
LCD1602 SDA:D4/SCL:D5
按钮模块 D6 D7 D8 D9
怎么在手机上建立相关的组件在论坛中太多教程了,所以在这我就不写了。
我把相关的程序代码贴出供大家参考。
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG//采用EspTouch/SmartConfig方式配网
//---------------------------------------------------------------
//#define BLINKER_DUEROS_SENSOR//小度
#define BLINKER_ALIGENIE_LIGHT//天猫
//#define BLINKER_MIOT_LIGHT //小爱灯
//#define BLINKER_MIOT_SENSOR //小爱传感器
//#define BLINKER_MIOT_MULTI_OUTLET //小爱插座
//-------------------------------------------------------------
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//---------------------------------------------------------------
#include <Blinker.h>
#include <DHT.h>
char auth[] = "**********";//设备ID
//char ssid[] = "**********";//wifi名称
//char pswd[] = "**********";//wifi密码
BlinkerNumber HUMI("humi"); //定义湿度数据键名
BlinkerNumber TEMP("temp"); //定义温度数据键名
#define DHTTYPE DHT11 // 使用DHT 11温度湿度模块
#define DHTPIN 2 //定义DHT11模块连接管脚io2
DHT dht(DHTPIN, DHTTYPE, 11);//定义DHT
float humi_read = 0, temp_read = 0;
//-----------------------------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2);//LCD配置地址0x27
int d;//定义变量x,储存下限阈值
int g;//定义变量s,储存上限阈值
BlinkerButton F5("f5");//刷新按键
BlinkerButton SWITCH("switch");//手动开关
//BlinkerNumber HUMI("humi");//湿度显示
//BlinkerNumber TEMP("temp");//温度显示
BlinkerNumber YZ1("d1");//x阈值显示
BlinkerNumber YZ2("g2");//s阈值显示
BlinkerSlider Slider1("set1");//x滑块调整
BlinkerSlider Slider2("set2");//s滑块调整
void slider1_callback(int32_t value1)
{
x=value1;
}//x滑块回调函数
void slider2_callback(int32_t value2)
{
s=value2;
}//s滑块回调函数
void F5_callback(const String & state) //刷新键回调函数
{
heartbeat();
}
void SWITCH_callback(const String & state) //手动开关回调函数
{
if (state == BLINKER_CMD_ON)
{
digitalWrite(D3, LOW);
SWITCH.text("", "手动开关(开)");
SWITCH.print("on");
}//定义3号为继电器,当APP按键输出为On时,手动开启继电器
else
if (state == BLINKER_CMD_OFF)
{
digitalWrite(D3, HIGH);
SWITCH.text("", "手动开关(关)");
SWITCH.print("off");
}//定义3号为继电器,当APP按键输出为off时,手动关闭继电器
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
Blinker.begin(auth);
Blinker.attachData(dataRead);
Blinker.attachHeartbeat(heartbeat);
dht.begin();
// BlinkerDuerOS.attachQuery(duerQuery);//小度
//-------------------------------------------------
x = 50;// 将x初始值设为50
s = 75;// 将s初始值设为75
// lcd.begin();
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(7, 0);
lcd.print("c");
lcd.setCursor(8, 0);
lcd.print("Humi:");
lcd.setCursor(15, 0);
lcd.print("\%");
lcd.setCursor(0, 1);
lcd.print("Set1:");
lcd.setCursor(7, 1);
lcd.print("\%");
lcd.setCursor(8, 1);
lcd.print("Set2:");
lcd.setCursor(15, 1);
lcd.print("\%");//LCD显示设置
//-------------------------------------------------
//-------------------------------------------------
pinMode(D3, OUTPUT);//
pinMode(D6, OUTPUT);//
pinMode(D7, OUTPUT);//
pinMode(D8, OUTPUT);//
pinMode(D9, OUTPUT);//
digitalWrite(D3, HIGH);//
//-------------------------------------------------
//-------------------------------------------------
SWITCH.attach(SWITCH_callback);//绑定回调函数
Slider1.attach(slider1_callback);//绑定回调函数
Slider2.attach(slider2_callback);//绑定回调函数
Blinker.delay(1000);
Blinker.notify("智能加湿器已上线!");
// Blinker.begin(auth, ssid, pswd);//绑定设备、wifi、密码
Blinker.attachHeartbeat(heartbeat);//绑定心跳函数
void loop()
{
Blinker.run();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
BLINKER_LOG("Failed to read from DHT sensor!");
}
else
{
BLINKER_LOG("Humidity: ", h, " %");
BLINKER_LOG("Temperature: ", t, " *C");
humi_read = h;
temp_read = t;
}
Blinker.delay(100);
//---------------------------------------------------------
lcd.setCursor(5, 0);
lcd.print(temp_read);//LCD显示温度
lcd.setCursor(13, 0);
//lcd.print(dht11humi(D2));//LCD显示湿度
lcd.print(humi_read);//LCD显示湿度
lcd.setCursor(5, 1);
lcd.print(x);//LCD显示x
lcd.setCursor(13, 1);
lcd.print(s);//LCD显示s
if(digitalRead(D6)==1)
{
;
x += 1;
}
if(digitalRead(D7)==1)
{
;
x += -1;
}
if(digitalRead(D8)==1)
{
;
s += 1;
}
if(digitalRead(D9)==1)
{
;
s += -1;
}//按键增减阈值
//{
if(humi_read<x)
{
;
digitalWrite(D3, LOW);
}
//}//湿度低于下限阈值时,加湿器开启(如果继电器设置的是低电平触发)
if(humi_read>s)
{
;
digitalWrite(D3, HIGH);
}//湿度高于上限阈值时,加湿器关闭(如果继电器设置的是低电平触发)
//----------------------------------------------------------
}
void heartbeat() //心跳包
{
if (humi_read< 45)
{
HUMI.color("#DC143C");//红
HUMI.unit("%RH(干燥)");
}
else
if (humi_read> 75)
{
HUMI.color("#1E90FF");//蓝
HUMI.unit("%RH(湿润)");
}
else
{
HUMI.color("#00DE00");//绿
HUMI.unit("%RH(舒适)");
}
if (temp_read< 15)
{
TEMP.color("#1E90FF");//蓝
TEMP.unit("℃(寒冷)");
}
else
if (temp_read> 25)
{
TEMP.color("#DC143C");//红
TEMP.unit("℃(炎热)");
}
else
{
TEMP.color("#00DE00");//绿
TEMP.unit("℃(舒适)");
}
HUMI.print(humi_read ); //给blinker app回传湿度数据
TEMP.print(temp_read ); //给blinker app回传温度数据
//-----------------------------------------------------------
// HUMI.print(humi_read);//APP输出湿度值
// TEMP.print(temp_read);//APP输出温度值
YZ1.print(x);//APP输出x值
YZ2.print(s);//APP输出s值
}
//----------------------小度-------------------------------------
/*
void duerQuery(int32_t queryCode)
{
BLINKER_LOG("DuerOS Query codes: ", queryCode);
int humi_read_int = humi_read; //去掉湿度浮点
switch (queryCode)
{
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BLINKER_LOG("DuerOS Query HUMI");
BlinkerDuerOS.humi(humi_read_int + 7); //小度接收湿度
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BLINKER_LOG("DuerOS Query TEMP");
BlinkerDuerOS.temp(temp_read - 7);//小度接收温度
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_TIME_NUMBER :
BLINKER_LOG("DuerOS Query time");
BlinkerDuerOS.time(millis()); //小度接收运行时间
BlinkerDuerOS.print();
break;
default :
BlinkerDuerOS.temp(0);
BlinkerDuerOS.humi(0);
BlinkerDuerOS.time(millis());
BlinkerDuerOS.print();
break;
}
}
*/
//------------------------天猫---------------------------------
void aligenieQuery(int32_t queryCode)
{
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_TEMP_NUMBER :
BlinkerAliGenie.temp(temp_read);
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_HUMI_NUMBER :
BlinkerAliGenie.humi(humi_read);
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.temp(20);
BlinkerAliGenie.humi(20);
BlinkerAliGenie.print();
break;
}
}
//---------------------------------------------------------
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
请问,哪段是图表使用的代码,看的有点蒙 想改成温,湿度自动控制,不太会呀:$ 夜渡风陵 发表于 2020-5-4 15:22
请问,哪段是图表使用的代码,看的有点蒙
setup 中间加上一句
Blinker.attachDataStorage(dataStorage);
然后加一段这个
void dataStorage() {
//添加数据存储 以便于图标数据展示
Blinker.dataStorage("humi", humi_read);
//添加数据存储 以便于图标数据展示
Blinker.dataStorage("temp", temp_read);
}
在APP里面添加图表吧。。。开始没那么快显示,,等几分钟就有了 int d;//定义变量x,储存下限阈值
int g;//定义变量s,储存上限阈值
这里错了吧
int x;//定义变量x,储存下限阈值
int s;//定义变量s,储存上限阈值 大神,我一个8266上传温度,一个8266控制继电器,如何在另外一个8266控制的继电器里面读取温度实现温度控制呢? yznj 发表于 2020-11-6 00:01
想改成温,湿度自动控制,不太会呀
老哥有把温度自动控制改出来吗?能不能借代码参考下,谢谢 Blinker.attachData(dataRead); Blinker.attachHeartbeat(heartbeat);这个是没有定义吧 void F5_callback(const String & state) //刷新键回调函数 { heartbeat(); }编译这个地方错误
页:
[1]