É possível fazer o upload de um programa para o arduino via bluetooth?
Quem utiliza Arduino nos seus projectos, mais dia menos dia irá ter uma duvida que gostaria de ter esclarecida.
É possível fazer o upload de um programa para o arduino via wireless?
R.: Sim, de todo testado, comprovado, e explicado neste post.
Para começar informo que neste caso, o via Wireless trata-se de uma ligação Bluetooth, os testes foram feito utilizando um arduino UNO r3, e um Arduino Nano 328, utilizando o Windows XP, e o Arduino IDE 1.0.5, será ainda necessário outro programa o VSPE (Virtual Serial Port Emulation), estes são alguns dos requisitos que me dará muito gosto explicar, e outros passam por Handshake, Reset, e Watchdog (a serio cão de guarda), Sketch, Bootloader, entre outros termos estrangeiros que definem algumas operações.
Para começar a resolver este problema resolvi colocar a questão de outra maneira. Como é que o upload se processa e, o que que me impede de fazer o upload de programas para o arduino via wireless.
O upload de software para o Arduino normalmente é feito via cabo FTDI que não é mais que um conversor USB serie, e é através dos pinos 0 e 1 (que são também a porta serie do arduino TX e RX) que a informação circula.
Posto isto e visto que podemos ter uma porta serie com a maioria dos dispositivos bluetooth presentes nos nossos notebook´s fica a questão. O que me impede de ligar um modulo bluetooth na porta serie do arduino emparelhar com o PC e solicitar ao Arduino IDE de enviar o firmware para essa porta?
Bem na verdade o que impede isto ser assim tão simples e linear, são fundamentalmente 3 aspectos.
- Primeiro no meu caso utilizo módulos Bluetooth HC-05, que a semelhança de outras possibilidades no mercado parece que não dispõem de linha DTR (digo parece porque ainda não tenho a certeza, se alguém souber mais sobre o DTR nos módulos HC-05 agradeço que me informe). Sem DTR não se consegue fazer o reset ao Arduino de modo o Bootloader iniciar e por conseguinte dar inicio a sequência de upload de firmware para o Arduino.
- Qual as características que a ligação serie necessita para comunicar com o arduino na sequência de upload?
- O Arduino IDE é capaz de enviar o upload para uma porta serie, até aqui tudo certo, mas há um senão que é, se estabelecer a ligação serie Bluetooth do PC ao arduino via Windows o IDE vai dizer que esta porta está a ser usada e impede o upload.
Se dominarmos estas questões temos o problema resolvido e o upload do firmware a funcionar em pleno.
Ponto 1 Reset do Arduino
Estão relacionadas entre si existem varias hipóteses de solução, sempre em mente que o necessário é fazer um reset ao Arduino de modo o bootloader arrancar.
Isto pode ser conseguido de varias formas.
Por Hardware
- Carregando no Botão de reset do Arduino resolve as questões no ponto 1 e ponto 2. Para o upload iniciar devera carregar no botão de reset do arduino e um segundo depois de aparecer “Uploading” no IDE largar o botão de reset.
Por Software
- Brevemente vou dedicar um post a este assunto mas para já deixo 2 links com informação útil sobre este tema.
Resetting the arduino through software for fun and profit by aRiver’s pad
Arduino tips ticks and techniques Bootloader by Adafruit
Ponto 2 Características da ligação serie estabelecida durante o upload de firmware.
Aqui basicamente o que há a saber é que o upload é feito desde o IDE via porta serie que pode ser seleccionada pelo utilizador e um aspecto fundamentar é que essa comunicação e feita com um Baund Rate 57600bps Stop Bit 1 e Parity None.
Como tal teremos de configurar o modulo BT HC_05 com estas características, e até já fiz um post sobre isso que pode ser lido aqui.
Para modulo diferentes destes o procedimento é algo parecido mas recomendo consultarem o datasheet do respectivo modulo e obter referencias sobre o modo AT e respectivos comandos.
Ponto 3 Configurações do Arduino IDE
Aqui reside o problema do normal funcionamento do IDE, que reside em testar a utilização da porta serie em questão neste caso a porta serie associada ao Bluetooth.
Em Linux não sei ao certo o funcionamento tanto bluetooth como do IDE, mas no windows o que se passa é o seguinte.
Por um lado temos de fazer a ligação da porta serie ao bluetooth do pc ao modulo via windows e por outro quando seleccionamos essa mesma porta para upload o IDE reporta que a porta serie em questão já está a ser utilizada.
A solução
Passa pela utilização do programa que indiquei acima o VSPE (Virtual Serial Port Emulation) e que pode ser descarregado gratuitamente aqui.
O truque aqui agora é o seguinte criar uma porta serie virtual, encaminhar todo o tráfego entre a porta serie do BT e esta porta serie virtual.
Desta maneira o IDE não se queixa do windows estar a utilizar a porta serie do BT e o upload é feito sem problemas.
Exemplo
Criei um Spliter onde utilizei como porta serie virtual a COM16 e redireccionei para a COM13 porta real do BT do PC, fiz o emparelhamento e a ligação pelo windows e “voilá” está pronto a fazer upload de novos sketch para o Arduino via bluetooth.