esp8266通过blinker让小爱同学读取温湿度-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1682|回复: 2

[分享] esp8266通过blinker让小爱同学读取温湿度

[复制链接]
发表于 2021-3-23 11:41 | 显示全部楼层 |阅读模式
给大家分享一个ESP8266反馈温室的程序
自己根据例程修改
硬件:ESP8266 (nodeMCU、01、01S等均可)、DHT11(DHT22、DHT21均可,可以和01模块匹配的节点器也可以)、辅料杜邦线数据线若干
注意事项:1、Blinker中一定选择阿里云服务器
                 2、小爱同学状态回调函数中湿度必须是int型,否则反馈出错


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

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

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

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

  14. //定义温湿度传感器信号针脚
  15. #define DHTPIN 2

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

  20. DHT dht(DHTPIN, DHTTYPE);

  21. uint32_t read_time = 0;

  22. float humi_read, temp_read;

  23. void dataRead(const String & data)
  24. {
  25.     BLINKER_LOG("Blinker readString: ", data);

  26.     Blinker.vibrate();
  27.    
  28.     uint32_t BlinkerTime = millis();
  29.    
  30.     Blinker.print("millis", BlinkerTime);
  31. }

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

  37.     switch (queryCode)
  38.     {
  39.       case BLINKER_CMD_QUERY_ALL_NUMBER :
  40.            BLINKER_LOG("MIOT Query All");
  41.            BlinkerMIOT.temp(temp_read);
  42.            BlinkerMIOT.humi(hVal);
  43.            BlinkerMIOT.print();
  44.            break;
  45.       case BLINKER_CMD_QUERY_TEMP_NUMBER :
  46.            BLINKER_LOG("MIOT Query TEMP");
  47.            BlinkerMIOT.temp(temp_read);
  48.            BlinkerMIOT.print();
  49.            break;
  50.       case BLINKER_CMD_QUERY_HUMI_NUMBER :
  51.            BLINKER_LOG("MIOT Query HUMI");
  52.            BlinkerMIOT.humi(hVal);
  53.            BlinkerMIOT.print();
  54.            break;
  55.       default :
  56.            BlinkerMIOT.temp(100);
  57.            BlinkerMIOT.humi(100);
  58.            BlinkerMIOT.print();
  59.            break;
  60.     }
  61. }

  62. void heartbeat()
  63. {
  64.     HUMI.print(humi_read);
  65.     TEMP.print(temp_read);
  66. }

  67. void setup()
  68. {
  69.     //调试程序
  70.     Serial.begin(115200);
  71.     BLINKER_DEBUG.stream(Serial);

  72.     pinMode(LED_BUILTIN, OUTPUT);
  73.     digitalWrite(LED_BUILTIN, LOW);

  74.     Blinker.begin(auth);              //手机配网用这段
  75.     //Blinker.begin(auth, ssid, pswd); //代码配网用这段
  76.     Blinker.attachData(dataRead);
  77.     Blinker.attachHeartbeat(heartbeat);

  78.     //注册小爱同学状态回调函数
  79.     BlinkerMIOT.attachQuery(miotQuery);
  80.     dht.begin();
  81. }

  82. void loop()
  83. {
  84.     Blinker.run();

  85.     if (read_time == 0 || (millis() - read_time) >= 2000)
  86.     {
  87.         read_time = millis();

  88.         float h = dht.readHumidity();
  89.         float t = dht.readTemperature();        

  90.         if (isnan(h) || isnan(t)) {
  91.             BLINKER_LOG("Failed to read from DHT sensor!");
  92.             return;
  93.         }

  94.         humi_read = h;
  95.         temp_read = t;

  96.         BLINKER_LOG("Humidity: ", h, " %");
  97.         BLINKER_LOG("Temperature: ", t, " *C");
  98.     }
  99. }
复制代码



 楼主| 发表于 2021-3-23 14:37 | 显示全部楼层
小爱同学状态回调函数queryCode返回值是0,所以switch……case……函数,内容我不太会写。
按例程文件,天猫精灵反馈的是字符串。
所以和我一样遇到问题的不要再钻牛角尖了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:50 , Processed in 0.090511 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表