/* * WebSocketServerAllFunctionsDemo.ino * * Created on: 10.05.2018 * */ #include #include #include #include #include #include #include #define LED_RED 15 #define LED_GREEN 12 #define LED_BLUE 13 #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; ESP8266WebServer server(80); WebSocketsServer webSocket = WebSocketsServer(81); void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { switch(type) { case WStype_DISCONNECTED: USE_SERIAL.printf("[%u] Disconnected!\n", num); break; case WStype_CONNECTED: { IPAddress ip = webSocket.remoteIP(num); USE_SERIAL.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); // send message to client webSocket.sendTXT(num, "Connected"); } break; case WStype_TEXT: USE_SERIAL.printf("[%u] get Text: %s\n", num, payload); if(payload[0] == '#') { // we get RGB data // decode rgb data uint32_t rgb = (uint32_t) strtol((const char *) &payload[1], NULL, 16); analogWrite(LED_RED, ((rgb >> 16) & 0xFF)); analogWrite(LED_GREEN, ((rgb >> 8) & 0xFF)); analogWrite(LED_BLUE, ((rgb >> 0) & 0xFF)); } break; } } void setup() { //USE_SERIAL.begin(921600); USE_SERIAL.begin(115200); //USE_SERIAL.setDebugOutput(true); USE_SERIAL.println(); USE_SERIAL.println(); USE_SERIAL.println(); for(uint8_t t = 4; t > 0; t--) { USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t); USE_SERIAL.flush(); delay(1000); } pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(LED_BLUE, OUTPUT); digitalWrite(LED_RED, 1); digitalWrite(LED_GREEN, 1); digitalWrite(LED_BLUE, 1); WiFiMulti.addAP("SSID", "passpasspass"); while(WiFiMulti.run() != WL_CONNECTED) { delay(100); } // start webSocket server webSocket.begin(); webSocket.onEvent(webSocketEvent); if(MDNS.begin("esp8266")) { USE_SERIAL.println("MDNS responder started"); } // handle index server.on("/", []() { // send index.html server.send(200, "text/html", "LED Control:

R:
G:
B:
"); }); server.begin(); // Add service to MDNS MDNS.addService("http", "tcp", 80); MDNS.addService("ws", "tcp", 81); digitalWrite(LED_RED, 0); digitalWrite(LED_GREEN, 0); digitalWrite(LED_BLUE, 0); } unsigned long last_10sec = 0; unsigned int counter = 0; void loop() { unsigned long t = millis(); webSocket.loop(); server.handleClient(); if((t - last_10sec) > 10 * 1000) { counter++; bool ping = (counter % 2); int i = webSocket.connectedClients(ping); USE_SERIAL.printf("%d Connected websocket clients ping: %d\n", i, ping); last_10sec = millis(); } }