Blinker读取DHT11温湿度,支持小爱同学查询-Arduino中文社区 - Powered by Discuz! Archiver

Guofuqiang01 发表于 2021-4-9 16:24

Blinker读取DHT11温湿度,支持小爱同学查询

本帖最后由 Guofuqiang01 于 2021-4-21 09:00 编辑


#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG    //Smartconfig手机配网用这段,代码写入注释这一条
#define BLINKER_WITHOUT_SSL //非SSL加密通信接入,省堆栈
#define BLINKER_MIOT_SENSOR

#include <DHT.h>
#include <Blinker.h>

char auth[] = "key-----";//blinker账户生产的密码,小爱同学必须选用阿里云
//代码配网用下面这两段
//char ssid[] = "WIFI ssid";   //WiFi账号
//char pswd[] = "WiFi pswd";   //WiFi密码


//定义温湿度传感器信号针脚
#define DHTPIN D3

//选择传感器类型
#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, temp_read;

//定义blinker软件内数据组件键名分别为:humi、temp
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");

//定义blinker软件中重置esp设置按钮
BlinkerButton Reset("恢复出厂设置");

void reset_callback(const String & state){
      BLINKER_LOG("get button state:", state);
      //当长按"恢复出厂设置"释放后清楚配网信息
      if(state == "pressup"){
                Blinker.reset();
      }
}

//小米小爱状态回调函数
void miotQuery(int32_t queryCode)
{
    BLINKER_LOG("MIOT Query codes: ", queryCode);
    int hVal = dht.readHumidity();    //多次测试湿度必须为整数型

    switch (queryCode)
    {
      case BLINKER_CMD_QUERY_ALL_NUMBER :
         BLINKER_LOG("MIOT Query All");
         BlinkerMIOT.temp(temp_read);
         BlinkerMIOT.humi(hVal);
         BlinkerMIOT.print();
         break;

      default :
         BlinkerMIOT.temp(100);
         BlinkerMIOT.humi(100);
         BlinkerMIOT.print();
         break;
    }
}

void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

void dataStorage()
{
Blinker.dataStorage("temp", temp_read);
Blinker.dataStorage("humi", humi_read);
}
void setup()
{
    //调试程序
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);

    Blinker.begin(auth);            //手机配网用这段
    //Blinker.begin(auth, ssid, pswd); //代码配网用这段
    Blinker.attachHeartbeat(heartbeat);
    Blinker.attachDataStorage(dataStorage);

    //注册小爱同学状态回调函数
    BlinkerMIOT.attachQuery(miotQuery);
      Reset.attach(reset_callback);
      
      //初始化温湿度程序
    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);
}

DHT温湿度计程序,配合另外一个帖子解读吧。


Guofuqiang01 发表于 2021-4-9 17:46

进阶版请看https://www.arduino.cn/thread-103567-1-1.html

810986815 发表于 2021-4-20 11:13

编译不能过

myself1820 发表于 2021-4-20 16:49

33行的分号要用英文符号,#define DHTPIN D3 改成#define DHTPIN 0

Guofuqiang01 发表于 2021-4-27 08:59

myself1820 发表于 2021-4-20 16:49
33行的分号要用英文符号,#define DHTPIN D3 改成#define DHTPIN 0

开发板选择nodeMCU才可以用 Dx这个编号,如果选用通用8266不能这样定义针脚

myself1820 发表于 2021-4-27 09:05

Guofuqiang01 发表于 2021-4-27 08:59
开发板选择nodeMCU才可以用 Dx这个编号,如果选用通用8266不能这样定义针脚

哦,学习了

星雾 发表于 2021-5-1 16:34

在第39行

本帖最后由 星雾 于 2021-5-1 16:46 编辑

您好,现在出现编译到reset 就不能过去

coloz 发表于 2021-5-2 12:37

星雾 发表于 2021-5-1 16:34
您好,现在出现编译到reset 就不能过去

确保你使用的lib为最新

qiuye88 发表于 2021-5-9 14:03

本帖最后由 qiuye88 于 2021-5-9 14:08 编辑


很好,配置一下,就可以用了。

(:L图片尺寸改小了,传上来还是显示那么大,有点不协调。)

17353765654 发表于 2021-5-11 17:15

你好,请问这个传感器多久传一次数据到APP呢,感觉有点慢,在哪改能加快啊
页: [1] 2
查看完整版本: Blinker读取DHT11温湿度,支持小爱同学查询