//WiFi_Train_SSE.ino
#include "index.h" //HTML Web page
const char* ssid = "WiFi_Train_SSE";const char* password = "12345678";
#include <Track_Train_ESP_Class.h>//ser_in, load, clk_in, ser_out, clk_outTrack_Train_ESP_Class train_obj(D0,D5,D6,D2,D1);
enum where_is_train train_loc; //location of train
//#include <ESP8266WiFi.h>#include <ESPAsyncTCP.h>#include <ESPAsyncWebServer.h>// Create AsyncWebServer object on port 80AsyncWebServer server(80);
// Create an Event Source on /eventsAsyncEventSource events("/events");
void setup() { Serial.begin(115200); train_obj.begin( ); // train_obj.begin(1,1,4); WiFi.mode(WIFI_AP); //Access point only WiFi.softAP(ssid, password); train_loc = waiting; //State machine pinMode(D8,OUTPUT); // Handle Web Server server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", WiFi_Mess); });
// Handle Web Server Events events.onConnect([](AsyncEventSourceClient *client){ // send event with message "hello!", id and current millis // and set reconnect delay to 1 second client->send("hello!", NULL, millis(), 1000); }); server.addHandler(&events); server.begin();}
void loop() { static where_is_train save_loc; digitalWrite(D8,HIGH); train_loc = train_obj.monitor_train( ); if (train_loc != save_loc) { save_loc = train_loc; switch (train_loc){ case waiting : events.send("No trains present.","train_state"); break; case coming0 : events.send("Train coming from North.","train_state"); break; case approaching0 : events.send("Train approaching from North.","train_state"); break; case arriving0 : events.send("Train arriving from North.","train_state"); break; case station0 : events.send("Train from North in station.","train_state"); break; case departing0 : events.send("Train departing to South.","train_state"); break; case leaving0 : events.send("Train leaving to South.","train_state"); break; case going0 : events.send("Train going to South.","train_state"); break; case coming1 : events.send("Train coming from South.","train_state"); break; case approaching1 : events.send("Train approaching from South.","train_state"); break; case arriving1 : events.send("Train arriving from South.","train_state"); break; case station1 : events.send("Train from South in station.","train_state"); break; case departing1 : events.send("Train departing to North.","train_state"); break; case leaving1 : events.send("Train leaving to North.","train_state"); break; case going1 : events.send("Train going to North.","train_state"); break; } } digitalWrite(D8,LOW);} -------------------------------//index.h const char WiFi_Mess [] PROGMEM = R"(<!DOCTYPE html><HTML> <HEAD> <TITLE>WiFi Train SSE</TITLE> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="data:,"> <style> html { font-family: Arial; text-align: center; } body { max-width: 400px; margin:0px auto; } </style> </HEAD><BODY><H2>WiFi Train SSE</H2><span id="train">Response to Client Request</span><script>if (!!window.EventSource) { var source = new EventSource('/events'); source.addEventListener('open', function(e) { console.log("Events Connected"); }, false); source.addEventListener('error', function(e) { if (e.target.readyState != EventSource.OPEN) { console.log("Events Disconnected"); } }, false); source.addEventListener('train_state', function(e) { console.log("train_state", e.data); document.getElementById("train").innerHTML = e.data; }, false);}</script> </BODY></HTML>)";