2017-03-12 7 views
0

내 esp8266에 Arduino 스케치가 있습니다. 클라이언트가 esp8266에서 호스팅되는 wifi에 연결할 때마다 내장 된 LED를 몇 초 동안 켜고 싶습니다. 이벤트는 정상적으로 작동하지만, delay()은 아무 것도하지 않습니다. 핸들러의 모든 로그 메시지가 한꺼번에 표시되며 LED가 한 번 깜박입니다.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 (Watchdog Timer)로 인한 동기 확인 지연으로 이러한 콜백을 차단할 수 없습니다. 루프와 플래그로 표시 한 것처럼 비동기 적으로 검사해야합니다.