智能配网,掉电重新上电后经常需要重新配网是什么问题?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2245|回复: 5

[已解答] 智能配网,掉电重新上电后经常需要重新配网是什么问题?

[复制链接]
发表于 2020-7-29 19:55 | 显示全部楼层 |阅读模式
设定的智能插座晚上会自动关闭连接的普通插排电源,NodeMCU和ESP-01S都连接在普通插排上,第二天打开插排电源后,经常发现NodeMCU和ESP-01S无法连接网络,处于等待联网状态,只能通过ESPTouch或者微信配网重新连接网,短暂的断开重新通电却可以自己联网!
请大家帮忙看看下面的代码存在什么问题!
  1. /* *****************************************************************
  2. *
  3. *  名称:DHT11温湿度计
  4. *  简介:DHT11温湿度传感器DATA引脚接入NodeMCU D4(GPIO2)引脚,接入小爱同学、
  5. *       小度音箱、天猫精灵,增加历史数据存储与图表查看数据的功能
  6. *  作者:MOLUN
  7. *  博客:https://molun.cf/
  8. *
  9. * *****************************************************************/

  10. #define BLINKER_WIFI
  11. #define BLINKER_MIOT_SENSOR
  12. #define BLINKER_DUEROS_SENSOR
  13. #define BLINKER_ALIGENIE_SENSOR
  14. #define BLINKER_PRINT Serial

  15. #include <Blinker.h>
  16. #include <DHT.h>
  17. #include <ESP8266WiFi.h>    //WIFI库,配网必需

  18. int count = 0;     //时间计数
  19. bool WIFI_Status = true;   //WIFI状态标志位

  20. char auth[] = "6825c3f27773"; // Blinker APP中添加设备时生成的Secret Key

  21. /* 微信智能配网 */
  22. void smartConfig()
  23. {
  24.   WiFi.mode(WIFI_STA);//设置STA模式
  25.   Serial.println("\r\nWait for Smartconfig...");//打印log信息
  26.   WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
  27.   while(1)
  28.   {
  29.     Serial.println(".");
  30.     digitalWrite(LED_BUILTIN,HIGH);//指示灯闪烁
  31.     delay(1000);
  32.     digitalWrite(LED_BUILTIN,LOW);//指示灯闪烁
  33.     delay(1000);
  34.     if(WiFi.smartConfigDone())//配网成功,接收到SSID和密码
  35.     {
  36.       Serial.println("SmartConfig Success");
  37.       Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
  38.       Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
  39.       break;      
  40.     }
  41.   }  
  42. }

  43. /*连接网络*/
  44. void blinkerConnect()
  45. {
  46.   Serial.println("\r\n正在连接WIFI...");

  47.     while(WiFi.status()!=WL_CONNECTED)//判断是否连接WIFI成功
  48.     {
  49.       if(WIFI_Status)
  50.       {
  51.           Serial.print(".");
  52.           digitalWrite(LED_BUILTIN, HIGH);  
  53.           delay(500);                       
  54.           digitalWrite(LED_BUILTIN, LOW);   
  55.           delay(500);                 
  56.           count++;
  57.           if(count>=5)//5s
  58.           {
  59.               WIFI_Status = false;
  60.               Serial.println("WiFi连接失败,请用手机进行配网");
  61.           }        
  62.         }
  63.         else
  64.         {
  65.           smartConfig();  //微信智能配网
  66.         }
  67.     }

  68.     Serial.println("连接成功");  
  69.     Serial.print("IP:");
  70.     Serial.println(WiFi.localIP());
  71. }

  72. BlinkerNumber HUMI("humi");
  73. BlinkerNumber TEMP("temp");

  74. #define DHTPIN D4

  75. #define DHTTYPE DHT11   // DHT 11
  76. //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
  77. //#define DHTTYPE DHT21   // DHT 21 (AM2301)

  78. DHT dht(DHTPIN, DHTTYPE);

  79. uint32_t read_time = 0;

  80. float humi_read, temp_read;

  81. void heartbeat()
  82. {
  83.     HUMI.print(humi_read);
  84.     TEMP.print(temp_read);
  85. }

  86. void dataStorage()
  87. {
  88.     Blinker.dataStorage("temp", temp_read);
  89.     Blinker.dataStorage("humi", humi_read);
  90. }

  91. void miotQuery(int32_t queryCode)
  92. {
  93.     BLINKER_LOG("MIOT Query codes: ", queryCode);

  94.     switch (queryCode)
  95.     {
  96.         case BLINKER_CMD_QUERY_ALL_NUMBER :
  97.             BLINKER_LOG("MIOT Query All");
  98.             BlinkerMIOT.temp(temp_read);
  99.             BlinkerMIOT.humi(humi_read);
  100.             BlinkerMIOT.print();
  101.             break;
  102.         default :
  103.             BlinkerMIOT.temp(20);
  104.             BlinkerMIOT.humi(20);
  105.             BlinkerMIOT.print();
  106.             break;
  107.     }
  108. }

  109. void duerQuery(int32_t queryCode)
  110. {
  111.     BLINKER_LOG("DuerOS Query codes: ", queryCode);

  112.     switch (queryCode)
  113.     {
  114.         case BLINKER_CMD_QUERY_HUMI_NUMBER :
  115.             BLINKER_LOG("DuerOS Query HUMI");
  116.             BlinkerDuerOS.humi(humi_read);
  117.             BlinkerDuerOS.print();
  118.             break;
  119.         case BLINKER_CMD_QUERY_TEMP_NUMBER :
  120.             BLINKER_LOG("DuerOS Query TEMP");
  121.             BlinkerDuerOS.temp(temp_read);
  122.             BlinkerDuerOS.print();
  123.             break;
  124.         default :
  125.             BlinkerDuerOS.temp(20);
  126.             BlinkerDuerOS.humi(20);
  127.             BlinkerDuerOS.print();
  128.             break;
  129.     }
  130. }

  131. void aligenieQuery(int32_t queryCode)
  132. {
  133.     BLINKER_LOG("AliGenie Query codes: ", queryCode);

  134.     switch (queryCode)
  135.     {
  136.         case BLINKER_CMD_QUERY_ALL_NUMBER :
  137.             BLINKER_LOG("AliGenie Query All");
  138.             BlinkerAliGenie.temp(temp_read);
  139.             BlinkerAliGenie.humi(humi_read);
  140.             BlinkerAliGenie.print();
  141.             break;
  142.         default :
  143.             BlinkerAliGenie.temp(20);
  144.             BlinkerAliGenie.humi(20);
  145.             BlinkerAliGenie.print();
  146.             break;
  147.     }
  148. }

  149. void dataRead(const String & data)
  150. {
  151.     BLINKER_LOG("Blinker readString: ", data);

  152.     Blinker.vibrate();
  153.    
  154.     uint32_t BlinkerTime = millis();
  155.    
  156.     Blinker.print("millis", BlinkerTime);
  157. }

  158. void setup()
  159. {
  160.     Serial.begin(115200);
  161.     BLINKER_DEBUG.stream(Serial);

  162.     pinMode(LED_BUILTIN, OUTPUT);
  163.     digitalWrite(LED_BUILTIN, LOW);

  164.     //网络连接
  165.     blinkerConnect();
  166.   
  167.     // 初始化blinker
  168.     Blinker.begin(auth,WiFi.SSID().c_str(),WiFi.psk().c_str()); //根据配网得到的WIFI信息和设备秘钥,连接到Blinker云   
  169. //    Blinker.begin(auth, ssid, pswd);
  170.     Blinker.attachData(dataRead);
  171.     Blinker.attachHeartbeat(heartbeat);
  172.     Blinker.attachDataStorage(dataStorage);
  173.     BlinkerMIOT.attachQuery(miotQuery);
  174.     BlinkerDuerOS.attachQuery(duerQuery);
  175.     BlinkerAliGenie.attachQuery(aligenieQuery);
  176.     Blinker.setTimezone(8.0);   
  177.     dht.begin();
  178. }

  179. void loop()
  180. {
  181.     Blinker.run();

  182.     if (read_time == 0 || (millis() - read_time) >= 2000)
  183.     {
  184.         read_time = millis();

  185.         float h = dht.readHumidity();
  186.         float t = dht.readTemperature();        

  187.         if (isnan(h) || isnan(t)) {
  188.             BLINKER_LOG("Failed to read from DHT sensor!");
  189.             return;
  190.         }

  191.         float hic = dht.computeHeatIndex(t, h, false);

  192.         humi_read = h;
  193.         temp_read = t;

  194.         BLINKER_LOG("Humidity: ", h, " %");
  195.         BLINKER_LOG("Temperature: ", t, " °C");
  196.         BLINKER_LOG("Heat index: ", hic, " °C");
  197.     }
  198. }
复制代码


发表于 2020-7-29 20:48 | 显示全部楼层
你自己没存吧。用blinker自带的esptouch配置,或者自己存下
 楼主| 发表于 2020-8-3 16:53 | 显示全部楼层
奈何col 发表于 2020-7-29 20:48
你自己没存吧。用blinker自带的esptouch配置,或者自己存下

blinker自带的esptouch折腾一番后搞定,发现esp8266 2.7.3下存在问题,一直滚动配网信息设备不在线,2.7.2下才可以正常使用

点评

和配网无关,2.7.3自带的ssl lib有bug,官方例程也会重启。 使用低版本package即可  详情 回复 发表于 2020-8-3 19:09
发表于 2020-8-3 19:09 | 显示全部楼层
molun 发表于 2020-8-3 16:53
blinker自带的esptouch折腾一番后搞定,发现esp8266 2.7.3下存在问题,一直滚动配网信息设备不在线,2.7. ...

和配网无关,2.7.3自带的ssl lib有bug,官方例程也会重启。
使用低版本package即可

点评

package昨天更新了2.7.4,已经修复了这个bug  详情 回复 发表于 2020-8-4 14:01
发表于 2020-8-4 14:01 | 显示全部楼层
奈何col 发表于 2020-8-3 19:09
和配网无关,2.7.3自带的ssl lib有bug,官方例程也会重启。
使用低版本package即可 ...

package昨天更新了2.7.4,已经修复了这个bug
发表于 2021-12-22 13:24 | 显示全部楼层
第56行加一个WiFi.begin();试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 11:46 , Processed in 0.072319 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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