Created
August 31, 2024 15:23
-
-
Save EDISON-SCIENCE-CORNER/e7e040e8380942adc611c39bda0925a8 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 <ESP8266WiFi.h> | |
| #include <ESPAsyncTCP.h> | |
| #include <ESPAsyncWebServer.h> | |
| #include <AsyncJson.h> | |
| #include <ArduinoJson.h> | |
| #include <DNSServer.h> | |
| #include <ESP8266mDNS.h> | |
| #include <FS.h> // For SPIFFS | |
| #include <FastLED.h> | |
| #define NUM_LEDS 2 | |
| #define DATA_PIN 0 | |
| CRGB leds[NUM_LEDS]; | |
| #define IN_1 2 | |
| #define IN_2 14 | |
| #define IN_3 13 | |
| #define IN_4 12 | |
| AsyncWebServer server(80); | |
| DNSServer dnsServer; | |
| int value ; | |
| class CaptiveRequestHandler : public AsyncWebHandler { | |
| public: | |
| CaptiveRequestHandler() {} | |
| virtual ~CaptiveRequestHandler() {} | |
| bool canHandle(AsyncWebServerRequest* request) override { | |
| return true; // Handle all requests | |
| } | |
| void handleRequest(AsyncWebServerRequest* request) override { | |
| request->send(SPIFFS, "/www/index.html"); // Serve index.html for all requests | |
| } | |
| }; | |
| void setupNetwork() { | |
| WiFi.softAP("ESP8266-AP"); | |
| Serial.println("Access Point Started"); | |
| Serial.println(WiFi.softAPIP()); | |
| Serial.println(WiFi.localIP()); | |
| dnsServer.start(53, "*", WiFi.softAPIP()); // Captive portal DNS | |
| } | |
| void setupServer() { | |
| // Serve static files from SPIFFS | |
| server.serveStatic("/", SPIFFS, "/www/").setDefaultFile("index.html").setCacheControl("max-age=60000"); | |
| // Handle joystick endpoints with status code only | |
| server.on("/left", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /left request"); | |
| value= 1; | |
| delay (1); | |
| value= 0; | |
| // turn the LED on (HIGH is the voltage level) | |
| request->send(200); // Send status 200 OK | |
| }); | |
| server.on("/right", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /right request"); | |
| goRight(); | |
| request->send(200); // Send status 200 OK | |
| }); | |
| server.on("/up", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /up request"); | |
| goAhead(); | |
| request->send(200); // Send status 200 OK | |
| }); | |
| server.on("/down", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /down request"); | |
| goBack(); | |
| request->send(200); // Send status 200 OK | |
| }); | |
| server.on("/x", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /x request"); | |
| request->send(200); // Send status 200 OK | |
| }); | |
| server.on("/y", HTTP_POST, [](AsyncWebServerRequest *request) { | |
| Serial.println("Received /y request"); | |
| request->send(200); // Send status 200 OK | |
| }); | |
| // Handle all other requests with the captive portal | |
| server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER); // Only on access point | |
| server.begin(); | |
| } | |
| void setup() { | |
| FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); | |
| pinMode(IN_1, OUTPUT); | |
| pinMode(IN_2, OUTPUT); | |
| pinMode(IN_3, OUTPUT); | |
| pinMode(IN_4, OUTPUT); | |
| Serial.begin(115200); // Higher baud rate for better performance | |
| SPIFFS.begin(); // Initialize SPIFFS | |
| setupNetwork(); | |
| setupServer(); | |
| } | |
| void loop() { | |
| dnsServer.processNextRequest(); // Handle DNS requests for captive portal | |
| Serial.println(value); | |
| } | |
| void goAhead(){ | |
| digitalWrite(IN_1, LOW); | |
| digitalWrite(IN_2, HIGH); | |
| digitalWrite(IN_3, LOW); | |
| digitalWrite(IN_4, HIGH); | |
| leds[0] = CRGB::Magenta; | |
| leds[1] = CRGB::Magenta; | |
| FastLED.show(); | |
| delay(50); | |
| } | |
| void goBack(){ | |
| digitalWrite(IN_1, HIGH); | |
| digitalWrite(IN_2, LOW); | |
| digitalWrite(IN_3, HIGH); | |
| digitalWrite(IN_4, LOW); | |
| leds[0] = CRGB::Cyan; | |
| leds[1] = CRGB::Cyan; | |
| FastLED.show(); | |
| delay(50); | |
| } | |
| void goRight(){ | |
| digitalWrite(IN_1, HIGH); | |
| digitalWrite(IN_2, LOW); | |
| digitalWrite(IN_3, LOW); | |
| digitalWrite(IN_4, HIGH); | |
| leds[0] = CRGB::Green; | |
| leds[1] = CRGB::Green; | |
| FastLED.show(); | |
| delay(50); | |
| } | |
| void goLeft(){ | |
| digitalWrite(IN_1, LOW); | |
| digitalWrite(IN_2, HIGH); | |
| digitalWrite(IN_3, HIGH); | |
| digitalWrite(IN_4, LOW); | |
| leds[0] = CRGB::Blue; | |
| leds[1] = CRGB::Blue; | |
| FastLED.show(); | |
| delay(50); | |
| } | |
| void stopRobot(){ | |
| digitalWrite(IN_1, LOW); | |
| digitalWrite(IN_2, LOW); | |
| digitalWrite(IN_3, LOW); | |
| digitalWrite(IN_4, LOW); | |
| leds[0] = CRGB::Red; | |
| leds[1] = CRGB::Red; | |
| FastLED.show(); | |
| delay(50); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment