NodeMCU-ESP8266开发(VSCODE+PlatformIO+Arduino框架):第4篇--Blinker_DHT_WiFi(点灯科技手机APP控制+温湿度数据APP显示)

首先完成开发环境搭建:https://blog.csdn.net/felix_tao/article/details/113092886

其次完成Blinker_Hello_WiFi(点灯科技-手机APP控制例程):https://blog.csdn.net/felix_tao/article/details/113359707

 

第一步:下载DHT11/22温湿度传感器库-DHT-sensor-library-master。
下载地址:https://www.arduino.cn/thread-81585-1-1.html

第二步:下载后,将DHT-sensor-library-master.zip进行解压,放到此路径下C:\Users\felix\.platformio\packages\framework-arduinoespressif8266\libraries。

第三步:复制一份Blinker_Hello_WiFi工程,并重命名为Blinker_DHT_WiF。

第四步:打开VSCODE->文件->将文件夹添加到工作区->选择工程文件夹Blinker_DHT_WiF->添加到VSCODE中。

在打开VSCODE过程中,会自动加载PIO插件,以及.vscode->c_cpp_properties.json中会自动加载DHT-sensor-library-master包含路径。

第五步:复制以下代码到VSCODE中的src->main.cpp里面。

/* *****************************************************************  
 * @author  TaoDream
 * @version V1.0
 * @date    2021.01.31
 * 程序功能:
 * 1.使用开发板:nodemcu-ESP8266(模块ESP-12E)
 * 2.使用传感器:DHT11模块(数据引脚DAT接到开发板的D7,VCC接到开发板的3V3,GND接到开发板的GND)
 * 3.程序功能:使用Blinker 手机APP添加设备并绑定,通过APP远程控制开发板上的灯的亮灭,并读取DHTXX传感器的温湿度值在APP上显示
 * 4.例程文档:https://www.diandeng.tech/doc/arduino-course,选择“2.数据反馈”
 * *****************************************************************/

//#define LED_BUILTIN 2   //ESP-12E模块自身的LED,对应GPIO2,低电平亮
//#define LED_BUILTIN 16  //nodemcu-esp8266开发板扩展的LED,对应GPIO16,低电平亮

#define BLINKER_WIFI
#define BLINKER_WITHOUT_SSL  //blinker默认使用加密方式进行远程通信,但通信加密会消耗大量的RAM,如果您对通信安全性无要求,
							 //可以添加宏BLINKER_WITHOUT_SSL用以获得更多可用RAM,BLINKER_WITHOUT_SSL目前仅可用于ESP8266,其他设备的RAM足以进行加密通信

#include <Blinker.h>         //使用第三方库
#include <DHT.h>             //使用第三方库

char auth[] = "aabfdfc3b167";//Blinker APP中获取到的Secret Key(密钥)
char ssid[] = "Xiaomi_123";  //wifi名称
char pswd[] = "felix1234";   //wifi密码

// 新建组件对象
BlinkerButton Button1("btn-key");//组件对象,要和APP组件中的“数据键名”一致

///读取DHTXX传感器相关定义和变量//
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

#define DHTPIN D7   //定义单总线协议传输的数据引脚

//传感器类型选择
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);
float humi_read = 0, temp_read = 0;
///

// 心跳包函数
void heartbeat()
{
    //将设备端采集的温湿度数据,通过心跳包同步数据的方式,显示到APP上
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);//APP中的Monitor控件打印的信息
    if (state=="on") 
    {
        digitalWrite(LED_BUILTIN, LOW);//打开LED灯
        // 反馈开关状态
        Button1.print("on");
    } else if(state=="off"){
        digitalWrite(LED_BUILTIN, HIGH);//关闭LED灯
        // 反馈开关状态
        Button1.print("off");
    }
}

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);//默认点亮LED

    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);//绑定按键回调
    //注册一个心跳包
    Blinker.attachHeartbeat(heartbeat);
    dht.begin();//DTHXX传感器初始化
}

void loop() 
{
    Blinker.run();

    float h = dht.readHumidity();//读取湿度值
    float t = dht.readTemperature();//读取温度值

    //如果身边没有DHTXX传感器,则使用以下数据来调试
    // h = 60.1;//调试用,模拟湿度值
    // t = 25.2;//调试用,模拟温度值

    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下的所有延时操作,都需要使用Blinker.delay(val);替代,否则会导致设备断开连接
    Blinker.delay(2000);
}

第六步:修改以下代码。

修改密钥、wifi名称、wifi密码为自己的。

char auth[] = "Your Device Secret Key";//Blinker APP中获取到的Secret Key(密钥)
char ssid[] = "Your WiFi network SSID or name";//wifi名称
char pswd[] = "Your WiFi network WPA password or WEP key";//wifi密码

第七步:将DHT11模块与ESP8266开发板进行连接。

DHT11     ---      ESP8266

DAT       ---       D7

VCC       ---       3V3

GND       ---       GND

第八步:进行编译、下载,编译过程中发现有“黄色警告”,不用理会,最后编译是“SUCCESS”就OK。

下载成功后,可以看到开发板上的LED亮了起来,打开VSCODE的串口监视器可以看到打印一些信息,当看到“MQTT Connected!”则证明连接wifi是成功的,当看到"state":"online"则证明设备是在线的。

如果有接DHT11或DHT22模块,则能看到打印湿度、温度。

VSCODE串口监视器打印的信息:
......
[11393129] Humidity: 93.00 %
[11393130] Temperature: 19.50 *C
[11395181] Humidity: 93.00 %
[11395181] Temperature: 19.50 *C
[11397230] Humidity: 93.00 %

如果没有接,则会说连接传感器失败,没有接也没有关系,给一个固定值就行,因为我们的主要目的是为了调试数据在APP上显示。

[18161] Failed to read from DHT sensor!
[20260] Failed to read from DHT sensor!
[22370] Failed to read from DHT sensor!
[24475] Failed to read from DHT sensor!

第九步:APP界面添加组件,进行开关键控制并显示湿度、温度值。

1)添加“开关按键”组件。

点击右上角的“编辑图标”,进入编辑状态,全部删除原来APP中的组件,点击“按键图标”,然后进入编辑。

2)添加湿度、温度组件。

点击“数据图标”,然后进入编辑。

     

3)添加调试组件。

点击“调试图标”,然后进入编辑。

4)最后的界面如下图所示,按右上角的“锁图标”进行保存。

5)保存后的界面如下图所示,按开关键可以控制开关板上LED灯的亮和灭,同时湿度、温度组件正常显示数据。

至此,所有操作完成。

完整的工程文件:https://download.csdn.net/download/felix_tao/14978839

 

参考文档:

点灯科技:https://www.arduino.cn/thread-83176-1-1.html

猜你喜欢

转载自blog.csdn.net/felix_tao/article/details/113487364