求教,怎么给配网加超时-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1439|回复: 0

求教,怎么给配网加超时

[复制链接]
发表于 2021-7-15 12:16 | 显示全部楼层 |阅读模式
如何能配网加上超时,就是在一定时间内没有配网或配网失败,就进入loop循环,进入离线运行状态.请大神不吝赐教.谢谢!!!

  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266HTTPClient.h>

  4. #include <DNSServer.h>
  5. #include <ESP8266WebServer.h>
  6. #include <WiFiManager.h>

  7. #define sensor    D7  //红外传感器输入口

  8. int LED1 = 12;
  9. int LED2 = 5;
  10. int buzzer = 14;
  11. int smokeA0 = 13;
  12. int sensorThreshold = 400;
  13. /******************************************************************************/

  14. String uid = "ed5c4b420f53e61f30921";             // 用户私钥,巴法云控制台获取
  15. String type = "1";                                           // 1表示是预警消息,默认即可
  16. String device = "烟雾监测";                           // 设备名称
  17. String msg = "烟雾浓度超标";       //发送的消息
  18. String msg2 = "车间";
  19. int delaytime = 4;                                          
  20. String ApiUrl = "http://ai.bemfa.com/api/wechat/v1/";        //默认 api 网址

  21. /******************************************************************************/
  22. static uint32_t lastWiFiCheckTick = 0;


  23. //=======================================================================
  24. //              WIFI重新连接函数
  25. //=======================================================================
  26. void startSTA(){
  27.   WiFi.disconnect();
  28.   WiFi.mode(WIFI_STA);
  29.   WiFi.begin();
  30. }


  31. //=======================================================================
  32. //              WIFI状态检测函数,如果WIFI断开自动重连
  33. //=======================================================================
  34. void doWiFiTick(){
  35.     if ( WiFi.status() != WL_CONNECTED ) {
  36.         //未连接1s重连
  37.         if (millis() - lastWiFiCheckTick > 1000) {
  38.           lastWiFiCheckTick = millis();
  39.           startSTA();
  40.         }
  41.       }
  42. }

  43. //=======================================================================
  44. //                    初始化
  45. //=======================================================================

  46. void setup() {
  47.   {
  48.   pinMode(LED1, OUTPUT);
  49.   pinMode(LED2, OUTPUT);
  50.   pinMode(buzzer, OUTPUT);
  51.   pinMode(smokeA0, INPUT);
  52. }
  53.   {
  54.     Serial.begin(115200);      
  55.     // 建立WiFiManager对象
  56.     WiFiManager wifiManager;
  57.    
  58.     // 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
  59.     wifiManager.autoConnect("AutoConnectAP");
  60.    
  61.     // 如果您希望该WiFi添加密码,可以使用以下语句:
  62.     // wifiManager.autoConnect("AutoConnectAP", "12345678");
  63.     // 以上语句中的12345678是连接AutoConnectAP的密码
  64.    
  65.     // WiFi连接成功后将通过串口监视器输出连接成功信息
  66.     Serial.println("");
  67.     Serial.print("ESP8266 Connected to ");
  68.     Serial.println(WiFi.SSID());              // WiFi名称
  69.     Serial.print("IP address:\t");
  70.     Serial.println(WiFi.localIP());           // IP
  71.    }
  72.   pinMode(sensor, INPUT);   // declare sensor as input
  73.   delay(1000);
  74.   Serial.begin(115200);
  75.   WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  76.   delay(1000);
  77.   WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot
  78.   
  79.   WiFi.begin();     //Connect to your WiFi router
  80.   Serial.println("");

  81.   Serial.print("Connecting");
  82.   // Wait for connection
  83.   while (WiFi.status() != WL_CONNECTED) {
  84.     delay(500);
  85.     Serial.print(".");
  86.   }

  87.   //If connection successful show IP address in serial monitor
  88.   Serial.println("");
  89.   Serial.print("Connected to ");
  90.   Serial.println();
  91.   Serial.print("IP address: ");
  92.   Serial.println(WiFi.localIP());  //IP address assigned to your ESP
  93. }

  94. //=======================================================================
  95. //                    主循环
  96. //=======================================================================
  97. void loop() {
  98.   {
  99.   int analogSensor = analogRead(smokeA0);

  100.   Serial.print("Pin A0: ");
  101.   Serial.println(analogSensor);
  102.   // Checks if it has reached the threshold value
  103.   if (analogSensor > sensorThreshold)
  104.   {
  105.     digitalWrite(LED1, HIGH);
  106.     digitalWrite(LED2, LOW);
  107.     noTone(buzzer);
  108.   }
  109.   else
  110.   {
  111.     digitalWrite(LED1, LOW);
  112.     digitalWrite(LED2, HIGH);
  113.     tone(buzzer, 1000, 200);
  114.   }
  115.   delay(100);
  116. }
  117.   doWiFiTick();

  118.     long state = digitalRead(sensor);
  119.     if(state == LOW) {
  120.       Serial.println("people here");
  121.       doHttpStick();//在想推送消息的地方执行推送函数即可
  122.       delay(1000);
  123.     }
  124.     else {
  125.       Serial.println("no people");
  126.       delay(1000);
  127.       }
  128. }


  129. //******微信消息推送函数********//
  130. void doHttpStick(){  //微信消息推送函数
  131.   HTTPClient http;    //Declare object of class HTTPClient
  132.   String postData;
  133.   //Post Data
  134.   postData = "uid="+uid+"&type=" + type +"&time="+delaytime+"&device="+device+"&msg="+msg+"&msg2="+msg2;
  135.   http.begin(ApiUrl);              //Specify request destination
  136.   http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header
  137.   int httpCode = http.POST(postData);   //Send the request
  138.   String payload = http.getString();    //Get the response payload
  139.   Serial.println(httpCode);   //Print HTTP return code
  140.   Serial.println(payload);    //Print request response payload
  141.   http.end();  //Close connection
  142.   Serial.println("send success");  
  143.   }
  144. //=======================================================================
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 10:35 , Processed in 0.097920 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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