Created
February 19, 2021 16:23
-
-
Save sarasantos/09d092386d0e7d10d064a400f3b1c986 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Arduino.h> | |
#include <ESP8266WiFi.h> | |
#include <ESPAsyncTCP.h> | |
#include <ESPAsyncWebServer.h> | |
#include "LittleFS.h" | |
// Replace with your network credentials | |
const char* ssid = "REPLACE_WITH_YOUR_SSID"; | |
const char* password = "REPLACE_WITH_YOUR_PASSWORD"; | |
// Create AsyncWebServer object on port 80 | |
AsyncWebServer server(80); | |
// Create a WebSocket object | |
AsyncWebSocket ws("/ws"); | |
// Set LED GPIO | |
const int ledPin1 = 12; | |
const int ledPin2 = 13; | |
const int ledPin3 = 14; | |
String message = ""; | |
String sliderValue1 = "0"; | |
String sliderValue2 = "0"; | |
String sliderValue3 = "0"; | |
int dutyCycle1; | |
int dutyCycle2; | |
int dutyCycle3; | |
// Initialize LittleFS | |
void initFS() { | |
if (!LittleFS.begin()) { | |
Serial.println("An error has occurred while mounting LittleFS"); | |
} | |
Serial.println("LittleFS mounted successfully"); | |
} | |
// Initialize WiFi | |
void initWiFi() { | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(ssid, password); | |
Serial.print("Connecting to WiFi .."); | |
while (WiFi.status() != WL_CONNECTED) { | |
Serial.print('.'); | |
delay(1000); | |
} | |
Serial.println(WiFi.localIP()); | |
} | |
void handleWebSocketMessage(void *arg, uint8_t *data, size_t len) { | |
AwsFrameInfo *info = (AwsFrameInfo*)arg; | |
if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) { | |
data[len] = 0; | |
message = (char*)data; | |
if (message.indexOf("1s") >= 0) { | |
sliderValue1 = message.substring(2); | |
dutyCycle1 = map(sliderValue1.toInt(), 0, 100, 0, 1023); | |
Serial.println(dutyCycle1); | |
} | |
if (message.indexOf("2s") >= 0) { | |
sliderValue2 = message.substring(2); | |
dutyCycle2 = map(sliderValue2.toInt(), 0, 100, 0, 1023); | |
Serial.println(dutyCycle2); | |
} | |
if (message.indexOf("3s") >= 0) { | |
sliderValue3 = message.substring(2); | |
dutyCycle3 = map(sliderValue3.toInt(), 0, 100, 0, 1023); | |
Serial.println(dutyCycle3); | |
} | |
} | |
} | |
void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { | |
switch (type) { | |
case WS_EVT_CONNECT: | |
Serial.printf("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str()); | |
break; | |
case WS_EVT_DISCONNECT: | |
Serial.printf("WebSocket client #%u disconnected\n", client->id()); | |
break; | |
case WS_EVT_DATA: | |
handleWebSocketMessage(arg, data, len); | |
break; | |
case WS_EVT_PONG: | |
case WS_EVT_ERROR: | |
break; | |
} | |
} | |
void initWebSocket() { | |
ws.onEvent(onEvent); | |
server.addHandler(&ws); | |
} | |
void setup() { | |
Serial.begin(115200); | |
pinMode(ledPin1, OUTPUT); | |
pinMode(ledPin2, OUTPUT); | |
pinMode(ledPin3, OUTPUT); | |
initFS(); | |
initWiFi(); | |
initWebSocket(); | |
// Web Server Root URL | |
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ | |
request->send(LittleFS, "/index.html", "text/html"); | |
}); | |
server.serveStatic("/", LittleFS, "/"); | |
server.on("/currentValue1", HTTP_GET, [](AsyncWebServerRequest *request){ | |
request->send(200, "/text/plain", String(sliderValue1).c_str()); | |
}); | |
server.on("/currentValue2", HTTP_GET, [](AsyncWebServerRequest *request){ | |
request->send(200, "/text/plain", String(sliderValue2).c_str()); | |
}); | |
server.on("/currentValue3", HTTP_GET, [](AsyncWebServerRequest *request){ | |
request->send(200, "/text/plain", String(sliderValue3).c_str()); | |
}); | |
// Start server | |
server.begin(); | |
} | |
void loop() { | |
analogWrite(ledPin1, dutyCycle1); | |
analogWrite(ledPin2, dutyCycle2); | |
analogWrite(ledPin3, dutyCycle3); | |
ws.cleanupClients(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment