ESP8266+DHT11温湿度传感器+LED灯(状态可视化)
接线(继电器与DHT11模块的GND与VCC分别对应接好ESP8266即可,下表只列出信号线接法):
模块 | ESP8266 |
---|---|
继电器IN | D4 |
DHT11 DAT | D7 |
ESP8266编译环境搭建、继电器如何使用及如何接电灯线不再细说,点击下面链接详看即可
ESP8266接入小爱同学—智能LED台灯或风扇(利用继电器)
程序(有冗余但运行无误,可自行删减无用部分或自行增添功能):
#define BLINKER_WIFI
#include <DHT.h>
#include <Blinker.h>
char auth[] = "******";//blinker app注册设备时的密钥
char ssid[] = "******";//wifi名称
char pswd[] = "******";//WiFi密码
//若使用WiFiManager库则更好,具体使用方法以后分享一下,或者去太极创客官网查看
#define DHTPIN D7 //定义DHT11信号引脚
#define DHTTYPE DHT11 // dht系列传感器类型为DHT 11
// 新建组件对象
BlinkerNumber HUMI("humi");//湿度显示
BlinkerNumber TEMP("temp");//温度显示
BlinkerButton Button1("btn-abd");
BlinkerNumber Number1("num-abd");
BlinkerButton Button2("btn-abc");
int counter = 0;
// 按下按键即会执行该函数
void button2_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="on") {
digitalWrite(LED_BUILTIN, LOW);
// 反馈开关状态
Button2.print("on");
} else if(state=="off"){
digitalWrite(LED_BUILTIN, HIGH);
// 反馈开关状态
Button2.print("off");
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
DHT dht(DHTPIN, DHTTYPE);
float humi_read = 0, temp_read = 0;
void heartbeat()//心跳包
{
HUMI.print(humi_read);
TEMP.print(temp_read);
}
void dataStorage()//数据云存储
{
Blinker.dataStorage("temp", temp_read);
Blinker.dataStorage("humi", humi_read);
}
void dataGet()//拉取存储数据
{
BLINKER_LOG("Blinker.dataGet(): ", temp_read);
BLINKER_LOG("Blinker.dataGet(): ", humi_read);
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button2.attach(button2_callback);
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
Blinker.dataGet();
dht.begin();
}
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(2000);
}
blinker app端:
由于采用开关按键,所以对比上次控制灯的简单程序,能显示灯的开关状态无疑是一大优点。
当然也可接入米家利用小爱同学控制,具体操作方法见:ESP8266接入小爱同学—智能LED台灯或风扇(利用继电器)