Editing Módulo HM-10

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 64: Line 64:
  
 
Algunos comandos interesantes son:
 
Algunos comandos interesantes son:
* <code>AT</code> simplemente devuelve OK y nos informa de que el módulo está activo y a la espera de nuevos comandos
+
- AT  simplemente devuelve OK y nos informa de qu el módulo está activo y a la espera de nuevos comandos
* <code>AT+ADDR?</code> devuelve la dirección MAC del módulo HM-10
+
- AT+ADDR?  devuelve la dirección MAC del módulo HM-10
* <code>AT+VERR?</code> devuelve la versión actual del firmware
+
- AT+VERR?  devuelve la versión actual del firmware
* <code>AT+RENEW</code> revierte el módulo a la configuración de fábrica
+
- AT+RENEW  revierte el módulo a la configuración de fábrica
* <code>AT+RESET</code> reinicializa el módulo
+
- AT+RESET  reinicializa el módulo
* <code>AT+MODEx</code> cambia el funcionamiento del módulo de cara al procesamiento de comandos AT
+
- AT+MODEx  cambia el funcionamiento del módulo de caa al procesamiento de comandos AT.
** <code>AT+MODE0</code> (valor por defecto). Sólo acepta comandos AT vía la conexión serie (TXD/RXD) hasta que se conecta un dispositivo BLE central al módulo
+
AT+MODE0 (valor por defecto). Sólo acepta comandos AT vía la conexión serie (TXD/RXD) hasta que se conecta un dispositivo BLE central al módulo.
** <code>AT+MODE2</code> Igual que el MODE0 pero,una vez establecida la conexión, se pueden enviar comandos AT desde el dispositivo BLE central. Por ejemplo se puede cambiar el valor de uno de los pines GPIO del módulo HM-10 sin necesidad de un micro adicional.
+
AT+MODE2 Igual que el MODE0, pero una vez extablecida la conexión se pueden enviar comandos AT desde el dispositivo BLE central. Por ejemplo se puede cambiar el valor de uno de los pines GPIO del módulo HM-10 sin necesidad de un micro adicional.
* <code>AT+UUID0xnnnn</code> cambia el UUID del servicio utilizado por el módulo HM-10 para encapsular la conexión serie (el valor por defecto es 0xFFE1)
+
- AT+UUID0xnnnn  cambia el UUID del servicio utilizado por el módulo HM-10 para encapsular la conexión serie (el valor por defecto es 0xFFE1)
* <code>AT+CHAR0xnnnn</code> cambia el UUID de la característica utilizada por el módulo HM-10 para encapsular la conexión serie (el valor por defecto es 0xFFE1)
+
- AT+CHAR0xnnnn  cambia el UUID de la característica utilizada por el módulo HM-10 para encapsular la conexión serie (el valor pot defecto es 0xFFE1)
* <code>AT+PIOxy</code> (x: 2-B ; y: 0-1) Permite activar el pin GPIO x del módulo HM-10 con el valor y (0 Off; 1 On)- Por ejemplo para encender el GPIO 2 hay que enviar <code>AT+PIO21</code>
+
- AT+PIOxy (x: 2-B ; y: 0-1) Permite activar el pin GPIO x del módulo HM-10 con el valor y (0 Off; 1 On)- Por ejemplo para encender el GPIO 2 hay que enviar AT+PIO21.
Este comando permite por ejemplo controlar un relé desde un dispositivo BLE central (un smartphone) si se configura el módulo HM-10 en modo 2 (ver <code>AT+MODE</code> más arriba)
+
Este comando permite por ejemplo controlar un relé desde un dispositivo BLE central (por ejemplo un smartphone) si se configura el módulo HM-10 en modo 2 (ver AT+MODE más arriba)
* <code>AT+BEFCxyz</code> define el valor de los pines GPIO 2 a B cuando el módulo es alimentado (valores permitidos 000 a 3FF). Por ejemplo para que configurar a alto el GPIO2 nada más alimentar el módulo, hay que utilizar el comando <code>AT+BEF200</code>
+
- AT+BEFCxyz define el valor de los pines GPIO 2 a B cuando el módulo es alimentado (valores permitidos 000 a 3FF). Por ejemplo para que configurar a alto el GPIO2 nada más alimentar el módulo, hay que utilizar el comando AT+BEF200
* <code>AT+NAMExxxxxxxxx</code> permite cambiar el nombre del módulo
+
- AT+NAMExxxxxxxxx  permite cambiar el nombre del módulo
* <code>AT+ROLEx</code> (x: 0-1; 0 periférico; 1 - central; valor por defecto 0) permite definir el rol del módulo HM-10. En el caso de configurar el módulo como un dispositivo central, se pueden utilizar los comandos <code>AT+DISC?</code>, <code>AT+CON</code> y <code>AT+CONN</code> para conectarlo a otro dispositivo periférico
+
- AT+ROLEx (x: 0-1; 0 periférico; 1 - central; valor por defecto 0) permite definir el rol del módulo HM-10. En el caso de configurar el módulo como un dispositivo central, se pueden utilizar los comandos AT+DISC?, AT+CON y AT+CONN para conectarlo a otro dispositivo periférico
  
Hay más comandos que permiten configurar y controlar otros parámetros del HM-10. Se recomienda leer la documentación y experimentar con ellos.
+
Hay más comandos que permiten configurar y controlar otros parámteros del HM-10. Se recomienda leer la documentación y experimentar con ellos.
 +
Algunos comandos cuelgan la conexión serie (no sabemos por qué; desconectando la alimentación del módulo y volviéndola a conectar se puede serguir trabajando con el módulo con la configuración actualizada.
  
A veces algunos comandos cuelgan la conexión serie (no sabemos por qué; desconectando la alimentación del módulo y volviéndola a conectar se puede seguir trabajando con el módulo con la configuración actualizada).
+
=== Congiguración del módulo HM-10 como un dispostivo central ===  
 
+
El firmware del módulo permite configurarlo como un dispositivo central que se puede conectar a otro dispositivo (periférico) e intercambiar datos vía BLE. Para ello hay que ejecutar los sigueintes comandos:
=== Configuración del módulo HM-10 como un dispostivo central ===  
+
El firmware del módulo permite configurarlo como un dispositivo central que se puede conectar a otro dispositivo (periférico) e intercambiar datos vía BLE. Para ello hay que ejecutar los siguientes comandos:
+
 
  AT+ROLE1
 
  AT+ROLE1
 
  AT+IMME1
 
  AT+IMME1
Line 94: Line 93:
 
  AT+CONnnnnnnnnnnnn  (dirección MAC en hexadecimal)
 
  AT+CONnnnnnnnnnnnn  (dirección MAC en hexadecimal)
  
Una vez conectados, los dos módulos pueden comenzar el intercambio de información encapsulada en sus respectivas conexiones serie. En principio este mecanismo permite conectar dos módulos HM-10, aunque en teoría serviría para conectar cualquier otro periférico BLE que implemente una característica para intercambio de información usando la funcionalidad Write y Notification (el UUID de la característica se podría configurar con el comando <code>AT+CHAR</code>)
+
Una vez conectados, los dos módulos pueden comenzar el intercambio de información encapsulada en sus respectivas conexiones serie. En principio este mecanismo permite conectar dos módulos HM-10, aunque en teoría serviría para conectar cualquier otro periférico BLE que implemente una característica para intercambio de información usando la funcionalidad Write y Notification (el UUID de la característica se podría configurar con el comando At+CHAR).
+
 
Hay que tener en cuenta que en el firmware que hemos probado (versión 540) sólo se transmiten caracteres ASCII (no cualquier código/byte hexadecimal)
 
Hay que tener en cuenta que en el firmware que hemos probado (versión 540) sólo se transmiten caracteres ASCII (no cualquier código/byte hexadecimal)
 
 
Este mecanismo también permite enviar comandos AT desde el módulo central al periférico (requiere haber cambiado previamente el modo con el comando <code>AT+MODE2</code> en el periférico).
 
Este mecanismo también permite enviar comandos AT desde el módulo central al periférico (requiere haber cambiado previamente el modo con el comando <code>AT+MODE2</code> en el periférico).
  
 
=== Configuración del módulo HM-10 como un iBeacon ===
 
=== Configuración del módulo HM-10 como un iBeacon ===
(Esta sección está basada en el tutorial de blueminance http://www.blueluminance.com/HM-10-as-iBeacon.pdf)
+
(basado en el turorial de blueminance http://www.blueluminance.com/HM-10-as-iBeacon.pdf)
 +
AT+RENEW  Recupera la configuración por defecto de fábrica
 +
AT+RESET  Reinicializa el módulo
 +
AT Reintentar hasta que le módulo esté listo y responda OK
 +
AT+MARJ0xnnn Definir el valor Mayor del iBeacon (hexadecimal)
 +
AT+MINO0xnnnn  Definir el valor Minor del iBeacon (hexadecimal)
 +
AT+ADVI5  Definir el intervalo de anuncio/broadcast (5 corresponde a 546.25 milisegundos)
 +
AT+NAMEMakespaceMadrid  Definir el nombre del iBecon (elegir un valor único)
 +
AT+ADTY3 Configurar el dispositivo BLE como no conectable
 +
9. AT+IBEA1  Habilitar el modo iBeacon
 +
10.AT+DELO2  Configurar iBeacon como sólo broadcast
 +
11.AT+PWRM0  Habilitar auto-sleep para reducir consumo
 +
12.AT+RESET  Reiniciar el módulo
  
<code>AT+RENEW </code>    Recuperar la configuración por defecto de fábrica
+
Una vez configurdo como iBeacon, el módulo deja de encender el LED de la placa y está dormido la myor parte del tiempo con lo que no responde a los comandos AT
<code>AT+RESET</code>      Reinicializar el módulo
+
<code>AT</code>            Reintentar hasta que le módulo esté listo y responda OK
+
<code>AT+MARJ0xnnn</code>  Definir el valor Mayor del iBeacon (hexadecimal)
+
<code>AT+MINO0xnnnn</code> Definir el valor Minor del iBeacon (hexadecimal)
+
<code>AT+ADVI5</code>      Definir el intervalo de anuncio/broadcast (5 corresponde a 546.25 milisegundos)
+
<code>AT+NAMEMakespaceMadrid</code>    Definir el nombre del iBeacon (elegir un valor único)
+
<code>AT+ADTY3</code>      Configurar el dispositivo BLE como no conectable
+
<code>AT+IBEA1</code>      Habilitar el modo iBeacon
+
<code>AT+DELO2</code>      Configurar iBeacon como sólo broadcast
+
<code>AT+PWRM0</code>      Habilitar auto-sleep para reducir consumo
+
<code>AT+RESET</code>      Reiniciar el módulo
+
 
+
Una vez configurado como iBeacon, el módulo deja de encender el led de la placa y está dormido la mayor parte del tiempo con lo que no responde a los comandos AT
+
 
Para despertar el módulo y poder mandarle nuevos comandos AT, hay dos opciones:
 
Para despertar el módulo y poder mandarle nuevos comandos AT, hay dos opciones:
* Enviarle una cadena larga (más de 80 bytes) de caracteres sin la cadena AT (repetir varias veces hasta que recibamos de respuesta OK+WAKE.
+
- Enviarle una cadena larga (más de 80 bytes) de caracteres sin la cadena AT (repetir varias veces hasta que recibamos de respuesta OK+WAKE.
* Conectar el pin PIO0/System Key (pin BRK en la placa breakout) a tierra/GND durante más de un segundo.
+
- Conectar el pin PIO0 (System Key) a tierra/GND durante más de un segundo. Este PIN está expuesto en uno de los pines físicos de las placas que seis pines machos (BRK).
  
 
=== Actualización del firmware ===
 
=== Actualización del firmware ===
 
(Se requiere sistema operativo Windows)
 
(Se requiere sistema operativo Windows)
 
 
(CUIDADO: si el proceso de instalación del nuevo firmware no termina con éxito, el módulo puede quedar inservible. Si sigues, asumes ese riesgo bajo tu responsabilidad)
 
(CUIDADO: si el proceso de instalación del nuevo firmware no termina con éxito, el módulo puede quedar inservible. Si sigues, asumes ese riesgo bajo tu responsabilidad)
  
Para conectar el módulo HM-10 al PC y reprogramarlo hace falta un adaptador USB a TTL serie (a 3.3V si no utilizamos la placa breakout). Una alternativa que nosotros hemos utilizado es usar una placa Arduino Uno con el chip ATmega en formato "through hole". Si quitamos el chip ATmega de su zócalo, la placa se comporta como un adaptador USB a TTL serie a 5V exponiendo la conexión serie TTL en los pines 0 y 1. Como las placa breakout incluye los reguladores de tensión, podemos conectar directamente el pin 0 y 1 de la placa Arduino a los pines RXD y TXD del módulo HM-10 sin miedo a quemarlos. También hay que conectar los pines GND y 5V de la placa Arduino a los pines GND y VCC de la placa breakout del módulo.
+
Para conectar el módulo HM-10 al PC y reprogramarlo hace falta un adaptador USB a TTL serie (a 3.3V si la placa del módulo no incluye reguladores/conversores de tensión). Una alternativa que nosotros hemos utilizado es usar una placa Arduino Uno con el chip ATmega en formato "through hole". Si quitamos el chip de su zócalo, la placa se comporta como un adaptador USB a TTL serie a 5V exponiendo la conexión serie TTL en los pines 0 y 1. Como las placas en que están montados nuestros módulos HM-10 inluyen los regularodes de tensión, podemos conectar directamente el pin 0 y 1 de la placa Arduino a los pines RXD y TXD del módulo HM-10 sin miedo a quemarlos. También hay que conectar los pines GND y 5V de la placa Arduino a los pines GND y VCC de la placa del módulo.
 
+
Una vez conectada la placa Arduino al ordenador, abir el Device Manager y anotar el número de puerto serie/COM que se le ha asignado.
Ahora podemos conectar la placa Arduino al ordenador, abir el Device Manager de Windows y anotar el número de puerto serie/COM que se le ha asignado.
+
  
 
Para actualizar el firmware del módulo HM-10, hay que descargar la última versión disponible de la web de Jinan Huamao Technology (http://www.jnhuamao.cn/download_rom_en.asp?id=)
 
Para actualizar el firmware del módulo HM-10, hay que descargar la última versión disponible de la web de Jinan Huamao Technology (http://www.jnhuamao.cn/download_rom_en.asp?id=)
 
En esta página hay un manual de instrucciones además de las últimas versiones del firmware para diferentes módulos configuraciones.
 
En esta página hay un manual de instrucciones además de las últimas versiones del firmware para diferentes módulos configuraciones.
Descargar el fichero "HM-10 HMSoft CC254x Vyyy firmware update file". Hay que comprobar (leyendo si hace falta con una lupa) si nuestro módulo integra el chip CC2540 o el CC2541 (las versiones ´más actuales del módulo suelen incluir el CC2541).
+
Descargar el fichero "HM-10 HMSoft CC254x Vyyy firmware update file". Hay que comprobar (leyendo si hace falta con una lupa) si nuestro módulo integra elchip CC2540 o el CC2541 (las versiones ´más actuales del módulo sulene incluir el CC2541).
 
+
Una vez descargado el fichero, desempaquetarlo en una carpeta y ejecutar el programa HMSoft.exe. En el campo Image File seleccionar el fichero HMSoft-bin presente en la misma carpeta. Actualizar también el puerto COM con el valor que hemos obtenido con el Device Manager.
Una vez descargado el fichero, desempaquetarlo en una carpeta y ejecutar el programa HMSoft.exe. En el campo Image File seleccionar el fichero HMSoft.bin presente en la misma carpeta. Actualizar también el puerto COM con el valor que hemos obtenido con el Device Manager.
+
 
+
Abrir el IDE de Arduino, seleccionar el puero COM de nuestra placa Arduino y abrir una consola. Configurar los menús desplegables de la parte inferior de la ventana a 9600 baudios y "No hay fin de línea". Si hemos realizado bien las conexiones y nuestro módulo está configurado a 9600 baudios, podemos enviar el comando <code>AT</code> en el campo de entrada de texto y veremos en la caja de texto de salida <code>OK</code>. Para saber la versión actual del firmware podemos enviar el comando <code>AT+VERR?</code>
+
  
 +
Abrir el IDE de Arduino, seleccionar el puero COM de nuestra placa Arduino y abrir una consola. Configurar los menús desplegables de la parte inferior de la ventana a 9600 baudios y "No hay fin de línea". Si hemos realizado bien las conexiones y nuestro módulo está configurado a 9600 baudios, podemos enviar el comando "AT"  (sin comillas) en el campo de entrada de texto y veremos en la caja de texto de salida "OK".
 
Una vez llegados a este punto, podemos comenzar el proceso de instalación del nuevo firmware
 
Una vez llegados a este punto, podemos comenzar el proceso de instalación del nuevo firmware
 
+
IMPORTANTE: Si el proceso de instalación de un nuevo firmware no termina con éxito el módulo puede volverse inservible ("bricked"). Conviene realizar todo el rpoceso sin desconectar el módulo del ordenador hasta que el programa HMSoft indique que ha terminado con éxito.
IMPORTANTE: Si el proceso de instalación de un nuevo firmware no termina con éxito el módulo puede volverse inservible ("bricked"). Conviene realizar todo el prrpoceso sin desconectar el módulo del ordenador hasta que el programa HMSoft indique que ha terminado con éxito.
+
  
 
Para comenzar la instalación, lo primero que tenemos que hacer es informar al módulo por medio de un comando AT enviado desde la consola de Arduino:
 
Para comenzar la instalación, lo primero que tenemos que hacer es informar al módulo por medio de un comando AT enviado desde la consola de Arduino:
AT+SBLUP
+
AT+SBLUP
  
 
A partir de este momento se enciende el led verde fijo en el módulo con una intensidad baja que indica que el módulo se está reprogramando.
 
A partir de este momento se enciende el led verde fijo en el módulo con una intensidad baja que indica que el módulo se está reprogramando.
Ahora hay que cerrar la consola de Arduino para liberar el puerto COM y que lo pueda emplear el programa HMSoft. Pulsar "Load Image" en el programa y la descarga al módulo empezará. Tras un rato, el proceso terminará y el módulo estará listo con la nueva versión (el led verde brillará de modo intenso e intermitente y aparece una ventana de éxito en el PC)
+
Ahora hay que cerrar la consola de Arduino para liberar el puero COM y que lo pueda emplear el programa HMSoft. Pulsar "Load Image" y la descarga al módulo deberá empezar. Tras un rato, el proceso terminará y el módulo estará listo con la nueva versión (el led verde brillará de modo intenso e intermitente y aparece una ventana de información en el PC).
  
Si ahora abrimos de nuevo la consola de Arduino, podemos mandar el comando <code>At+VERR?</code> para comprobar que la versión del firmware se ha actualizado.
+
Si ahora abrimos de nuevo la consola de Arduino, podemos mandar el comando At+VERR? para comprobar que la versión del firmware se ha actualizado.
  
Si el proceso falla y se queda el módulo con el LED verde fijo a baja intensidad, se puede intentar resetear el proceso conectando el pin PIO0 (pin BRK en la placa breakout) a tierra/GND (¡no aseguramos que este mecanismo funcione!).
+
Si el proceso falla y se queda el módulo con el LED verde fijo a baja intensidad, se puede intentar resetear el proceso conectando el pin PIO0 (System Key/BRK) a tierra/GND (no aseguramos que este mecanismo funcione!).
  
 
=== Enlaces interesantes ===  
 
=== Enlaces interesantes ===  

Please note that all contributions to Wiki Makespace Madrid may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Wiki Makespace Madrid:Copyrights for details). Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to type the two words you see in the box below:

Cancel | Editing help (opens in new window)