WiFi RC Car Using NodeMCU
This WiFi remote control car runs with ESP8266 Module also known as NodeMCU. This module is more Powerful than our traditional Arduino UNO Board. It has more memory and also more processing power. The most important thing is that It has Built-in WiFi Module. This small-sized NodeMCU comes with MicroUSB port and also can be operated with 7-12V. You can also program it with Arduino IDE.
This is a simple car made up of simple components. This WiFi controlled robot runs with the wifi signal.
First, when we connect the whole circuit with the Power Supply, then the NodeMCU creates a server with the given SSID and the Password. Now we have to connect with the Hotspot and have to open the same IP. (i.e. 192.168.4.1) we can give the signal to the Browser address bar but it does not look professional.
Components for a Smart car ESP8266 Project:
- ESP8266 WiFi Programming Development Kit
- Robot Platform 2WD
- 18650 Battery Holder
- 18650 Battery X 2
- L298N Motor Driver
- Switch
- Jumper Wires
Tools Needed for ESP8266 Car:
- Soldering Iron
- Soldering Wire
- Flux
- Screwdriver
- Double face tape
ESP8266 Remote Control Car Schematics:
Here is the schematics/ Circuit Diagram of the ESP8266 WiFi Remote Control Car. For the motor driver, I used L298N. This is a high power motor driver capable of running 5V to 35V DC Motor at a maximum of 25W.
Now connect the motor wires with the motor driver. You can connect the motor wires in any direction. At the Troubleshooting section, I am going to discuss more in detail. For now, just connect the wires with the motor driver.
Connect the Battery +Ve wire with the +12v and connect the -Ve wire with the GND wire.
For the wifi module I am using NodeMCU ESP8266 Module. This module has a WiFi module inbuilt in it. So, we don’t need to buy rather more WiFi stuffs.
This WiFi module creates a hotspot. We have to connect the Hotspot through any of our device and have to give the command to the module. Suppose we want to run the car in forwarding so in the coding section, we have declared that if we get “F” data then it will run the car in forward.
In the same way, we have to declare all the things. where we want to move the car. We can add Car Head Light, Backlight, Buzzer as a Horn, and much more. More about that later. It is a topic for another article. For now, Let’s continue our next Step.
Now we have to give the power to the ESP Board. ESP8266 needs 5v. so for the 5v we are using Motor Driver’s 5v output.
Now we gave to make a communication line between the ESP and the Motor Driver Module. Here are the connected pins diagram for the connection.
ESP8266 | L298N Motor Driver |
D3 | Input 4 |
D4 | Input 3 |
D5 | Enable A |
D6 | Enable B |
D7 | Input 2 |
D8 | Input 1 |
- First Download the code from the link below. Now open Arduino and Go to File>New.
- Now a new window will appear. Next, Delete all the existing code and Paste the given code.
- In the code, you will find Additional Board Manager URL now copy the URL and do the next step. For Different OS you have a different option.
- MAC: Go to Arduino > Preferences
- Windows: Fille > Preferences
- Now Paste it in the Additional Board Manager URL section and press Ok.
- Now go to Tools > Board > Boards Manager
- Search for ‘ESP8266‘ and install the latest version.
- After the installation Then go to Tools > Board and then select the ESP-12E Module. So, The Board is selected Now.
- Next, Select the Right COM Port.
- Then compile the Programme First and then Upload to NodeMCU. After a few seconds, the code will be compiled and then Uploaded to NodeMCU Car.
Additional Board Manager URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Connect the Car with the battery.
- Now Install the Application link below.
- Connect with the WiFi. In the general case, you will find the Wifi SSID is ‘Make DIY’. You can change the wifi Name by changing the SSID.
- Now open the app and you will be able to control the car with the app.
- The car also has a speed slider by which you can control the speed of the WiFi car Using NodeMCU.
Troubleshoot:
Here I am defining some general troubleshoot of the car.
Not Moving Right Direction:
- Suppose you are pressing the forward button but the car is going to the back or it is rotating to the clockwise or anticlockwise direction. Then you have to do a simple step.
- Just face your car to the forward direction and then press the forward button.
- Next check which wheel is rotating which side.
- If it is rotating in the wrong direction then change motor wires. And your problem will be solved.
NodeMCU WiFi controlled Car Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
/*
Code Name: Arduino Wifi Control Car
Code URI: https://circuitbest.com/category/arduino-projects/
Additional Board Manager URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Install: ESP8266 by ESP8266 Community
Author: Make DIY
Author URI: https://circuitbest.com/author/admin/
Description: This program is used to control a robot using a app
that communicates with Arduino through a ESP8266 Module.
App URI: https://drive.google.com/file/d/1pvtWsTeXhcJdpHMfGlFmbGDuH7eoLfoP/view?usp=sharing
Version: 2.0
License: Remixing or Changing this Thing is allowed. Commercial use is not allowed.
*/
#define ENA 14 // Enable/speed motors Right GPIO14(D5)
#define ENB 12 // Enable/speed motors Left GPIO12(D6)
#define IN_1 15 // L298N in1 motors Rightx GPIO15(D8)
#define IN_2 13 // L298N in2 motors Right GPIO13(D7)
#define IN_3 2 // L298N in3 motors Left GPIO2(D4)
#define IN_4 0 // L298N in4 motors Left GPIO0(D3)
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
String command; //String to store app command state.
int speedCar = 800; // 400 – 1023.
int speed_Coeff = 3;
const char* ssid = “Make DIY”;
ESP8266WebServer server(80);
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
Serial.begin(115200);
// Connecting WiFi
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid);
IPAddress myIP = WiFi.softAPIP();
Serial.print(“AP IP address: “);
Serial.println(myIP);
// Starting WEB-server
server.on ( “/”, HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
}
void goAhead(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite(ENB, speedCar);
}
void goBack(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(ENB, speedCar);
}
void goRight(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite(ENB, speedCar);
}
void goLeft(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(ENB, speedCar);
}
void goAheadRight(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite(ENA, speedCar/speed_Coeff);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite(ENB, speedCar);
}
void goAheadLeft(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, HIGH);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, HIGH);
analogWrite(ENB, speedCar/speed_Coeff);
}
void goBackRight(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite(ENA, speedCar/speed_Coeff);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(ENB, speedCar);
}
void goBackLeft(){
digitalWrite(IN_1, HIGH);
digitalWrite(IN_2, LOW);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, HIGH);
digitalWrite(IN_4, LOW);
analogWrite(ENB, speedCar/speed_Coeff);
}
void stopRobot(){
digitalWrite(IN_1, LOW);
digitalWrite(IN_2, LOW);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, LOW);
digitalWrite(IN_4, LOW);
analogWrite(ENB, speedCar);
}
void loop() {
server.handleClient();
command = server.arg(“State”);
if (command == “F”) goAhead();
else if (command == “B”) goBack();
else if (command == “L”) goLeft();
else if (command == “R”) goRight();
else if (command == “I”) goAheadRight();
else if (command == “G”) goAheadLeft();
else if (command == “J”) goBackRight();
else if (command == “H”) goBackLeft();
else if (command == “0”) speedCar = 400;
else if (command == “1”) speedCar = 470;
else if (command == “2”) speedCar = 540;
else if (command == “3”) speedCar = 610;
else if (command == “4”) speedCar = 680;
else if (command == “5”) speedCar = 750;
else if (command == “6”) speedCar = 820;
else if (command == “7”) speedCar = 890;
else if (command == “8”) speedCar = 960;
else if (command == “9”) speedCar = 1023;
else if (command == “S”) stopRobot();
}
void HTTP_handleRoot(void) {
if( server.hasArg(“State”) ){
Serial.println(server.arg(“State”));
}
server.send ( 200, “text/html”, “” );
delay(1);
}
|
App Link: Download