2017-03-12 18 views
0

私はesp8266でArduinoスケッチをしています。クライアントがesp8266でホストされているWiFiに接続するたびに、内蔵LEDを数秒間点灯させたい。イベントはうまく起動していますが、delay()は何もしません。そのハンドラ内のすべてのログメッセージが一度に表示され、LEDが1回だけ点滅します。イベントハンドラでdelay()が遅延していないようです。

delay()setup()のコールはうまく動作しますが、

#include <ESP8266WiFi.h> 

const char *ssid = "button"; 
const char *password = "buttonpassword"; 

void onWiFiEvent(WiFiEvent_t event) { 
    digitalWrite(LED_BUILTIN, LOW); 
    Serial.println("led on"); 
    delay(5000); 
    Serial.println("delay over"); 
    digitalWrite(LED_BUILTIN, HIGH); 
    Serial.println("led off"); 
} 

void setup() { 
    Serial.begin(115200); 
    Serial.println(); 
    pinMode(LED_BUILTIN, OUTPUT); 
    digitalWrite(LED_BUILTIN, HIGH); 
    Serial.println("setup before delay"); 
    delay(5000); 
    Serial.println("setup after delay"); 

    Serial.println("Setting up AP"); 
    WiFi.softAP(ssid, password); 
    WiFi.onEvent(onWiFiEvent, WIFI_EVENT_SOFTAPMODE_STACONNECTED); 
    Serial.println("AP ready"); 
} 

void loop() { 
} 
+0

私は、ハンドラのLEDをオンにして時間を記録し、遅延が過ぎた後に 'loop()'にコードを追加するだけで解決しました。私はまだ含まれているコードがうまくいかなかった理由を知りたいと思っています。 –

答えて

0

これは予想される動作です。ウォッチドッグタイマ(WDT)による同期チェックの遅延でこれらのコールバックをブロックすることはできません。ループ内でフラグを立てると、非同期でチェックを行う必要があります。

関連する問題