Blinker 如何判断连接状态-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1665|回复: 2

[过期] Blinker 如何判断连接状态

[复制链接]
发表于 2021-3-3 15:32 | 显示全部楼层 |阅读模式
我想通过获取连接状态来指示led,这样写:
  1. while(! Blinker.connect()) {
  2.         digitalWrite(WiFiLedPin, HIGH);
  3.         delay(100);  
  4.         digitalWrite(WiFiLedPin, LOW);
  5.         delay(100);  
  6.     }
  7. digitalWrite(WiFiLedPin, HIGH);
复制代码
未连接成功时闪烁,连接成功后常亮。应该是不行的吧?

我测试使用上面这段代码,运行过几次没有问题,可是后来就连接不上服务器了,提示:
11:56:38.347 -> [3201] WiFi Connected.
11:56:38.347 -> [3201] IP Address:
11:56:38.347 -> [3201] 192.168.0.110
11:56:42.685 -> [7520] ERROR: Maybe you have put in the wrong AuthKey!
11:56:42.685 -> [7520] ERROR: Or maybe your request is too frequently!
11:56:42.685 -> [7520] ERROR: Or maybe your network is disconnected!

应该是那个while导致频繁连接,被服务器拒绝了吧?
我看了源码,这里应该是源码吧?arduino-1.8.13/libraries/blinker-library-dev_3.0/src/Blinker/BlinkerProtocol.h
  1. <div>       <span style="color: #0000ff;">int</span> <span style="color: #795e26;">connect</span>()       { <span style="color: #af00db;">return</span> <span style="color: #001080;">isInit</span> ? <span style="color: #001080;">conn</span>-><span style="color: #795e26;">connect</span>() : <span style="color: #0000ff;">false</span>; }</div><div>        <span style="color: #0000ff;">int</span> <span style="color: #795e26;">connected</span>()</div><div>        {</div><div>            <span style="color: #af00db;">if</span> (<span style="color: #001080;">isInit</span>)</div><div>            {</div><div><span style="color: #008000;">                // if (conn->connected())</span></div><div><span style="color: #008000;">                // {</span></div><div><span style="color: #008000;">                //     state == CONNECTED;</span></div><div><span style="color: #008000;">                //     return true;</span></div><div><span style="color: #008000;">                // }</span></div><div><span style="color: #008000;">                // else</span></div><div><span style="color: #008000;">                // {</span></div><div><span style="color: #008000;">                //     state = DISCONNECTED;</span></div><div><span style="color: #008000;">                //     return false;</span></div><div><span style="color: #008000;">                // }</span></div><div>                <span style="color: #af00db;">return</span> <span style="color: #001080;">conn</span>-><span style="color: #795e26;">connected</span>();</div><div>            }</div><div>            <span style="color: #af00db;">else</span></div><div>            {</div><div>                <span style="color: #001080;">state</span> = <span style="color: #0070c1;">DISCONNECTED</span>;</div><div>                <span style="color: #af00db;">return</span> <span style="color: #0000ff;">false</span>;</div><div>            }</div>
复制代码
这个 conn->connect() 到底是获取连接状态还是执行连接呢?我猜测大概率是执行连接。


那么,还有什么方法能获取到 WiFi 连接成功以及服务器连接成功的方法呢?这个方法应该是从服务器获取状态而非执行连接后返回的结果。
begin 方法没有返回值,无法作为判断。
发表于 2021-3-6 11:19 | 显示全部楼层

  1. //未配网成功,板载灯闪
  2. #define BLINKER_PRINT Serial
  3. #define BLINKER_WIFI
  4. #define led D4   //D4
  5. #define Relay_5 D5   //D5
  6. #define Relay_6 D6   //D6
  7. #define Relay_7 D7   //D7
  8. #define Relay_8 D8   //D8

  9. #include <DHT.h>
  10. #include <Blinker.h>
  11. #include <ESP8266WiFi.h>

  12. #define DHTPIN D1   //D0
  13. #define DHTTYPE DHT11   // DHT 11

  14. char auth[] = "*******";
  15. char ssid[] = "*******";
  16. char pswd[] = "*******";
  17.   

  18. // 新建组件对象

  19. BlinkerButton Button5("btn-d5");
  20. BlinkerButton Button6("btn-d6");
  21. BlinkerButton Button7("btn-d7");
  22. BlinkerButton Button8("btn-d8");
  23. BlinkerButton Button9("btn-re");
  24. BlinkerButton Button("btn-w");

  25. BlinkerNumber HUMI("num-shidu");//caiyq52-此组件未点灯app中自己设置的湿度数据键名,必须与自己APP中设定的名称一致  
  26. BlinkerNumber TEMP("num-wendu");//caiyq52-此组件未点灯app中自己设置的温度数据键名,必须与自己APP中设定的名称一致


  27. DHT dht(DHTPIN, DHTTYPE);  
  28. uint32_t read_time = 0;  
  29. float humi_read=0, temp_read=0;

  30. //心跳包
  31. void heartbeat()
  32. {  
  33.     HUMI.print(humi_read);  
  34.     TEMP.print(temp_read);  
  35. }
  36.   
  37. void button5_callback(const String & state) {
  38.   
  39.     BLINKER_LOG("Relay_5 get button state: ", state);
  40.     if (state=="on") {
  41.         digitalWrite(Relay_5, HIGH);        // 反馈开关状态
  42.         Button5.print("on");
  43.       } else if(state=="off"){
  44.         digitalWrite(Relay_5, LOW);        // 反馈开关状态
  45.         Button5.print("off");
  46.       }
  47.     Blinker.vibrate();  
  48. }  
  49.   
  50. void button6_callback(const String & state) {
  51.   
  52.     BLINKER_LOG("Relay_6 get button state: ", state);
  53.     if (state=="on") {
  54.         digitalWrite(Relay_6, HIGH);        // 反馈开关状态
  55.         Button6.print("on");
  56.       } else if(state=="off"){
  57.         digitalWrite(Relay_6, LOW);        // 反馈开关状态
  58.         Button6.print("off");
  59.       }
  60.     Blinker.vibrate();  
  61. }  
  62.   
  63. void button7_callback(const String & state) {
  64.   
  65.     BLINKER_LOG("Relay_7 get button state: ", state);
  66.     if (state=="on") {
  67.         digitalWrite(Relay_7, HIGH);        // 反馈开关状态
  68.         Button7.print("on");
  69.       } else if(state=="off"){
  70.         digitalWrite(Relay_7, LOW);        // 反馈开关状态
  71.         Button7.print("off");
  72.       }
  73.     Blinker.vibrate();  
  74. }  
  75.   
  76. void button8_callback(const String & state) {
  77.   
  78.     BLINKER_LOG("Relay_8 get button state: ", state);
  79.     if (state=="on") {
  80.         digitalWrite(Relay_8, HIGH);        // 反馈开关状态
  81.         Button8.print("on");
  82.       } else if(state=="off"){
  83.         digitalWrite(Relay_8, LOW);        // 反馈开关状态
  84.         Button8.print("off");
  85.       }
  86.     Blinker.vibrate();  
  87. }  


  88. //刷新显示所有开关状态
  89. void button9_callback(const String & state) {
  90.   
  91.     BLINKER_LOG("get button state: ", state);
  92.    
  93.   //5678继电器刷新
  94.     if(digitalRead (Relay_5)==HIGH){
  95.       Button5.print("on");      }
  96.       else if(digitalRead (Relay_5)==LOW){
  97.       Button5.print("off");
  98.       }
  99.       
  100.      if(digitalRead (Relay_6)==HIGH){
  101.       Button6.print("on");
  102.       }
  103.       else if(digitalRead (Relay_6)==LOW){
  104.       Button6.print("off");
  105.       }

  106.     if(digitalRead (Relay_7)==HIGH){
  107.       Button7.print("on");
  108.       }
  109.       else if(digitalRead (Relay_7)==LOW){
  110.       Button7.print("off");
  111.       }

  112.      if(digitalRead (Relay_8)==HIGH){
  113.       Button8.print("on");
  114.       }
  115.       else if(digitalRead (Relay_8)==LOW){
  116.       Button8.print("off");
  117.       }
  118.       //温湿度刷新
  119.     HUMI.print(humi_read);  
  120.     TEMP.print(temp_read);
  121. }

  122. void setup() {
  123.   
  124.     // 初始化串口,并开启调试信息
  125.   
  126.     Serial.begin(115200);   
  127.   
  128.     BLINKER_DEBUG.stream(Serial);
  129.     BLINKER_DEBUG.debugAll();
  130.   
  131.     // 初始化有LED的IO
  132.   
  133.     pinMode(led, OUTPUT);
  134.     digitalWrite(led, HIGH);
  135.    
  136.     pinMode(Relay_5, OUTPUT);  
  137.     digitalWrite(Relay_5,LOW);
  138.    
  139.     pinMode(Relay_6, OUTPUT);  
  140.     digitalWrite(Relay_6, LOW);

  141.     pinMode(Relay_7, OUTPUT);  
  142.     digitalWrite(Relay_7, LOW);
  143.    
  144.     pinMode(Relay_8, OUTPUT);  
  145.     digitalWrite(Relay_8, LOW);
  146.    
  147.     // 初始化blinker
  148.     Blinker.begin(auth, ssid, pswd);
  149.     Blinker.attachHeartbeat(heartbeat);  
  150.     dht.begin();
  151.   
  152.    // Button4.attach(button4_callback);
  153.     Button5.attach(button5_callback);
  154.     Button6.attach(button6_callback);
  155.     Button7.attach(button7_callback);
  156.     Button8.attach(button8_callback);
  157.     Button9.attach(button9_callback);
  158.     //Blinker.attachDataStorage(dataStorage);

  159.     gotoWifi();

  160. }


  161.   
  162. void loop() {
  163.   if(WiFi.status()!=WL_CONNECTED){
  164.     WiFi.disconnect();
  165.      Blinker.begin(auth, ssid, pswd);
  166.   }
  167.   
  168.   Blinker.run();
  169.   float h = dht.readHumidity();
  170.   float t = dht.readTemperature();

  171.     if (isnan(h) || isnan(t))
  172.     {
  173.         BLINKER_LOG("Failed to read from DHT sensor!");
  174.     }
  175.     else
  176.     {
  177.         BLINKER_LOG("Humidity: ", h, " %");
  178.         BLINKER_LOG("Temperature: ", t, " *C");
  179.         humi_read = h;
  180.         temp_read = t;
  181.         if (h>60)
  182.         { Button.print("on");}
  183.         if (h<60)
  184.         {Button.print("off");}
  185.     }

  186.     Blinker.delay(2000);
  187. }
  188. void gotoWifi(){
  189.   while(WiFi.status()!=WL_CONNECTED){
  190.     bool is=digitalRead(led);
  191.     digitalWrite(led,!is);
  192.     delay(500);
  193.   }
  194.   digitalWrite(led,0);
  195. }
  196.   
  197. 参考的一位大佬程序,连接wifi时,LED闪烁,连接后,常亮
  198.   
复制代码



 楼主| 发表于 2021-3-9 10:44 | 显示全部楼层

谢谢,已解决。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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