Das ist eine super Idee!
Ich empfehle, die Steuerung über BT Serial, das habe ich bei meinem Pathfinder Roboter so gemacht, dazu gibt es eine simple Android APP, die die Befehle absetzt. Aber natürlich kann man mit dem ESP auch direkt mit BTSerial senden, da gibt es ja so billige analoge Joysticks, könnte man dazu auswerten.
So habe ich mir das damals zusammengeklaut, das funktioniert mit der APP zusammen gut.
Hänge ich hier mal als “Steinbruch” an, damit ihr schon mal wisst, wie man die Empfangsseite der Verbindung realisieren könnte.
Gruß
Johannes
P.S.:
Die Ansteuerung der Motoren (so N20 oder wie die heissen?) läuft bei mir über einen IC direkt, da braucht man natürlich dann in eurem Fall einen Motorcontroller…
/***
- created by Rui Santos, https://randomnerdtutorials.com
- Control 2 DC motors with Smartphone via bluetooth
- Edited by J. Holstein for his project of pathfinder robot.
*/
#include “BluetoothSerial.h” //Header File for Serial Bluetooth, will be added by default into Arduino
BluetoothSerial ESP_BT; //Object for Bluetooth
int incoming;
// Die Pin Angaben koennen auch anders sein, aber so in etwa…
int motor1Pin1 = 12; // pin 2 on L293D IC
int motor1Pin2 = 13; // pin 7 on L293D IC
int enable1Pin = 14; // pin 1 on L293D IC
int motor2Pin1 = 25; // pin 10 on L293D IC
int motor2Pin2 = 26; // pin 15 on L293D IC
int enable2Pin = 27; // pin 9 on L293D IC
int state;
int flag=0; //makes sure that the serial only prints once the state
int stateStop=0;
// Setting PWM properties
const int freq = 30000;
const int pwmChannel1 = 0;
const int pwmChannel2 = 0;
const int resolution = 8;
int dutyCycle = 255;
void setup() {
// sets the pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);
// configure LED PWM functionalitites
ledcSetup(pwmChannel1, freq, resolution);
ledcSetup(pwmChannel2, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(enable1Pin, pwmChannel1);
ledcAttachPin(enable2Pin, pwmChannel2);
Serial.begin(9600);
ESP_BT.begin(“ESP32_LED_Control”); //Name of your Bluetooth Signal
Serial.println(“Bluetooth Device is Ready to Pair”);
// testing
Serial.print(“Testing DC Motor…”);
ledcWrite(pwmChannel1, dutyCycle);
ledcWrite(pwmChannel2, dutyCycle);
}
void loop() {
//if some date is sent, reads it and saves in state
if (ESP_BT.available()) //Check if we receive anything from Bluetooth
/*if(Serial.available() > 0)*/{
state = ESP_BT.read();
flag=0;
}
// if the state is 'F' the DC motor will go forward
if (state == 'F') {
// Macht beid, was Quark ist...
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("Go Forward!");
flag=1;
}
}
// if the state is 'R' the motor will turn left
else if (state == 'R') {
// Gehen
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
if(flag == 0){
Serial.println("Turn LEFT");
flag=1;
}
delay(300);
state=3;
stateStop=1;
}
// if the state is 'S' the motor will Stop
else if (state == 'S' || stateStop == 1) {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("STOP!");
flag=1;
}
stateStop=0;
}
// if the state is 'L' the motor will turn right
else if (state == 'L') {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("Turn RIGHT");
flag=1;
}
delay(300);
state=3;
stateStop=1;
}
// if the state is 'B' the motor will Reverse
else if (state == 'B') {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 0){
Serial.println("Reverse!");
flag=1;
}
}
//For debugging purpose
//Serial.println(state);
}