Pràctiques de «Tecnologia i digitalització» amb Blockly@Arduino / ESP32 / WeMos D1 R32
2) Provem el telèfon Android
Anem a comunicar-nos per Bluetooth des del mòbil Android amb la targeta Wemos D1 R32 per dir-li que engegue els motors A i B del cotxe al rebre un caràcter per Bluetooth. Aquest és el cas per provar els les funsions motor que hem definit abans. Tu hauràs de modificar les funciona motor més tard.
Al telèfon Android:
1) Cal instal·lar el Bluetooth terminal.
2) Cal que carregues el següent programa a la targeta Wemos D1
//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial
// Hem afegit una connexió a un escut L298 on hi ha 2 motors d'un cotxet
// que controlarem des del terminal del telefon.
// i on rebrem missatges indicant les accions fetes.
// Carles Ferrando - gener 2023
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT; //Definim el serial Bluetooth del telefon.
int valorRebut; // Variable que mostrara el valor rebut amb el serial Bluetooth per ESP32
// Motor A Horari
void Motor_A_Horari() {
Serial.println("Escut L298 motor A Horari");
Serial.println("Activem IN1=13");
digitalWrite(13, HIGH);
Serial.println("Desactivem IN2=12");
digitalWrite(12, LOW);
}
// Motor B Horari
void Motor_B_Horari() {
Serial.println("Escut L298 motor B Horari");
Serial.println("Activem IN4=27");
digitalWrite(27, HIGH);
Serial.println("Desactivem IN3=14");
digitalWrite(14, LOW);
}
// Motor A antiHorari
void Motor_A_antiHorari() {
Serial.println("Escut L298 motor A antiHorari");
Serial.println("Desactivem IN1=13");
digitalWrite(13, LOW);
Serial.println("Activem IN2=12");
digitalWrite(12, HIGH);
}
// Motor B antiHorari
void Motor_B_antiHorari() {
Serial.println("Escut L298 motor B Horari");
Serial.println("Desactivem IN4=27");
digitalWrite(27, LOW);
Serial.println("Activem IN3=14");
digitalWrite(14, HIGH);
}
// Atura motor A
void Atura_Motor_A() {
Serial.println("Escut L298 motor A aturat");
Serial.println("Desactivem IN1=13");
digitalWrite(13, LOW);
Serial.println("Desactivem IN2=12");
digitalWrite(12, LOW);
}
// Motor B antiHorari
void Atura_Motor_B() {
Serial.println("Escut L298 motor B aturat");
Serial.println("Desactivem IN4=27");
digitalWrite(27, LOW);
Serial.println("Desactivem IN3=14");
digitalWrite(14, LOW);
}
void setup() {
Serial.begin(115200);
SerialBT.begin("Wemos_Robotet"); //Nom del dispositiu Bluetooth
Serial.println("The device started, now you can pair it with bluetooth!");
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(27, OUTPUT);
pinMode(14, OUTPUT);
}
void loop() {
if (Serial.available()) { // Comprova si funciona serial de Arduino IDE
SerialBT.write(Serial.read()); // llegeix serial
}
if (SerialBT.available()) { // si tenim dispoible el serial Bluetooth
Serial.print("Lectura Bluetooth ="); // escriu al serial de Arduino IDE
valorRebut = SerialBT.read(); // llegeix i guarda el valor en valorRebut
Serial.println(valorRebut);
if (valorRebut == 52){ // Si escrivim "4" al terminal BT el serial ESP32 rep el valor "52"
// i llavors es compleix aquesta condició
Motor_B_antiHorari();
SerialBT.println("Motor B antiHorari engegat"); // avisa el serial Bluetooth per terminal telèfon que el led esta engegat
delay(1000); // atura el programa 1 s
}
if (valorRebut == 51){ // Si escrivim "3" al terminal BT el serial ESP32 rep el valor "51"
// i llavors es compleix aquesta condició
Motor_A_antiHorari();
SerialBT.println("Motor A antiHorari engegat"); // avisa el serial Bluetooth per terminal telèfon que el led esta engegat
delay(1000); // atura el programa 1 s
}
if (valorRebut == 50){ // Si escrivim "2" al terminal BT el serial ESP32 rep el valor "50"
// i llavors es compleix aquesta condició
Motor_B_Horari();
SerialBT.println("Motor B Horari engegat"); // avisa el serial Bluetooth per terminal telèfon que el led esta engegat
delay(1000); // atura el programa 1 s
}
if (valorRebut == 49){ // Si escrivim "1" al terminal BT el serial ESP32 rep el valor "49"
// i llavors es compleix aquesta condició
Motor_A_Horari();
SerialBT.println("Motor A Horari engegat"); // avisa el serial Bluetooth per terminal telèfon que el led esta engegat
delay(1000); // atura el programa 1 s
}
if (valorRebut == 48){ // Si escrivim "0" al terminal BT el serial ESP32 rep el valor "48"
// i llavors es compleix aquesta condició
Atura_Motor_B();
Atura_Motor_A();
SerialBT.println("Motors aturats"); // avisa el serial Bluetooth per terminal telèfon que el led està aturat
delay(1000); // atura el programa 1 s
}
// Ací baix pot afegir mes if per nous leds o per controlar varis motors amb una targeta L298
}// final if del serial Bluetooth
delay(20); // espere 20 ms entre cicles
} // final del cicle loop i del programa
Si tries aquest tipus de targeta a l'IDE d'Arduino l'antena Bluetooth funciona bé
per la targeta Wemos D1 R32 encara que no siga una Wemos D1 Mini.
3) Una vegada carregat el programa d'abans a la wemos fes el pairing (emparellament)
i prova el programa.
4) Ara cal que modifiques aquest programa, i caldrà reescriure les funcions com et demana la següent secció.
Llicenciat sota la Llicència Creative Commons Reconeixement CompartirIgual 4.0