ESP32 Motor Shield 2WD
Control Robot Car 4WD Mecanum Wheel use app Android, install app here:
https://play.google.com/store/apps/details?id=com.bluino.esp8266wifirobotcar
/******************* WiFi Robot Remote Control Mode ********************/
#include <WiFi.h>
#include <ArduinoOTA.h>
#include <ESPAsyncWebServer.h>
// connections for drive Motors
int PWM_A = 12;
int PWM_B = 13;
int DIR_A = 14;
int DIR_B = 15;
const int buzPin = 5; // set digital pin D5 as buzzer pin (use active buzzer)
const int ledPin = 4; // set digital pin D8 as LED pin (use super bright LED)
const int wifiLedPin = 2; // set digital pin D0 as indication, the LED turn on if NodeMCU connected to WiFi as STA mode
String command; // String to store app command state.
int SPEED = 1023; // 330 - 1023.
int speed_Coeff = 1023;
AsyncWebServer server(80);
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
unsigned long previousMillis = 0;
String sta_ssid = "your_ssid_name"; // set Wifi networks you want to connect to
String sta_password = "your_ssid_password"; // set password for Wifi networks
void setup(){
Serial.begin(115200); // set up Serial library at 115200 bps
Serial.println();
Serial.println("*ESP32 WiFi Robot Remote Control Mode*");
Serial.println("--------------------------------------");
pinMode(buzPin, OUTPUT); // sets the buzzer pin as an Output
pinMode(ledPin, OUTPUT); // sets the LED pin as an Output
pinMode(wifiLedPin, OUTPUT); // sets the Wifi LED pin as an Output
digitalWrite(buzPin, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(wifiLedPin, HIGH);
// Set all the motor control pins to outputs
pinMode(PWM_A, OUTPUT);
pinMode(PWM_B, OUTPUT);
pinMode(DIR_A, OUTPUT);
pinMode(DIR_B, OUTPUT);
// Turn off motors - Initial state
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
ledcSetup(0, 1000 , 8);
ledcAttachPin(PWM_A, 0);
ledcSetup(1, 1000 , 8);
ledcAttachPin(PWM_B, 1);
// set ESP32 Wifi hostname based on chip mac address
char chip_id[15];
snprintf(chip_id, 15, "%04X", (uint16_t)(ESP.getEfuseMac()>>32));
String hostname = "esp32Car-" + String(chip_id);
Serial.println();
Serial.println("Hostname: "+hostname);
// first, set NodeMCU as STA mode to connect with a Wifi network
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid.c_str(), sta_password.c_str());
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
Serial.print("Password: ");
Serial.println(sta_password);
// try to connect with Wifi network about 10 seconds
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 5000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}
// if failed to connect with Wifi network set NodeMCU as AP mode
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("*WiFi-STA-Mode*");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, HIGH); // Wifi LED on when connected to Wifi as STA mode
delay(3000);
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
IPAddress myIP = WiFi.softAPIP();
Serial.println("");
Serial.println("WiFi failed connected to " + sta_ssid);
Serial.println("");
Serial.println("*WiFi-AP-Mode*");
Serial.print("AP IP address: ");
Serial.println(myIP);
digitalWrite(wifiLedPin, LOW); // Wifi LED off when status as AP mode
delay(3000);
}
// Send a GET request to <ESP_IP>/?fader=<inputValue>
server.on("/", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputValue;
String inputMessage;
// Get value for Forward/Backward
if (request->hasParam("State")) {
inputValue = request->getParam("State")->value();
if (inputValue.equals("F")) Forward(); // check string then call a function or set a value
else if (inputValue.equals("B")) Backward();
else if (inputValue.equals("R")) TurnRight();
else if (inputValue.equals("L")) TurnLeft();
else if (inputValue.equals("G")) ForwardLeft();
else if (inputValue.equals("H")) BackwardLeft();
else if (inputValue.equals("I")) ForwardRight();
else if (inputValue.equals("J")) BackwardRight();
else if (inputValue.equals("S")) Stop();
else if (inputValue.equals("V")) BeepHorn();
else if (inputValue.equals("W")) TurnLightOn();
else if (inputValue.equals("w")) TurnLightOff();
else if (inputValue.equals("0")) SPEED = 330;
else if (inputValue.equals("1")) SPEED = 400;
else if (inputValue.equals("2")) SPEED = 470;
else if (inputValue.equals("3")) SPEED = 540;
else if (inputValue.equals("4")) SPEED = 610;
else if (inputValue.equals("5")) SPEED = 680;
else if (inputValue.equals("6")) SPEED = 750;
else if (inputValue.equals("7")) SPEED = 820;
else if (inputValue.equals("8")) SPEED = 890;
else if (inputValue.equals("9")) SPEED = 960;
else if (inputValue.equals("q")) SPEED = 1023;
else inputValue = "No message sent";
}
Serial.println(inputValue);
inputValue="";
request->send(200, "text/text", "");
});
server.onNotFound (notFound); // when a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"
server.begin();
ArduinoOTA.begin(); // enable to receive update/uploade firmware via Wifi OTA
}
void loop() {
ArduinoOTA.handle(); // listen for update OTA request from clients
}
// function to move forward
void Forward(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
ledcWrite(0, SPEED);
ledcWrite(1, SPEED);
}
// function to move backward
void Backward(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
ledcWrite(0, SPEED);
ledcWrite(1, SPEED);
}
// function to turn right
void TurnRight(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
ledcWrite(0, SPEED);
ledcWrite(1, SPEED);
}
// function to turn left
void TurnLeft(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
ledcWrite(0, SPEED);
ledcWrite(1, SPEED);
}
// function to move forward left
void ForwardLeft(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
ledcWrite(1, SPEED);
ledcWrite(0, SPEED/speed_Coeff);
}
// function to move backward left
void BackwardLeft(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
ledcWrite(1, SPEED);
ledcWrite(0, SPEED/speed_Coeff);
}
// function to move forward right
void ForwardRight(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, HIGH);
ledcWrite(1, SPEED/speed_Coeff);
ledcWrite(0, SPEED);
}
// function to move backward left
void BackwardRight(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
ledcWrite(1, SPEED/speed_Coeff);
ledcWrite(0, SPEED);
}
// function to stop motors
void Stop(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
ledcWrite(0, 0);
ledcWrite(1, 0);
}
// function to beep a buzzer
void BeepHorn(){
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
delay(80);
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
delay(80);
}
// function to turn on LED
void TurnLightOn(){
digitalWrite(ledPin, HIGH);
}
// function to turn off LED
void TurnLightOff(){
digitalWrite(ledPin, LOW);
}
ESP32 Motor Shield 2WD
Project images are for reference only. Actual production is based on the manufacturing files on the project page.
Please review the designer's notes (e.g., PCB thickness) and select the appropriate options.
PCBWay is not responsible
for issues caused by unsuitable parameter selections.
For more important ordering information, please refer to
Read More
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(0)
- Likes(2)
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by Bluino Bluino
-
ESP32 IoT Starter Shield Version 3
Learn Basic IoT use ESP32 boards is very easy with ESP32 IoT Starter Kit board and following the 110...
-
ESP32-Cam Motor Driver Shield L293D
Android App: ESP32 Camera Wifi Robot CarTutorial Assembly:https://www.instructables.com/DIY-ESP32-Ca...
-
LED Blinking Robot Badge - Soldering Kit
This article is proudly sponsored by PCBWAY.PCBWAY make high quality prototyping PCBs for people all...
-
3 Panel LED Dot Matrix MAX7219 for Common Anode Dot Matrix
Part List per Panel:1 x PCB LED Dot Matrix MAX7219 (PCBWay)1 x Led Dot Matrix 8x8 Common Anode1 x IC...
-
2 Panel LED Dot Matrix MAX7219 for Common Anode Dot Matrix
Part List per Panel:1 x PCB LED Dot Matrix MAX7219 (PCBWay)1 x Led Dot Matrix 8x8 Common Anode1 x IC...
-
IoT Basic Kit ESP8266 Wemos D1 Mini
Part List:1 x PCB IoT Basic Kit (PCBWay)1 x ESP8266 Wemos D1 Mini board1 x OLED I2C 128x641 x Humidi...
-
ESP32 IoT Basic Shield
Part List:1 x PCB ESP32 Basic Shield (PCBWay)1 x ESP32 DEV KIT V1 board1 x LED 5mm1 x LED 3mm1 x Act...
-
Nodemcu Amica ESP8266 IoT Starter Shield
Learn Basic IoT use ESP8266 boards is very easy with Nodemcu IoT Starter Shield board and following ...
-
ESP32 Motor Shield 2WD
Control Robot Car 4WD Mecanum Wheel use app Android, install app here:https://play.google.com/store/...
-
ESP32 Motor Shield 4WD Mecanum Wheel
Control Robot Car 4WD Mecanum Wheel use app Android, install app here:https://play.google.com/store/...
-
ESP32 IoT Starter Shield Ver 2.0
The difference from the previous version is that there is an additional slot for the HCSR04 ultrason...
-
nanBluino - DIY Arduino Nano USB Type-C
Overview"Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use h...
-
Drawbot Wifi ESP32 GRBL - Drawing Robot Plotter Pen
OverviewThe Drawbot is a drawing art robot that can draw. You will needs two stepper motors, a micro...
-
Topeduino - DIY Arduino Uno USB Type-C use Solder Paste Stencil
Overview"Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use h...
-
Eggbot Wifi ESP32 - Drawing Robot Plotter Pen
OverviewThe Eggbot is a drawing art robot that can draw on spherical or egg-shaped objects. You coul...
-
ESP32 Balancing Robot Shield
Part list:1 x PCB ESP32 Balancing Robot Shield (PCBWay)1 x ESP32 DEVKIT V1 board2 x Stepper Motor Dr...
-
Pi Pico Starter Shield
Easy Way to Started learn Raspberry Pi Pico, based on official tutorial download Get Started Pi Pico...
-
ESP32 IoT Starter Kit
Learn Basic IoT use ESP32 boards is very easy with ESP32 IoT Starter Kit board and following the 110...
-
Programmable Mist Maker - XIAO / QT PY Extension
1278 2 1 -
RadioHAT - Raspberry Pi radio development platform
1090 0 2 -
QWIIC-VL53L4CD Time-of-Flight Distance Sensor Module
1294 0 1 -
-
-
-
ARPS-2 – Arduino-Compatible Robot Project Shield for Arduino UNO
3481 0 6 -
-
A Compact Charging Breakout Board For Waveshare ESP32-C3
4134 3 8 -
AI-driven LoRa & LLM-enabled Kiosk & Food Delivery System
4509 2 2







