diff --git a/src/2026-08-13_wifi-car/2026-08-13_wifi-car.ino b/src/2026-08-13_wifi-car/2026-08-13_wifi-car.ino new file mode 100644 index 0000000..54d1250 --- /dev/null +++ b/src/2026-08-13_wifi-car/2026-08-13_wifi-car.ino @@ -0,0 +1,554 @@ +/* + * Simple car controlled by any wifi device with browser. + * Nodemcu with L293D driver and 6V battery pack. + * Nodemcu will act as AccessPoint. + * After connecting to AP, open 192.168.4.1 + * + */ + +#include +#include + +#define IN1 D1 // left motor +#define IN2 D2 // left motor +#define IN3 D5 // right motor +#define IN4 D6 // right motor + +const char* ssid = "RobotV1"; +const char* password = "12345678"; + +ESP8266WebServer server(80); + + +// ============================= +// Motor control +// ============================= + +void leftForward() { + digitalWrite(IN1, HIGH); + digitalWrite(IN2, LOW); +} + +void leftBackward() { + digitalWrite(IN1, LOW); + digitalWrite(IN2, HIGH); +} + +void rightForward() { + digitalWrite(IN3, HIGH); + digitalWrite(IN4, LOW); +} + +void rightBackward() { + digitalWrite(IN3, LOW); + digitalWrite(IN4, HIGH); +} + +void stopRobot() { + digitalWrite(IN1, LOW); + digitalWrite(IN2, LOW); + digitalWrite(IN3, LOW); + digitalWrite(IN4, LOW); +} + + +// ============================= +// Drive +// ============================= + +void drive(int left, int right) { + + // Left motor + if (left > 0) { + leftForward(); + } + else if (left < 0) { + leftBackward(); + } + else { + digitalWrite(IN1, LOW); + digitalWrite(IN2, LOW); + } + + // Right motor + if (right > 0) { + rightForward(); + } + else if (right < 0) { + rightBackward(); + } + else { + digitalWrite(IN3, LOW); + digitalWrite(IN4, LOW); + } +} + + +// ============================= +// Web page +// ============================= + +const char webpage[] PROGMEM = R"rawliteral( + + + + + + + + + +Robot Control + + + + + + + + +

🤖 Robot

+ +
+ +
+ +
+ +
+ STOP +
+ + + + + + + + +)rawliteral"; + + +// ============================= +// Web server +// ============================= + +void handleRoot() { + + server.send( + 200, + "text/html", + webpage + ); + +} + + +void handleDrive() { + + int left = + server.arg("left").toInt(); + + int right = + server.arg("right").toInt(); + + + drive(left, right); + + + server.send( + 200, + "text/plain", + "OK" + ); + +} + + +void handleStop() { + + stopRobot(); + + server.send( + 200, + "text/plain", + "STOP" + ); + +} + + +// ============================= +// Setup +// ============================= + +void setup() { + + Serial.begin(115200); + + + pinMode(IN1, OUTPUT); + pinMode(IN2, OUTPUT); + + pinMode(IN3, OUTPUT); + pinMode(IN4, OUTPUT); + + + stopRobot(); + + + // Create WiFi network + + WiFi.softAP( + ssid, + password + ); + + + Serial.println(); + Serial.println("Robot WiFi started"); + + Serial.print("IP address: "); + + Serial.println( + WiFi.softAPIP() + ); + + + // Web server routes + + server.on( + "/", + handleRoot + ); + + server.on( + "/drive", + handleDrive + ); + + server.on( + "/stop", + handleStop + ); + + + server.begin(); + + Serial.println( + "Web server started" + ); + +} + + +// ============================= +// Main loop +// ============================= + +void loop() { + + server.handleClient(); + +} \ No newline at end of file