diff --git a/Control/platformio.ini b/Control/platformio.ini index 1f6cf0c..7daf920 100644 --- a/Control/platformio.ini +++ b/Control/platformio.ini @@ -15,4 +15,9 @@ framework = arduino monitor_speed = 115200 upload_port = COM[3] monitor_filters = send_on_enter -lib_deps = plerup/EspSoftwareSerial@^6.12.6 +lib_deps = + plerup/EspSoftwareSerial@^6.12.6 + links2004/WebSockets@^2.3.6 + me-no-dev/AsyncTCP@^1.1.1 + me-no-dev/ESPAsyncTCP@^1.2.2 + me-no-dev/ESP Async WebServer@^1.2.3 diff --git a/Control/src/temp.cpp b/Control/src/temp.cpp new file mode 100644 index 0000000..fb81261 --- /dev/null +++ b/Control/src/temp.cpp @@ -0,0 +1,447 @@ +#include +#include +#include +#include +#include +#include "Ticker.h" + +const int potPin = 34; //used to simulate battery voltage. +const int butPin = 16; //used to increment a variable to simulate distance increasing. +const int U_Led = 14; //LED subsitute for the 'movement forward command'. +const int L_Led = 12; //LED subsitute for the 'movement left command'. +const int R_Led = 15; //LED subsitute for the 'movement right command'. +const int D_Led = 13; //LED subsitute for the 'movement back command'. + +/* const char* ssid = "ssid"; +const char* password = "xxxxxxxx"; */ + +int potVal = 0; +bool butState = 1; //Variables only for testing - will be removed in final + +int d = 0; //Initializing variable for odometer distance. + +void send_sensor(); +Ticker timer; + +char index_html[] PROGMEM = R"=====( + + + + +Rover Command Center + + + + + + + +

ROVER COMMAND CENTER

+ +
+ +
+
+

Movement Control

+
+ +
+
+ + + +
+ +
+
+ +
+
+

Sensor Data

+
    + +
  • + +
    +
    + +
    +
  • + + +
  • + +
    +
    + 28mm +
    +
  • + +
+
+ +
+ +
+ + + + + +)====="; + +AsyncWebServer server(80); // server port 80 for initial HTTP request for the main webpage. +WebSocketsServer websockets(81); // server port 81 for real time data flow through websockets. + +void notFound(AsyncWebServerRequest *request) +{ + request->send(404, "text/plain", "Page Not found. Check URI/IP address."); +} + +void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { + + switch (type) + { + case WStype_DISCONNECTED: + Serial.printf("Client[%u] Disconnected!\n", num); + break; + case WStype_CONNECTED: { + IPAddress ip = websockets.remoteIP(num); + Serial.printf("Client[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); + } + break; + case WStype_TEXT: { + Serial.printf("Client[%u] sent Text: %s\n", num, payload); + String command = String((char*)( payload)); + + DynamicJsonDocument doc(200); //creating an instance of a DynamicJsonDocument allocating 200bytes on the heap. + DeserializationError error = deserializeJson(doc, command); // deserialize 'doc' and parse for parameters we expect to receive. + if (error) { + Serial.print("deserializeJson() failed: "); + Serial.println(error.c_str()); + return; + } + + int MVM_F_status = doc["MVM_F"]; + int MVM_L_status = doc["MVM_L"]; + int MVM_R_status = doc["MVM_R"]; + int MVM_B_status = doc["MVM_B"]; + + digitalWrite(U_Led,MVM_F_status); + digitalWrite(L_Led,MVM_L_status); + digitalWrite(R_Led,MVM_R_status); + digitalWrite(D_Led,MVM_B_status); + } + } +} + +void setup() +{ + + Serial.begin(115200); + pinMode(U_Led,OUTPUT); + pinMode(L_Led,OUTPUT); + pinMode(R_Led,OUTPUT); + pinMode(D_Led,OUTPUT); + pinMode(butPin, INPUT_PULLUP); + + +/* Serial.println(); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("Rover connected to "); + Serial.println(ssid); + Serial.println(); + Serial.println("Rover IP address: "); + Serial.println(WiFi.localIP()); */ + + WiFi.softAP("RoverAP", "SplendidCheeks"); + Serial.println(); + Serial.println("RoverAP running"); + Serial.print("Rover IP address: "); + Serial.println(WiFi.softAPIP()); + + + if (!MDNS.begin("rover")) { + Serial.println("Error setting up MDNS responder!"); + while (1) { + delay(2000); + } + } + Serial.println("mDNS responder started! Rover Command Center can now be accessed at 'rover.local' "); + + + + server.on("/", [](AsyncWebServerRequest * request) + { + request->send_P(200, "text/html", index_html); + }); + + server.onNotFound(notFound); + + server.begin(); + websockets.begin(); + websockets.onEvent(webSocketEvent); + timer.attach(0.5,send_sensor_data); +} + +void loop() +{ + websockets.loop(); + potVal = analogRead(potPin); +} + +void send_sensor_data() +{ + + butState = digitalRead(butPin); + if (butState == LOW) { + //increment ODO: + d += 10; + } + // JSON_Data = {"BTRY_VOLT":v,"ODO_DIST":d} + String JSON_Data = "{\"BTRY_VOLT\":"; + JSON_Data += potVal; + JSON_Data += ",\"ODO_DIST\":"; + JSON_Data += d; + JSON_Data += "}"; + websockets.broadcastTXT(JSON_Data); +} \ No newline at end of file