En este artículo vamos a enseñarte como puedes realizar la programación inalámbrica de Arduino por Bluetooth, es decir, como puedes cargar tus sketch a la placa ¡Sin cables!. Esto puede ser útil si requieres que tu arduino se encuentre lejos de tu lugar de trabajo (escondido en un gabinete, por ejemplo), en campo: para actualizar el firmware de placas que no son fácilmente accesibles, o simplemente no te agrada tener una gran cantidad de cables en tu área de trabajo.
Hay que aclarar que la programación inalámbrica de arduino por bluetooth tiene sus pros y contras, ya que la velocidad de carga del sketch será mucho menor, sin embargo, para realizar pruebas de programas pequeños (led blink, por ejemplo) o para realizar alguna actualización esporádica de firmware, puede resultar la solución ideal.
Para esta experiencia estaremos usando uno de nuestros módulos bluetooth HC-05, ya que este módulo se comercializa con un PCB que expone el pin “status”. Este pin puede configurarse para cambiar a estado bajo cuando abrimos la conexión al puerto serie bluetooth, lo cual nos proporciona la forma ideal de activar el reset (y comenzar el funcionamiento del bootloader) del arduino.
En la foto de portada observamos el circuito que utilizaremos armado sobre un protoboard, pero que podemos armar de forma más definitiva usando un proto shield.
Configurando el módulo HC-05 para la programación inalámbrica de Arduino por Bluetooth
Antes de que el HC-05 funcione como un “programador de arduinos”, debemos configurar el módulo para que se comporte como lo requerimos. Debemos asegurarnos que el módulo tenga los siguientes parámetros ajustados:
- En el caso de Arduino UNO con Optiboot: UART configurada a 115200 baudios, 8 bits, 1 bit de parada, sin paridad
- En el caso de Arduino Duemilanove / Decimilia: UART configurada a 56700 baudios, 8 bits, 1 bit de parada, sin paridad
- Configurar la polaridad del pin de state para la polaridad adecuada
Ya explicamos en otra entrada el funcionamiento del módulo bluetooth HC-05 y como entrar al modo de configuración. Por lo que solamente dejamos la secuencia de comandos que debemos introducir para poner a funcionar el módulo como “programador inalámbrico” para tu arduino. Si hay dudas, te recomendamos revisar nuestra otra entrada que aborda con más profundidad el tema de la configuración del bluetooth HC-05.
Los comandos a enviar al HC-05 para configurarlo son los siguientes:
1 2 3 4 5 | AT+ORGL AT+ROLE=0 AT+POLAR=1,0 AT+UART=115200,0,0 AT+INIT |
Linea por linea lo que hacemos es lo siguiente:
- Restaurar la configuración de fabrica
- Configurar en modo esclavo (puente serial transparente desde la PC)
- Configurar la polaridad del pin 32 (etiquetado como State en nuestros módulos) del módulo HC-05 para que vaya a estado bajo cuando un dispositivo se conecte al módulo
- Configurar el baudrate a la velocidad del bootloader
- Salir del modo de configuración e iniciar la operación normal del módulo HC-05
Si eres curioso, puedes consultar la hoja de datos del bluetooth HC-05 para ver los detalles de cada comando utilizado. En la siguiente foto podemos ver que un adaptador USB a TTL puede ser de gran ayuda para configurar el módulo bluetooth HC-05, conectándolo al puerto USB de la computadora.
Conexión del Bluetooth HC-05 para la programación inalámbrica de Arduino por Bluetooth
Conectaremos los pines TX y RX del bluetooth a los pines RX y TX del arduino respectivamente (van cruzados). El pin status del bluetooth pasará a funcionar como reset y debemos conectarlo al pin “reset” del arduino a través de un capacitor cerámico de 100 nF. Las resistencias que se muestran en el circuito son para reducir el voltaje del pin TX (salida de 5 volts) de arduino a algo cercano a 3.3 Volts, que es el nivel lógico que admite el módulo bluetooth. Las conexiones van como se muestra en la siguiente imagen:
Una vez que tengamos armado el circuito puede verse de la siguiente manera en un protoboard.
En este momento ya tenemos el hardware listo para intentar realizar la programación de Arduino por Bluetooth. Por lo que podemos abrir nuestro IDE y realizar el proceso de forma habitual, veremos que es muy similar a lo que haríamos para cargar un sketch mediante un cable USB. Cabe destacar que cada vez que un dispositivo bluetooth se enlace con el módulo se va a producir el reset del arduino, dado que el pin de “status” cambiará a estado bajo. Hay que considerar esto, si deseamos que, por ejemplo, se conserve el estado de las salidas digitales (se pierde en el reset).
Programación inalámbrica de Arduino por Bluetooth
Una vez que ya tenemos el módulo bluetooth configurado y el circuito montado, podemos intentar la programación inalámbrica de Arduino por Bluetooth por primera vez. En este punto vamos a asumir que ya tenemos el módulo HC-05 emparejado con nuestra PC y tenemos el puerto serie sobre bluetooth mostrándose correctamente en nuestro administrador de dispositivos, la forma de hacer esto varía de acuerdo al sistema operativo y no lo vamos a incluir aquí. Pero debemos revisar que en el administrador de dispositivos de windows se muestre correctamente los puertos serie virtuales de bluetooth, como se muestra a continuación:
Abrimos el IDE de arduino como es habitual y seleccionamos el nuevo puerto serie que se creo cuando emparejamos el bluetooth con la PC.
Abrimos el sketch de “Blink” que se encuentra en la carpeta de ejemplos y presionamos el botón “Cargar” para comenzar la descarga del programa a la tarjeta arduino.
La carga del programa debería transcurrir de forma normal, hasta que se comience a ejecutar el código cargado en el arduino. Si hay errores puede deberse a que conectamos alguna de las señales incorrectamente o que no configuramos correctamente la polaridad del pin “state”.
NOTA: Si por algún motivo el sketch no se puede grabar en el arduino, hay que experimentar con el valor del capacitor, normalmente es buena idea aumentar su valor hasta garantizar que el arduino se resetea de manera correcta al abrir el puerto serie sobre bluetooth. Los valores recomendamos son de 100 nF a 1 uF.
Conclusiones
- La Programación inalámbrica de Arduino por Bluetooth es una buena alternativa cuando no tenemos a la mano la tarjeta para conectarla al puerto USB de la computadora.
- Podemos convertir cualquier arduino en una placa inalámbrica, capaz de ser programada a distancia mediante bluetooth. Incluso podemos utilizar solamente el ATMEGA328 con el módulo bluetooth dentro de algún desarrollo.
- El baudrate esta fijo en 115200 baudios, por que es la velocidad de descarga para optiboot (bootloader de arduino UNO).
- Cualquier sketch que desee transmitir información a la PC mediante bluetooth (por ejemplo con Serial.write()), debe hacerlo utilizando la velocidad de 115200 baudios, ya que el bluetooth permanecerá configurado de esa forma.
- La carga de los sketch puede durar más si se usa bluetooth, al parecer se debe a la sobrecarga de los protocolos involucrados en la transmisión inalámbrica.
- Recordemos que cada vez que nos conectemos con un dispositivo bluetooth al arduino, este se va a reiniciar.
Hola una pregunta, está programación servirá para programar el Bluetooh y que me mande una notificación al celular?
Hola que tal una pregunta este tutorial me servirá para conectar un bluetooh al arduino ?
Mi idea es conectar un sensor de nivel de agua al bluetooh y este me envie los datos ?
Hola.
Si te sirve para la conexión física. El diagrama que mostramos es el adecuado. Si no quieres que se reinicie tu placa al abrir el monitor serial (al abrir el puerto serie) debes quitar el capacitor.
Saludos.
La programacion que muestras es ya la correcta para subirla y controlar desde un celular las luces led tanto como el encendido y el apagado o solo es una muestra, en caso de que si sea? que programa utilizarías para encender luces led desde tu mobil.
Ya investigue un poco sobre la app que mencionas y…
NO, este tutorial habla de como puedes cargar un programa (sketch) desde la PC por bluetooth al arduino. Para lograr lo que tu quieres hay que hacer una pequeña programación especial, no se si el autor de la App proporcione esto o haya que hacerla uno mismo.
Seguiré leyendo para saber como funciona conforme tenga tiempo.
ESTA PROGRAMACION SE PUEDE USAR UTILIZANCO LA app Arduidroi?
Lo desconozco, nunca lo he probado.
Hola se puede hacer con arduino mega porque no encuentro informacion, si se puede cual seria la velocidad
Hola si se debe de poder, debe ser de 115200.
Saludos.
Buenas! fantástico proyecto. Crees que sería capaz de aplicar el módulo bluetooth para programar un Attiny 85 dip 8? aunque este solo posee 5 salidas digitales.
Hola.
Este método aprovecha el bootloader para programar el micro a través de bluetooth. Si tienes un bootloader instalado que funcione mediante UART, es muy probable que si puedas hacer lo mismo.
Saludos.
Hola! tengo un problema, mi HC 05 no reconoce los comandos AT+POLAR, AT+UART y AT+INIT que puedo hacer?, existe otros comandos que tengan la misma función? Ayuda xfa
Buenas.
¿En donde lo compraste?
Saludos.
compre el hc-05 sin boton y reconocio los comandos que mencione siguiendo los pasos, ahora si funciono gracias saludos!!!
Podria conectar directamente el modulo sin ninguna resistencia, sin ningun problema?
Si se puede, pero estas funcionan como protección para el modulo bluetooth que funciona a 3.3 volts. No te lo recomendamos.
Saludos.
compre el hc-05 sin boton y reconocio los comandos que mencione siguiendo los pasos, ahora si funciono gracias saludos!!!
buenas tardes Señores mirando las explicaciones no me doy cuenta de algo, antes que nada estoy programando HC05 (SIN COMANDOS AT) tengo una alarma por conectar y el problema es que cuando me quedo sin señal o sea sin cobertura y el led o el relay siguen en estado alto (el equipo sigue funcionando) la idea es cada vez que me quedo o me alejo del celular de la aplicacion debe apagar todo el equipo (Y ME SUCEDE LO CONTRARIO)
alguna ayuda si quieren puedo subir el código.
Podrias implementar una lógica en el programa que este recibiendo datos constantemente desde el equipo bluetooth y al dejar de recibir datos realice el comportamiento que desees (apagar relays, etc). Se trataría de programar un timeout.
Saludos.
estimado amigo gracias por tu aporte, mi consulta es si quiero realizar el proyecto con un arduino nano qué velocidad en el AT+UART debo utilizar?
Hola, el baudrate es de 57600 o 19200.
Saludos.
Hola.
El baurate es de 57600 o 19200.
Saludos.
El valor de las resistencias es de 330 Ohms y 220 Ohms?
Asi es!
Sería de gran ayuda que pudieras hacer un tutorial igual a éste, ahora mostrando como subir un sketch a Arduino por Internet, en lugar de Bluetooth. Saludos.
Hola buen día, desafortunadamente es un tema un poco más complejo, puesto que un bootloader con capacidades de red es algo pesado, seguramente usará más memoria de programa y RAM que el bootloader USB. Puedes buscar “bootloader TFTP para arduino” (o en ingles) para darte una idea.
Saludos.
Me encanto demasiado este post!! Lo hice y funcionó genial. Y vaya que es RAPIDO!! no noté la diferencia realmente. Te felicito por un post lleno de calidad. Yo no creía que el capacitor era importante pero comprobe que sin el no sirve. Use un electrolítico de 1uf. ¿Por qué es necesario el capacitor?
Hola.
Me da gusto que te haya servido. El capacitor existe para que el micro no se quede en reset, ya que el pin “status” del bluetooth permanece en bajo mientras hay una conexión. El capacitor permite que se genere un estado bajo temporal, el cual desaparece del pin del reset a medida que se carga dicho capacitor, permitiendo que el pin de status esté en estado bajo y el de reset retorne a alto.
Espero haberme explicado.
Amigo con esto después de haber cargado el programa lo empieza a correr sin ningún problema, ¿No afecta si en el mismo código (programa) utilizas el Bluetooth para controlar el Arduino? Pues hay proyectos donde es así y para hacerle una modificación tenemos que abrir todo para poder cargar el nuevo sketch y con esto se podría sólo enviar el nuevo código aunque sea más lento pero lo hará y ya no habría la necesidad de desmontar toda la carcasa.
Gran post! Saludos
Hola. No afecta en nada al programa y comienza a ejecutarse tan pronto se carga, si se puede utilizar el bluetooth para controlar el arduino, la unica limitante es que el programa que escribas debe utilizar el puerto serie a la misma velocidad que el bootloader (115200 baudios). Otra limitante es que el arduino se resetea cada vez que se abre el puerto serie bluetooth. Si tu aplicación puede lidiar con estas dos condiciones entonces te funciona perfecto para sustituir el cable y dejar de desmontar la carcasa para programar.
Ah, no me ha quedado claro lo del reinicio igual hoy en la tarde puede que lo haga, Pero eso sería cada vez que se conecte ¿No? Digamos, *Lo enciendo* se conecta y se reinicia (?) Pero queda conectado (?) Otra cosa no importa si la energía de alimentación de ellos es externa
Es el mismo reinicio que se nota al abrir el monitor serial con el arduino conectado por cable. No importa si se alimenta externo, funciona igual.