我是初学者,如果websocket在5秒钟内未收到任何数据,那么我想在从websocket接收数据后实现EEPROM写操作,那么我通过websocket发送的要打开和关闭的值导致LED_STATE想要如果没有来自websocket的传入数据,请在5秒钟后将其写入EEPROM: 这是我的代码,如果您能帮助我解决这个问题,请谢谢。 我已根据需要进行了修改。 但如果可能,则需要EEPROM用于websocket。
B
我没有使用SPIFFS,而是用HTML调用网页
#include <ESP8266WiFi.h>
#include <WebSocketsServer.h>
#include <Hash.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
WiFiServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);
const int pin_led = 5;
unsigned int value;
String data;
const char *msg_toggle_led = "toggleLED";
const char *msg_get_led = "getLEDState";
char msg_buf[10];
int led_state = 0;
int counter = 0; // for EEPROM testing
char* ssid = "esp8266websocket_1";
char* password = "123456789";
void setup()
{
// EEPROM.begin(512);
pinMode(pin_led, OUTPUT);
digitalWrite(pin_led,LOW);
Serial.begin(115200);
Serial.println();
Serial.println("Serial started at 115200");
Serial.println();
// Connect to a WiFi network
Serial.print(F("Connecting to ")); Serial.println(ssid);
WiFi.mode(WIFI_AP);
IPAddress apLocalIp(10,50,1,1);
IPAddress apSubnetMask(255,255,255,0);
WiFi.softAPConfig(apLocalIp,apLocalIp,apSubnetMask);
WiFi.softAP(ssid, password);
WiFi.setSleepMode(WIFI_NONE_SLEEP);
Serial.println("");
Serial.println(F("[CONNECTED]")); Serial.print("[IP "); Serial.print(WiFi.localIP());
Serial.println("]");
// start a server
server.begin();
Serial.println("Server started");
webSocket.begin();
webSocket.onEvent(onWebSocketEvent);
//Serial.print(webSocket.localIP());
}
void loop()
{
webSocket.loop();
}
// Called when receiving any WebSocket message
void onWebSocketEvent(uint8_t client_num,
WStype_t type,
uint8_t * payload,
size_t length) {
// Figure out the type of WebSocket event
switch(type) {
// Client has disconnected
case WStype_DISCONNECTED:
Serial.printf("[%u] Disconnected!\n", client_num);
break;
// New client has connected
case WStype_CONNECTED:
{
IPAddress ip = webSocket.remoteIP(client_num);
Serial.printf("[%u] Connection from ", client_num);
Serial.println(ip.toString());
}
break;
// Echo text message back to client
case WStype_TEXT:
Serial.printf("[%u] Text: %s\n", client_num, payload);
webSocket.sendTXT(client_num, payload);
// data = webSocket.getData(payload);
Serial.printf("[%u] Received text: %s\n", client_num, payload);
// Toggle LED
if ( strcmp((char *)payload, "toggleLED") == 0 ) {
counter++;
led_state = led_state ? 0 : 1;
//sprintf(msg_buf, "%d", led_state);
Serial.printf("Toggling LED to %u\n", led_state);
digitalWrite(pin_led, led_state);
// webSocket.sendTXT(client_num, msg_buf);
// Report the state of the LED
} else if ( strcmp((char *)payload, "getLEDState") == 0 ) {
sprintf(msg_buf, "%d", led_state);
Serial.printf("Sending to [%u]: %s\n", client_num, msg_buf);
webSocket.sendTXT(client_num, msg_buf);
// Message not recognized
} else {
Serial.println("[%u] Message not recognized");
}
break;
// For everything else: do nothing
case WStype_BIN:
case WStype_ERROR:
case WStype_FRAGMENT_TEXT_START:
case WStype_FRAGMENT_BIN_START:
case WStype_FRAGMENT:
case WStype_FRAGMENT_FIN:
default:
break;
}
}
请帮助在WEBSOCKET中实现EEPROM,因为如果websocket启动,只要连接客户端,它就会停留在该位置。因此,如果没有HTML网页的数据,则需要帮助在5秒钟后实现Websocket的ToggleLED状态保存数据。 请帮助,如果可能的话,谢谢大家。