# ESP8266 and Arduino Controlled Car ππ‘
A smart RC car project using Arduino Uno and ESP8266 Wi-Fi module, built to demonstrate IoT-based vehicle control.
This project combines embedded hardware with wireless communication, creating a fun and practical application for learning electronics, automation, and networking.
---
## β¨ Features
- Remote-controlled car via Wi-Fi (ESP8266)
- Dual motor driver (L298N) for forward, backward, left, and right movement
- Real-time control using a simple web-based interface
- Modular design (can be expanded with sensors like ultrasonic for obstacle avoidance)
- --
## π οΈ Things used in this project
- Arduino Uno
- ESP8266 Wi-Fi Module (NodeMCU can also be used)
- L298N Motor Driver
- DC Motors (x4 with chassis + wheels)
- Power Source (12V Li-ion battery)
- Jumper wires, breadboard, connectors
- Optional: Ultrasonic sensor for collision detection
- --
## π Software & Code
- Arduino IDE
- ESP8266WiFi library
- Fully documented source code available on GitHub: [ESP8266 car repo on my GitHub profile]
- --
## π Wiring Overview
- ESP8266 β Arduino (via serial pins)
- Arduino β L298N Motor Driver β Motors
- Power via external battery to motor driver + Arduino Vin
- Enable pins connected to PWM for speed control
(Detailed wiring diagram included in images/schematics section)
---
## π Story
The goal of this project was to build a **Wi-Fi controlled smart car** using affordable components like Arduino Uno and ESP8266.
Instead of relying on Bluetooth or IR remote control, I wanted a **wireless solution accessible from a simple web interface**.
The car responds to commands like Forward, Backward, Left, Right, and Stop using the motor driver, while the ESP8266 sets up its own Wi-Fi network for remote control.
This project was built to showcase **IoT + robotics + embedded systems skills** to recruiters, while also being fun to drive around!
---
## π How to Run
1. Upload the following Arduino sketch to the Uno:
#define ENAA 3
#define IN1A 2
#define IN2A 4
#define ENBA 6
#define IN3A 5
#define IN4A 7
#define ENAB 9
#define IN1B 8
#define IN2B 10
#define IN3B 13
#define IN4B 12
#define ENBB 11
void setup() {
Serial.begin(9600);
pinMode(IN1A, OUTPUT); pinMode(IN2A, OUTPUT);
pinMode(IN3A, OUTPUT); pinMode(IN4A, OUTPUT);
pinMode(ENAA, OUTPUT); pinMode(ENBA, OUTPUT);
pinMode(IN1B, OUTPUT); pinMode(IN2B, OUTPUT);
pinMode(IN3B, OUTPUT); pinMode(IN4B, OUTPUT);
pinMode(ENAB, OUTPUT); pinMode(ENBB, OUTPUT);
Serial.println("Pin modes are set!");
}
void loop() {
char command;
if (Serial.available()) {
command = Serial.read();
Serial.println(command);
if (command == 'F') { // Forward
digitalWrite(IN1A, HIGH); digitalWrite(IN2A, LOW);
digitalWrite(IN3A, HIGH); digitalWrite(IN4A, LOW);
analogWrite(ENAA, 255); analogWrite(ENBA, 255);
digitalWrite(IN1B, HIGH); digitalWrite(IN2B, LOW);
digitalWrite(IN3B, HIGH); digitalWrite(IN4B, LOW);
analogWrite(ENAB, 255); analogWrite(ENBB, 255);
}
else if (command == 'B') { // Backward
digitalWrite(IN1A, LOW); digitalWrite(IN2A, HIGH);
digitalWrite(IN3A, LOW); digitalWrite(IN4A, HIGH);
analogWrite(ENAA, 255); analogWrite(ENBA, 255);
digitalWrite(IN1B, LOW); digitalWrite(IN2B, HIGH);
digitalWrite(IN3B, LOW); digitalWrite(IN4B, HIGH);
analogWrite(ENAB, 255); analogWrite(ENBB, 255);
}
else if (command == 'R') { // Right
digitalWrite(IN1A, HIGH); digitalWrite(IN2A, LOW);
digitalWrite(IN3A, LOW); digitalWrite(IN4A, HIGH);
analogWrite(ENAA, 255); analogWrite(ENBA, 255);
digitalWrite(IN1B, HIGH); digitalWrite(IN2B, LOW);
digitalWrite(IN3B, LOW); digitalWrite(IN4B, HIGH);
analogWrite(ENAB, 255); analogWrite(ENBB, 255);
}
else if (command == 'L') { // Left
digitalWrite(IN1A, LOW); digitalWrite(IN2A, HIGH);
digitalWrite(IN3A, HIGH); digitalWrite(IN4A, LOW);
analogWrite(ENAA, 255); analogWrite(ENBA, 255);
digitalWrite(IN1B, LOW); digitalWrite(IN2B, HIGH);
digitalWrite(IN3B, HIGH); digitalWrite(IN4B, LOW);
analogWrite(ENAB, 255); analogWrite(ENBB, 255);
}
else if (command == 'S') { // Stop
digitalWrite(IN1A, LOW); digitalWrite(IN2A, LOW);
digitalWrite(IN3A, LOW); digitalWrite(IN4A, LOW);
analogWrite(ENAA, 0); analogWrite(ENBA, 0);
digitalWrite(IN1B, LOW); digitalWrite(IN2B, LOW);
digitalWrite(IN3B, LOW); digitalWrite(IN4B, LOW);
analogWrite(ENAB, 0); analogWrite(ENBB, 0);
}
}
}
2.Upload this code to ESP8266:
#include <ESP8266WiFi.h>
#define ssid "ESP8266 CAR"
#define password "Ydp6361#"
WiFiServer server(80);
void setup() {
Serial.begin(9600);
WiFi.softAP(ssid, password);
server.begin();
Serial.println("WiFi is created!");
Serial.print("IP : ");
Serial.println(WiFi.softAPIP());
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("Client connected!");
String command = client.readStringUntil('\r');
client.flush();
int index = command.indexOf("?State=");
if (index != -1) {
char c = command.charAt(index + 7);
Serial.print("Command: ");
Serial.println(c);
}
client.stop();
}
}
#include <ESP8266WiFi.h>
#define ssid "ESP8266 CAR"
#define password "Ydp6361#"
WiFiServer server(80);
void setup() {
Serial.begin(9600);
WiFi.softAP(ssid, password);
server.begin();
Serial.println("WiFi is created!");
Serial.print("IP : ");
Serial.println(WiFi.softAPIP());
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("Client connected!");
String command = client.readStringUntil('\r');
client.flush();
int index = command.indexOf("?State=");
if (index != -1) {
char c = command.charAt(index + 7);
Serial.print("Command: ");
Serial.println(c);
}
client.stop();
}
}
Connect to Wi-Fi hotspot
- Connect to Wi-Fi hotspot
Open the web app/control interface
- Open the web app/control interface
Drive your IoT-powered car! π
- Drive your IoT-powered car! π
Basics of Arduino + ESP8266 integration
- Basics of Arduino + ESP8266 integration
Motor control using L298N driver
- Motor control using L298N driver
Web-controlled robotics
- Web-controlled robotics
Hands-on IoT + embedded systems project
- Hands-on IoT + embedded systems project
Dev YadavPursuing B.Tech in Electronics & Communication Engineering
- LinkedIn:
https://www.linkedin.com/in/deev-yadav-826859372?utm_source=share&utm_campaign=share_via&utm_content=profile&utm_medium=android_app
- GitHub:
DevYadav3672/ESP8266-CAR: This car is working on arduino uno , 2 L298N motor drivers , ESP8266 , 4Motors
Comments