我对ESP8266-Arduino的SoftAP有问题。
如果ACCESS_POINT为false,则一切正常。 但是,如果ACCESS_POINT为true:则可以。但是几秒钟的数据传输后,AP消失了。重新连接的唯一方法是重启ESP8266。
我需要使用AP模式才能在智能手机上使用手机。
我已经清除了ESP8266的完整内存。但这无济于事...
#define PIN_NEOPIXEL 2
#define PIN_LED_SWITCH 0
#define NUMPIXELS 60
#define ACCESS_POINT true
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
ESP8266WebServer server(80);
WebSocketsServer webSocket(81);
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) {
switch (type) {
case WStype_BIN:
//Serial.printf("[%u] get Text: %s %u\n", num, payload, lenght);
if (payload[0] == '#') {
if(lenght == 1 + NUMPIXELS * 3) {
for(int i=0;i<NUMPIXELS;i++){
int r = payload[1 + i * 3];
int g = payload[1 + i * 3 + 1];
int b = payload[1 + i * 3 + 2];
pixels.setPixelColor(i, pixels.Color(r,g,b));
}
pixels.show();
}
}
if (payload[0] == '!') { //LED ein/aus
if (payload[1] == '1') {
digitalWrite(PIN_LED_SWITCH, false);
pinMode(PIN_LED_SWITCH, OUTPUT);
} else {
pinMode(PIN_LED_SWITCH, INPUT_PULLUP);
}
}
break;
}
}
void setup() {
pixels.begin();
Serial.begin(115200);
WiFi.mode(WIFI_OFF);
if(!ACCESS_POINT) {
WiFi.mode(WIFI_STA);
WiFi.begin("SSID", "...key...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
} else {
WiFi.mode(WIFI_AP);
IPAddress apIP(192, 168, 4, 1);
IPAddress netMsk(255, 255, 255, 0);
WiFi.softAPConfig(apIP, apIP, netMsk);
WiFi.softAP("Pixelstick");
while (WiFi.softAPgetStationNum() < 1) {
delay(1000);
}
}
server.on("/", []() {
server.send(200, "text/html", INDEX_HTML);
});
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
void loop() {
webSocket.loop();
server.handleClient();
yield();
}
答案 0 :(得分:0)
由于您未提供任何版本的软件或硬件:
以下内容在NodeMCU v0.9和v1.0(ESP8266-12E)上稳定运行
IDE->具有ESP软件包版本2.42的Arduino IDE 1.85(也适用于2.41)
包装的版本可以在这里检查 C:\ Users [您的用户名] \ AppData \ Local \ Arduino15 \ packages \ esp8266 \ hardware \ esp8266 \ 2.4.2
对于这些环境,请执行以下操作
void loop() {
webSocket.loop();
server.handleClient();
// yield(); ==> delete this line
}
yield()导致esp8266库无法预测的行为-在较旧的版本中,它被用作某些bug的解决方法,但从来都不是令人满意的解决方案