Skip to content

Instantly share code, notes, and snippets.

@EDISON-SCIENCE-CORNER
Created August 31, 2024 15:23
Show Gist options
  • Select an option

  • Save EDISON-SCIENCE-CORNER/e7e040e8380942adc611c39bda0925a8 to your computer and use it in GitHub Desktop.

Select an option

Save EDISON-SCIENCE-CORNER/e7e040e8380942adc611c39bda0925a8 to your computer and use it in GitHub Desktop.
#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