sábado, 12 de diciembre de 2015

Configuración del módulo bluetooth HC-05 por comandos AT

El módulo HC-05 es un módulo físicamente igual que el HC-06, el siguiente de la familia, pero diferente en cuanto al firmware que llevan grabado. La principal distinción es que se puede conectar a otro módulo al poder configurarlo como maestro, algo que en el 06 es imposible, siendo siempre esclavo. Ser maestro o esclavo NO determina la dirección del flujo de datos, es decir, la comunicación es bidireccional. Al igual que con el módulo HC-06, presentado en la entrada anterior, con el HC-05 también escribí un sketch con el objetivo de utilizar el Serial Monitor del IDE de Arduino como consola y poder, mediante esta, enviar comandos y modificar las propiedades configurables de estos módulos.

Al adquirir este módulo (que por cierto me costó muy barato, 2'74€) por AliExpress, lo primero que observé es que no tenía los pines típicos de un HC-05 que yo había visto por internet. En vez de STATE, RXD, TXD, GND, VCC y KEY, tenía STATE, RXD, TXD, GND, VCC y EN. Mi primer pensamiento fue que como el único pin diferente era el KEY (que sabía que era el necesario para entrar en el modo AT), el EN sería una especie de "enable" y tendría la misma función. Pero como estas cosas nunca son como te esperas, en las pruebas falló.

NOTA: Para los módulos "normales" todo lo explicado en este post también sirve, con la ventaja de tener el pin KEY accesible desde el primer momento y no teniendo que hacer soldaduras extra como me pasó a mí. Aunque recomiendo leer la entrada entera por si acaso, no habría ningún problema en acceder directamente a la parte de los comandos y del esquema de conexiones y posteriormente al código, saltándose la parte intermedia.

Después de buscar y buscar, me enteré de que había más de un tipo de módulo, y que lo que variaba era el patillaje de la base azul (lo que es realmente el módulo es la plaquita verde y es igual en todos. Nosotros llamaremos módulo al conjunto en sí, incluyendo la base azul y haré distinción cuando me refiera solo a la plaquita verde). El que yo tenía llevaba soldado un pulsador entre el pin de la placa verde correspondiente a la entrada en el modo AT, el cual debía estar pulsado para entrar. Pero no era así sin más porque midiendo continuidad con el pulsador presionado, el polímetro marcaba infinito, es decir, no había continuidad. Mi modelo de módulo era el GW-040 (o ZS-040) que funcionan de una manera ligeramente diferente a los "normales". Por esto decidí hacer lo que explico en el párrafo siguiente.


Pulsador en el módulo.

Casi toda la información que utilicé y en la que me baso para lo que explico a continuación fue sacada de http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/. Tengo que decir que no toda esa información me fue útil. Después de leer la página y hacer las pruebas pertinentes llegué a "mi" método pero antes de explicarlo quiero hacer un matiz. Manteniendo presionado el botón que traía mi módulo (teniendo el pin EN en HIGH) entraba en el modo AT, pero como dice la página de Martyn Currey, hay dos modos AT, que llama "full" y "mini". En el primero, todos los comandos están "habilitados", pero en el segundo hay unos cuantos que lanzan error al enviarlos. Para entrar, sí o sí hay que poner el pin 34 en HIGH pero una vez dentro podemos mantenerlo o quitarlo, quedándonos en "full" o cambiando a "mini". Mi planteamiento fue que iba a ser costoso estar pendiente de mantener el pulsador del módulo presionado y enviar los comandos a la vez a través del PC, por eso opté por cortar el plástico protector en el que van enfundados estos dispositivos y soldar en el pin 34 de la placa verde medio jumper (en vez de puentear el pulsador como habría sido lógico pensar ya que como he dicho antes, el polímetro no marcaba continuidad al accionar el pulsador). Luego le di un par de vueltas de celo para evitar tirones accidentales. Así quedó soldado:

Antes de "envolver" en celo.

Localización del pin 34 en la placa verde.

Así, poniendo el pin 34 en HIGH a través del jumper entraba en modo AT y a no ser que lo desconectase estaba en "full", teniendo acceso a todos los comandos, algo mucho más cómodo. Según he leído, hay que hacer un divisor de voltaje para alimentar ese pin 34 con 3.3V pero también digo que alguna vez lo he conectado a los 5V de Arduino y no ha pasado nada extraño, ha funcionado como siempre. La última cosa que señalar es que para entrar en AT hay que tener el pin 34 alimentado antes de conectar la alimentación del módulo, es decir, imaginando que tenemos una protoboard delante, conectar primero el pin que nos hace de KEY y luego "pinchar" el módulo. Sabremos que hemos entrado porque la luz roja se alternará en encendida y apagada en intervalos de un segundo en cada posición. También es válido conectar tanto alimentación como KEY y controlar por software cual se activa primero, por ejemplo con un delay().

Aquí dejo el enlace del datasheet (Datasheet HC-05) y una lista con todos los comandos (tomada de la guía del usuario del módulo bluetooth EGBT-045MS).

Aquí muestro el esquema de conexiones (sin divisor de voltaje en el pin 34):
Imagen hecha a partir de bases tomadas de Fritzing

Este módulo, para detectar un comando, tiene que leer el "final de línea" y el "retorno de carro" ("\r\n"), pero para simplificarlo aun más y no tener que estar pendiente de cambiarlo, ya va incluido en el código y por tanto el Serial Monitor tiene que estar, como de normal, en "Sin ajuste de línea".

En este momento ya podemos cargar el sketch a nuestro Arduino. El archivo .ino lo podéis encontrar en el enlace a "Archivos" al final de la entrada junto al enlace al IDE de Arduino.

Cabe destacar que al entrar en modo AT con el HC-05, este entra siempre en frecuencia 38400, así que nos ahorramos la función de "sintonización" a la frecuencia correspondiente que utilizábamos en el sketch del 06, por lo demás es casi idéntico.

Enlace al IDE de Arduino: https://www.arduino.cc/en/Main/Software