ESP32 Serial Terminal Bluetooth

Bluetooth y ESP32

 

  • Haremos una introducción al Bluetooth con el ESP32
  • Veremos el modo Serial Bluetooth.
  • Haremos un par de programas sencillos para usarlo.
  •  

    Material requerido.

     

     vista lateral del esp32 Un ESP32

     

    Empezando con el Bluetooth del ESP32

     

    Estamos ya más que acostumbrados a usar Bluetooth con nuestros Arduinos. En Prometec nos hemos hartado a hacer tutoriales sobre Bluetooth,usando un Arduino UNO o MEGA, con los buenos y viejos HC-06 y HC05 , los módulos más habituales de Bluetooth 2.0 en el mundo de Arduino  y similares, porque al manejarse vía  puerto serie podemos mandarles directamente los mensajes que deseábamos y los enviábamos a las radios del HC-06 / HC-05 sin grandes complicaciones.

    Además, la recepción de los mensajes entrantes se reciben  como un mensaje puerto serie, lo que nos facilitaba mucho la vida y nos ahorraba todas las complicaciones inherentes al manejo del Bluetooth y de la Radio interna. Bueno, en realidad casi todas las complicaciones, porque lo de enviar comandos AT para cambiar el nombre del BlueTooth, o la velocidad o cualquier otra configuración, era un tanto truculenta en los tiempos del WhatsApp. Pero con unos poco tropezones al final las cosas iban saliendo.

    Pero últimamente, el Bluetooth que mola es el BLE, (Que son las siglas de Bletooh Low Energy) y que suelen numerar como el Bluetooth 5. Ya sabíamos que la última versión del Bluetooth normal era el 4 y hasta habíamos hecho algún tuto con módulos como el HC-10 que es similar a los HC-06 pero basado y recibiendo BT 4.0.

  • Los que seáis amigos de la Manzanita de Apple, habréis usado esto otros módulos, porque el amigo Apple, no se hablaba hace mucho tiempo con las versiones antiguas de los móviles de pobres y BT 2.0, con esa elegancia que caracteriza a los que les sobra la pasta.[/fancy-ul] [/three-fourth]
  •  

    Pero ahora resulta que tenemos el BT 5 o BLE y tenemos que volver a empezar. ¿O no?

    Vamos a empezar diciendo que la mayoría de los módulos BT 5.0 BLE, soportan también la versión BT 4.0 y nuestro muy amado ESP32, no es una excepción y podemos usar uno u otro modo, mediante programa, pero no ambos a la vez.

    Y aquí es donde empiezan las diferencias y las novedades. Porque el BT 5.0 BLE, esta pensado para ahorrar el máximo de energía en las comunicaciones y su forma de trabajar es estar apagado casi siempre hasta que le requieres algo, para maximizar el tiempo de uso con baterías sin conexión, e incorpora unos cuantos conceptos nuevos como servidores y servicios y otras virguerías que lo hacen completamente diferente de los viejos Bluetooth 2 y 4

    Pero antes de que alguien se asuste, empecemos diciendo que el ESP32 dispone de un modo de trabajo (Y librerías) para trabajar en un modo llamado “ESP32 Serial Bluetooth”, que es exactamente lo que antes hacías en tus proyectos con el HC-05 y HC-06. Un sistema en el que recibimos y enviamos los mensajes BT a través de un puerto serie sin mas complicación y el ESP32 se encarga de todas las cosas raras de la emisión o recepción. Es decir que, si simplemente quieres encender unos leds en remoto o cosas así, puedes seguir usando un sistema similar al que estás acostumbrado, y que nos permite ignorar todo el asunto del control de la radio BT.

    En esta sesión nos vamos a centrar en el uso de BT en el modo Serial Bluetooth y veréis que la cosa ha cambiado poco y en la próxima nos meteremos en el BlueTooth 5. BLE, que como veréis tiende a complicarse un poco mas porque incorpora conceptos nuevos como comentábamos mas arriba, y mucha mayor autonomía al reducir al máximo su consumo (Un objetivo de diseño) y permite cosas como redes Mesh y otras zarandajas que os empezaran a resultar familiares en esta serie de tutos sobre la IOT, porque el BT 5 BLE espera tener algo que decir en este tema y aunque parte en desventaja frente a competidores como LORA y LORAWAN (De las que ya hemos hablado ) por su mayor alcance.

    Pero el Bluetooth está muy extendido y estamos acostumbrados a usarlo en nuestros móviles y similares, y nunca hay que despreciar la fuerza de un estándar ya establecido y posicionado, y aunque el bluetooth 5 y el bluetooth 5 no se parecen en casi nada y no están pensados para las mismas cosas (¡¡Sorpresa!!) tiene algo que decir en redes IOT de pequeñas a medias (Como un centro comercial). La guerra comercial y de estándares para la IOT está servida. Y recuerda que no suele ganar la mejor solución técnica, sino la que consigue la mayor audiencia por motivos que rara vez son técnicas y que tienen mas que ver con la potencia comercial, la capacidad de marketing o la implantación de la marca en los fabricantes de móviles, ordenadores y demás. Y en esto pocos le ganan la mano a Nokia Y Bluetooth.

    Así que de momento vamos que el Serial bluetooth del ESP32 que esta diseñado para comportarse de forma similar al que estabas acostumbrados con Arduino.

     

    Programando Serial BT con el ESP32

     

    Vamos con el ejemplo más básico que consiste en enviar y recibir por el BT del ESP32 como hacíamos con los módulos HC-06. Vamos a escribir un programa sencillo que reciba mensajes Bluetooth a través del puerto serie hacia la consola y que podamos escribir respuestas de vuelta. Empezamos con los include

    #include "BluetoothSerial.h"
    BluetoothSerial SerialBT;

    Un par de líneas sencillas. Incluimos la librería de BluetoothSerial y después iniciamos una instancia que llamamos serialBT, ya podemos pasar al setup()

    void setup()
    {  Serial.begin(115200);
       SerialBT.begin("PROMEESP32"); //Bluetooth device name
       Serial.println("The device started, now you can pair it with bluetooth!");
    }

    Abrimos el puerto serie a 115.200 baud para enviar lo que recibamos a la consola (y lo veamos, claro), después iniciamos el servicio BT con el nombre “PROMEESP32” o el que tu prefieras y por último sacamos un mensaje informando de que ya estamos listos.

    En el loop lo único que vamos a hacer es recibir lo que llegue por el puerto SerialBT a la consola y viceversa. Mas o menos como esto:

    void loop()
    { if ( Serial.available())
            SerialBT.write(Serial.read());
      if (SerialBT.available())
         Serial.write(SerialBT.read());
      delay(20);
    }

    No da para mucho el tema, que digamos. Mas o menos es lo mismo que hacíamos con los BT 2.0 y Arduino UNO. Copiamos lo que entra hacia la consola y enviamos al BT lo que escribamos desd ela consola. Eso es todo,

     

    Usando un Terminal Serie

     

    Bien, el programa de arriba es una virguería, pero ¿Como vemos el resultado? Pues nada mas fácil. Basta con usar un terminal Bluetooth normal y corriente, que es un programa que se conecta al BT y nos permite enviar y recibir textos a través del mismo como si fuera un terminal de texto.

    Hay muchos disponibles sin coste y si estas en Windows puedes usar el Tera Term o el  Putty y si prefieres usar un móvil (Que suele ser más practico para poder controlar el ESP32 en remoto ) puedes usar Serial Bluetooth Terminal en Android y no tengo muy claro que puedes usar en Apple (No gasto de eso)

    El Serial Bluetooth Terminal es sencillo y fácil de usar y se instala sobre la marcha con el link de arriba.

  • Puedes conectarte desde Windows y pedirle que te lo instale en tu móvil sin problemas. Google es listo y la hace genial para los que somos vagos.[/fancy-ul] [/three-fourth]
  •  

    Para conectarte y poder probar la conexión tenemos que empezar conectando con el Bluetooth de tu teléfono al nombre que hemos publicado, y pedirle que actualiza los dispositivos disponibles (Con el botón de abajo en mi caso )y obtendremos una pantalla pidiéndonos conformidad para conectar y si todo va bien en un momento tendréis instala el terminal BT. Os lo muestro en la tercera imagen el icono de la aplicación ya instalada.

    Conectando al bluetooth
    peticion de conexion al Bluetoot
    Icono del serial bluettoh terminal

    En la última pantalla os muestro (Recuadrado en amarillo) el icono de la aplicación. Pinchala y empezamos con ella. Haz estas operaciones:

    Pantala de inicioEsta es la pinta que tiene al arrancar. Pincha en el botón dentro del circulo amarillo[/one-third]
    Configurando la appTe aparecerá este menú. Toca en devices[/one-third]
    Mostrando las redes disponiblesAhí te aparece el nombre del ESP32 que pusimos en el programa. Tócalo para conectar y list0[/one-third]

     

    Ahora te aparecerá un mensaje abajo en la línea de mensajes como este:

    Mensaje de conexion

    Prueba escribir:

    Q tal todo?

    Y recibirás en la consola:

    Recepcion de mensaje bluetooth

    Si escribes desde la consola una respuesta, la verás en la consola del terminal como esperábamos:


     

    Mejorando el programa

     

    EL programa de arriba funciona (¡Qué no es poco!) pero simplemente copia las entradas y salidas de nuestro ESP32 a la consola, sin retener los mensajes, lo que al final es poco práctico porque no retenemos los mensajes para poder procesarlos. Nos interesa disponer de los mensajes recibidos del Bluetooth en una String por ejemplo, para poder hacer un parsing y programar cosas en función de su contenido.

    Y como para eso necesitamos leer líneas completas a un String, (Entendiendo por líneas completas las que acaban en un intro) podemos usar un viejo programtita que usábamos con los HC-06 que hace eso exactamente:

    #include "BluetoothSerial.h"
    BluetoothSerial SerialBT;
    
    void setup()
       {   Serial.begin(115200);
           SerialBT.begin("PROMEESP32"); //Bluetooth device name
           Serial.println("The device started, now you can pair it with bluetooth!");
       }
    
    void loop()
       {   if (Serial.available())    // Lo que escribimos en la consola
               SerialBT.write(Serial.read());
           if (SerialBT.available())  // Lo que llega del bluetooth
              {  String S = GetLine();
                 SerialBT.print(S);
                 Serial.println("---> " + S);
              }
        }
    
    String GetLine()
       {   String S = "" ;
           if (SerialBT.available())
              {    char c = SerialBT.read(); ;
                   while ( c != '\n')            //Hasta que el caracter sea intro
                    {     S = S + c ;
                          delay(25) ;
                          c = SerialBT.read();
                    }
                    return( S + '\n') ;
              }
       }

    ¡Accede al contenido!

    Si vuelcas este programa a tu ESP32, podrás ver que ahora retenemos en la String S el contenido del mensaje que nos envíen por el BT:

    Serial Terminal Bluetooth
    COnsola rduino con Bluetooth

     

    Deja una respuesta