我的esp8266上有一张Arduino草图。每当客户端连接到esp8266上托管的wifi时,我想点亮内置LED几秒钟。该事件触发得很好,但delay()
没有做任何事情 - 该处理程序中的所有日志消息立即出现,而LED只闪烁一次。
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 :(得分:0)
这是预期的行为。由于看门狗定时器(WDT)导致的同步检查延迟,您无法阻止这些回调。您需要异步执行检查,就像在循环中用标记表示的那样。