Fazendo Download de Controladores sem Usar um Console IDE do Arduino

1. Introdução

Ao trabalhar com controladores de um sistema distribuído, você geralmente precisa reiniciar os controladores. O uso do console do Arduino IDE para reinicialização pelo cliente não é muito conveniente, pois para cada tipo de controlador é necessário configurar (ou verificar) o tipo de placa e número da porta COM, esse trabalho deve ser realizado por pessoal familiarizado com o IDE e nem todo cliente deseja saber que o sistema foi construído nos controladores Arduino.

Neste trabalho, consideramos as opções para carregar controladores (Arduino no Atmega328 e Atmega32u4 e um controlador Teensy compatível) em comandos separados e por meio de um arquivo em lotes, sem usar o IDE.

Arranjo das placas de comunicação USB COM Arduino

De acordo com a organização do canal de comunicação serial, as placas Arduino podem ser divididas em placas com um conversor USB-UART e placas com microcontroladores que suportam comunicação USB sem conversores externos. O primeiro inclui Arduino UNO, Arduino NANO, Arduino Mini, Arduino UNO Ethernet, placas WiFi Arduino UNO baseadas em microcontroladores Atmega328 . O segundo são as placas Arduino Leonardo, Arduino Micro, Arduino Yun Mini, Arduino Industrial 101 e Arduino Leonardo Ethernet com controladores Atmega32u4 [1].

Faça o download do Arduino Controller (Atmega328) com avrdude.exe

O download do arquivo hexadecimal no controlador Arduino pode ser feito com o avrdude.exe . Este programa faz parte do pacote do console IDE, por exemplo, Arduino versão 1.8.5. O carregador avrdude.exe é iniciado pelo cmd ou pelo utilitário Prompt de Comando , iniciado conforme mostrado na Figura 1.


Figura 1 Um exemplo de execução do utilitário Prompt de Comando.

Para obter um exemplo de gravação de um comando para carregar código hexadecimal em um controlador Arduino no seu computador, conclua a seguinte sequência.

• Conecte o Arduino
• Faça o download do IDE do Arduino
• Selecione um tipo de placa Arduino no menu> Ferramentas> Placa>
• Selecione a porta COM na placa no menu> Ferramentas> Porta>
• Defina o sinalizador de upload na guia Preferências: menu IDE do Arduino> Arquivo> Preferências> Mostrar saída detalhada durante> upload
• Menu Iniciar> Esboço> Upload
• Após a conclusão do download, na janela de saída do console IDE do Arduino, localize o comando com avrdude , semelhante a, por exemplo, o seguinte:

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i 

Para executar o comando avrdude com o utilitário Prompt de Comando, as aspas duplas devem ser inseridas no comando, conforme mostrado abaixo.

 "C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/<b>avrdude</b>" -"CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i 

O comando acima pode ser usado para carregar programas hexadecimais em um controlador Arduino com um chip Atmega328 e um conversor USB-UART separado. Para controladores com Atmega32u4 que suporta comunicação USB sem um conversor de hardware, são necessárias etapas adicionais para executar o comando, descrito abaixo na seção correspondente.

Como o programa compilado - o arquivo hexadecimal é armazenado na pasta de arquivos temporários enquanto o console do IDE está aberto (.. \ AppData \ Local \ Temp \ ..), é melhor copiar o arquivo hexadecimal em uma pasta separada, copiar o arquivo de inicialização avrdude.exe e o arquivo avrdude.conf .

Após mover os arquivos (Figura 2), por exemplo, para a pasta C: \ ArdIDE, o comando de download com os caminhos de acesso a arquivos atualizados assume o formato, conforme mostrado na Figura 3.

imagem
Figura 2 Colocando o carregador de inicialização e o arquivo hexadecimal em uma pasta separada.

imagem
Figura 3 Ativando o carregador de inicialização avrdude com o Prompt de Comando.

Carregamento do controlador Teensy com o carregador teensy_post_compile.exe
Após a instalação do software Teensyduino dos controladores Teensy , os controladores correspondentes aparecem na lista de dispositivos do console IDE do Arduino (consulte a Figura 4).

imagem
Figura 4 Lista de controladores Teensy no console do Arduino IDE.

Um exemplo de gravação de um comando para carregar código hexadecimal em um controlador Teensy pode ser obtido seguindo a sequência mostrada acima para os controladores Arduino. Na janela de saída, você precisa encontrar a amostra do carregador de inicialização - o comando teensy_post_compile . Para download offline, você pode copiar os arquivos necessários para uma pasta separada, por exemplo, como mostrado abaixo. Os arquivos teensy_post_compile, teensy_post_compile.exe e teensy.exe podem ser obtidos no pacote Arduino, complementado pelo aplicativo Teensy.

imagem

Abaixo estão exemplos de comandos para o download de arquivos hexadecimais Blink_1.ino e Blink_2.ino para dois controladores Teensy conectados a um computador através de um hub USB.

 "C:\TnsIDE/teensy_post_compile" -file=Blink_2.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy 

 "C:\TnsIDE/teensy_post_compile" -file=Blink_1.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy 

Nessas entradas, as portas do hub são designadas como usb: 0 / 1A0000 / 0/1/1/1 e usb: 0 / 1A0000 / 0/1/1/2.

Faça o download do Arduino Controller (Atmega32U4) com avrdude.exe

As placas Arduino UNO, Leonardo, Micro etc. são baseadas no microcontrolador ATmega32U4. Este microcontrolador possui um canal USB interno (velocidade máxima USB 2.0), portanto, o download de programas nele difere do carregamento considerado nos microcontroladores ATmega328 por meio de um conversor USB-UART adicional.

O número da porta COM do controlador Arduino está listado na lista de gerenciadores de dispositivos, por exemplo.

imagem

Quando a porta virtual do controlador Arduino pro Micro é aberta (com qualquer frequência de transmissão de 1200, ..., 9600, ... 115200 baud), o controlador é redefinido e o programa do usuário é iniciado. No ambiente MATLAB, o programa de criação de porta virtual é o seguinte.

 % create port. s=serial('COM15','Baudrate',9600); % 115200 fopen(s); 

Depois de fechar a porta COM virtual com uma frequência diferente de 1200 baud, por exemplo, como mostrado abaixo

 fclose(s); delete(s); clear s 

O programa do usuário do controlador é executado.

A redefinição do controlador e a inicialização do carregador de inicialização do controlador são realizadas após abrir e fechar a porta COM com uma frequência de 12000 baud pelo ambiente externo, por exemplo, MATLAB, como mostrado abaixo.

 % create port. s=serial('COM15','Baudrate',1200); % 115200 fopen(s); pause(1.5); fclose(s); delete(s); clear s 

A mesma operação pode ser executada com o comando mode , como mostra a Figura 5.

imagem
Figura 5 Executando o comando mode no prompt de comando. O comando define a frequência de transmissão da porta COM15 para 1200 baud, o que faz com que o controlador seja redefinido e o carregador de inicialização seja iniciado e também altera temporariamente os números da porta virtual do controlador na lista de dispositivos.

Após fechar a porta (comando fclose (s)), o carregador do controlador cria sua própria porta virtual (CDC), que aparece na lista do gerenciador de dispositivos com um novo número por cerca de 8 segundos.

imagem

Após o tempo de existência da nova porta virtual (8 segundos), a porta COM com o número original é retornada à lista de gerenciador de dispositivos.

imagem

Durante a existência da nova porta COM, através dela, o programa do usuário pode ser baixado para o controlador usando o comando avrdude de amostra do console IDE do Arduino. A obtenção de um comando de amostra avrdude bootloader em um IDE do Arduino é semelhante à opção acima para microcontroladores Atmega328. A porta virtual criada desaparece da lista de dispositivos após a reinicialização da placa e a porta COM com o número original é retornada à lista.

O gerenciador de inicialização também pode ser iniciado conectando o pino RST da placa Arduino ao terra GND.
Se a redefinição automática do controlador (através da criação e desativação da porta COM a uma frequência de 1200 baud) não funcionar, o carregamento de dispositivos (Arduino Leonardo, Arduino Pro Micro) com base no microcontrolador ATmega32U4 poderá ser executado no console IDE do Arduino na seguinte sequência.

1. Pressione e segure o botão “Reset” (ou provoque um curto-circuito no pino do RST). A conexão USB serial está desconectada. A porta COM do controlador desaparece da lista de gerenciador de dispositivos.

2. Pressione o botão imagem Carregar (Ctrl + U) IDE do Arduino. A Figura 6 mostra o estado inicial do gerenciador de dispositivos (à esquerda) e do IDE do Arduino (à direita) neste momento
imagem
Figura 6 O número da porta COM no gerenciador de dispositivos e uma indicação do processo de compilação do programa no console do Arduino IDE.

3. Aguarde até que o indicador de status termine de compilar “Compilando” e continue com o download de “Uploading”, como mostra a Figura 7.

imagem
Figura 7 O número da nova porta COM temporária no gerenciador de dispositivos e uma indicação do processo de carregamento do programa no console do Arduino IDE.

4. Solte o botão “Reset” (abra o pino RST). A conexão USB é restaurada. Download em andamento. O indicador indica o final do upload com a frase Upload feito (veja Figura 8)

imagem
Figura 8 O número da porta COM no gerenciador de dispositivos e uma indicação da conclusão do carregamento do programa no console do Arduino IDE.

Fazendo Download de Controladores através de um Arquivo Bat em Lote (Comando)

O carregamento offline (sem usar o console IDE do Arduino) pode ser feito usando um arquivo em lote (lote). Um exemplo de arquivo em lote (com a extensão bat) para baixar arquivos HEX para dois controladores Arduino Pro Micro (Atmega32u4) conectados ao computador pelo primeiro hub, para dois controladores Teensy conectados ao computador pelo segundo hub e ao controlador Arduino UNO (Atmega328) abaixo. Os arquivos HEX baixados e todos os programas necessários para isso foram colocados anteriormente na pasta compartilhada mostrada na Figura 9.

imagem
Figura 9 Exemplo de conteúdo de uma pasta para carregamento offline de 5 controladores: Arduino Pro Micro (Atmega32u4), Teensy e Arduino UNO (Atmega328)

O arquivo em lote mcLoad.bat para carregamento offline de cinco controladores é mostrado abaixo. Um atraso de um segundo (TIMEOUT / T 1 / NOBREAK) é adicionado antes de carregar os controladores Arduino Pro Micro. É inserido um atraso de 2 segundos antes de carregar o segundo controlador Teensy. Depois que todos os controladores terminam de carregar, a janela do programa Teensy.exe é fechada.

 echo OFF echo UPLOAD: Arduino Pro Micro 1 mode COM42 BAUD=12000 TIMEOUT /T 1 /NOBREAK avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM45 -b57600 -D -Uflash:w:micro.ino.hex:i echo UPLOAD: Arduino Pro Micro 2 mode COM43 BAUD=12000 TIMEOUT /T 1 /NOBREAK avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM44 -b57600 -D -Uflash:w:micro.ino.hex:i echo UPLOAD: Arduino UNO avrdude -Cavrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w: BlinkUNO.ino.hex:i echo UPLOAD: Teensy 1 "C:\mcLOAD/teensy_post_compile" -file=Blink_1_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy REM Delay 2 seconds: TIMEOUT /T 2 /NOBREAK echo UPLOAD: Teensy 2 "C:\mcLOAD/teensy_post_compile" -file=Blink_2_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy REM Close Teensy.exe taskkill /f /IM Teensy.exe 

Desconectar o controlador da linha USB não afeta o carregamento dos demais controladores.

Para excluir o nome do Arduino da lista de gerenciadores de dispositivos, por exemplo, “Arduino UNO (COMX)”, você pode usar programas, por exemplo, RegOwnersahipEx ou clones de hardware de controladores Arduino, por exemplo, WAVGAT, que é indicado na lista de dispositivos como “USB-SERIAL CH340 (COMX ) ".

Lista bibliográfica

1. Comparação de placas Arduino (tabela) digitrode.ru/arduino-comparison.html
2. Arduino Micro, shop.pimoroni.com/products/arduino-micro
3. Dr. Bob Davidov. Tecnologias de controle de computador em sistemas técnicos portalnp.ru/author/bobdavidov.

Source: https://habr.com/ru/post/pt437360/


All Articles