NodeMCU en español
NodeMCU - Juan Antonio Villalpando
-- Tutorial de NodeMCU en español --
Volver al índice del tutorial NodeMCU
____________________________
155.- Wemos D1 R32 ESP32. App Inventor obtiene el estado de dos pulsadores. Bluetooth.
_________________________________
10.- App Inventor obtiene el estado de dos pulsadores. Bluetooth.
p155wemos_pulsadores_BT.aia
- Pulsamos un Botón en App Inventor y obtenemos el estado de dos pulsadores.
_________________________________
- Diseño.
- El ByteDelimitador = 10, significa que cuando reciba este caracter ha llegado el fin de envío.
- El caracter 10 corresponderá en el código del ESP32 a "\n"
- Es decir, el ESP32 enviará "\n" indicando fin de mensaje y el App Inventor cuando reciba ese caracter (corresponde al 10) sabrá que ha finalizado el mensaje enviado.

_________________________________
- Bloques.

_________________________________
- Conexiones.

_________________________________
- Código.
- El SerialBT.print(respuesta); lo envía por Bluetooth.
- El Serial.println(respuesta); lo he puesto para observarlo en el Monitor Serie.
AI2_pulsadores_bt.ino |
// Juan A. Villalpando.
// KIO4.COM
// Consulta el estado de los pulsadores.
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth no activado! Activa la conexion Bluetooth.
#endif
BluetoothSerial SerialBT;
#define pulsa16 16 // Pulsador en terminal 16.
#define pulsa17 17 // Pulsador en terminal 17.
int pulsador16;
int pulsador17;
String estado16;
String estado17;
String respuesta = "0,0";
char caracter;
void setup() {
Serial.begin(115200);
pinMode(pulsa16, INPUT);
pinMode(pulsa17, INPUT);
SerialBT.begin("ESP32test");
}
void loop() {
if(SerialBT.available()) {
caracter = SerialBT.read();
if(caracter == 'k'){
pulsador16 = digitalRead(pulsa16);
if (pulsador16 == HIGH) {estado16 = "Pulsador16 PULSADO";} else {estado16 = "Pulsador16 NO pulsado";}
pulsador17 = digitalRead(pulsa17);
if (pulsador17 == HIGH) {estado17 = "Pulsador17 PULSADO";} else {estado17 = "Pulsador17 NO pulsado";}
respuesta = estado16 + "," + estado17 + "\n"; // Se debe añadir \n para indicar fin de envío.
SerialBT.print(respuesta);
Serial.println(respuesta);
caracter = '-';
} // Fin del caracter
} // Fin del available
} // Fin del loop
|
_________________________________
- Comentarios.
- Cuando queramos obtener los estados, enviamos la "k".
- Si el código del ESP32 recibe ese caracter, leerá el estado del pulsa16 y pulsa17 y lo enviará al App Inventor.
- Tambíen enviará "\n" que significa fin de mensaje, de esta manera cuando App Inventor reciba ese Byte (que corresponde al 10) sabrá que ha terminado de llegar el mensaje.
- El mensaje va llegando caracter a caracter.
- El caracter ASCII 10 es backspace, es decir fin de línea, es nuestro caso fin de mensaje, en el código del Linux es "\n"
- Las variables:
int pulsador16;
int pulsador17;
también las podríamos haber puesto de tipo bool.
bool pulsador16;
bool pulsador17;
- ¿Cómo se obtiene por separado cada pulsador?
- ContenidodeRespuesta: Pulsador16 PULSADO,Pulsador17 NO PULSADO
- Lo guardamos en una tabla llamada respuesta, cada parte separada por coma es un elemento (esto lo hace el bloque lista desde registro csv)
respuesta |
1 |
Pulsador16 PULSADO |
2 |
Pulsador17 NO PULSADO |
- Ahora mostramos en las Etiquetas.Texto los elementos 1 y 2

_________________________________
_________________________________
_________________________________
_________________________________
- Con un Reloj.
- En vez de Pulsar el Botón para obtener el estado de los pulsadores, se obtendrá automáticamente mediante un Temporizador, Reloj.
p155wemos_pulsadores_Reloj_BT.aia
_________________________________
- Diseño.
- En el Diseño añadimos un Reloj y le ponemos IntervaloDelReloj a 500.
- Cada 500 milisegundos, el Temporizador obtendrá el estado de los pulsadores.
_________________________________
- Bloques.

_______________________________
|