IntroduccionAl trabajar con controladores de un sistema distribuido, a menudo tiene que reiniciar los controladores. El uso de la consola Arduino IDE para reiniciar por el cliente no es muy conveniente, ya que para cada tipo de controlador es necesario configurar (o verificar) el tipo de placa y los números de puerto COM, este trabajo debe ser realizado por personal familiarizado con el IDE, y no todos los clientes desean saber que el sistema está construido en controladores Arduino.
En este trabajo, consideramos las opciones para descargar controladores (Arduino en Atmega328 y Atmega32u4 y un controlador Teensy compatible) en comandos separados y a través de un archivo por lotes, sin usar el IDE.
Disposición de placas de comunicación COM USB ArduinoAl organizar el canal de comunicación en serie, las placas Arduino se pueden dividir en placas con un convertidor USB-UART y placas con microcontroladores que admiten la comunicación USB sin convertidores externos. Los primeros incluyen Arduino UNO, Arduino NANO, Arduino Mini, Arduino UNO Ethernet, placas WiFi Arduino UNO basadas en microcontroladores
Atmega328 . Los segundos son Arduino Leonardo, Arduino Micro, Arduino Yun Mini, Arduino Industrial 101, placas Arduino Leonardo Ethernet con controladores
Atmega32u4 [1].
Descargar Arduino Controller (Atmega328) con avrdude.exeLa descarga del archivo
hexadecimal al controlador Arduino se puede hacer con
avrdude.exe . Este programa es parte del paquete de consola IDE, por ejemplo, Arduino versión 1.8.5. El cargador avrdude.exe se inicia mediante la utilidad
cmd o
Command Prompt , que se inicia como se muestra en la Figura 1.
Figura 1 Un ejemplo de ejecución de la utilidad del símbolo del sistema.Para obtener un ejemplo de cómo escribir un comando para cargar código
hexadecimal en un controlador Arduino en su computadora, complete la siguiente secuencia.
• Conectar Arduino
• Descargue el IDE de Arduino
• Seleccione un tipo de placa Arduino en el menú> Herramientas> Placa>
• Seleccione el puerto COM en la placa desde el menú> Herramientas> Puerto>
• Configure el indicador de carga en la pestaña Preferencias: menú Arduino IDE> Archivo> Preferencias> Mostrar salida detallada durante> carga
• Menú de inicio> Boceto> Cargar
• Una vez completada la descarga, en la ventana de salida de la consola Arduino IDE, busque el comando con
avrdude , se ve, por ejemplo, así:
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 ejecutar el
comando avrdude con la utilidad Símbolo del sistema, se deben ingresar comillas dobles en el comando, como se muestra a continuación.
"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
El comando anterior se puede usar para cargar programas
hexadecimales en un controlador Arduino con un chip Atmega328 y un convertidor USB-UART separado. Para los controladores con Atmega32u4 que admite la comunicación USB sin un convertidor de hardware, se requieren pasos adicionales para ejecutar el comando, que se describen a continuación en la sección correspondiente.
Desde el programa compilado: el archivo hexadecimal se almacena en la carpeta de archivos temporales mientras la consola IDE está abierta (.. \ AppData \ Local \ Temp \ ..), es mejor copiar el archivo hexadecimal en una carpeta separada, copiar el cargador de arranque avrdude.exe y el archivo avrdude.conf allí .
Después de mover los archivos (Figura 2), por ejemplo, a la carpeta C: \ ArdIDE, el comando de descarga con las rutas de acceso de archivos actualizadas toma la forma, como se muestra en la Figura 3.
Figura 2 Colocar el gestor de arranque y el archivo hexadecimal en una carpeta separada.
Figura 3 Lanzamiento del gestor de arranque avrdude con símbolo del sistema.El controlador Teensy se carga con el cargador teensy_post_compile.exeDespués de instalar el software
Teensyduino de los controladores
Teensy , los controladores correspondientes aparecen en la lista de dispositivos de la consola Arduino IDE (consulte la Figura 4).
Figura 4 Lista de controladores Teensy en la consola Arduino IDE.Se puede obtener un ejemplo de cómo escribir un comando para cargar código hexadecimal en un controlador
Teensy siguiendo la secuencia que se muestra arriba para los controladores Arduino. En la ventana de salida, debe encontrar el ejemplo del gestor de arranque: el comando
teensy_post_compile . Para la descarga sin conexión, puede copiar los archivos necesarios en una carpeta separada, por ejemplo, como se muestra a continuación. Los archivos teensy_post_compile, teensy_post_compile.exe y teensy.exe pueden tomarse del paquete Arduino complementado por la aplicación Teensy.

A continuación se muestran ejemplos de comandos para descargar archivos hexadecimales Blink_1.ino y Blink_2.ino a dos controladores Teensy conectados a una computadora a través de un concentrador 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
En estas entradas, los puertos del concentrador se designan como usb: 0 / 1A0000 / 0/1/1/1 y usb: 0 / 1A0000 / 0/1/1/2.
Descargar Arduino Controller (Atmega32U4) con avrdude.exeLas placas Arduino UNO, Leonardo, Micro, etc. están basadas en el microcontrolador ATmega32U4. Este microcontrolador tiene un canal USB incorporado (USB 2.0 de alta velocidad), por lo tanto, la descarga de programas en él difiere de la carga considerada en los microcontroladores ATmega328 a través de un convertidor USB-UART adicional.
El número de puerto COM del controlador Arduino aparece en la lista del administrador de dispositivos, por ejemplo.

Cuando se abre el puerto COM virtual del controlador Arduino pro Micro (con cualquier frecuencia de transmisión de 1200, ..., 9600, ... 115200 baudios), el controlador se reinicia y se inicia el programa de usuario. En el entorno MATLAB, el programa de creación de puerto virtual es el siguiente.
Después de cerrar el puerto COM virtual con una frecuencia no igual a 1200 baudios, por ejemplo, como se muestra a continuación
fclose(s); delete(s); clear s
Se ejecuta el programa de usuario del controlador.
El reinicio del controlador e inicio del cargador de arranque del controlador se realiza después de abrir y cerrar el puerto COM con una frecuencia de 12000 baudios por el entorno externo, por ejemplo, MATLAB, como se muestra a continuación.
La misma operación se puede realizar con el comando de
modo , como se muestra en la Figura 5.
Figura 5 Ejecutando el comando de modo en Símbolo del sistema. El comando establece la frecuencia de transmisión para el puerto COM15 a 1200 baudios, lo que hace que el controlador se reinicie y se inicie el cargador de arranque, y también cambia temporalmente los números de puerto virtual del controlador en la lista de dispositivos.Después de cerrar el puerto (comando fclose (s)), el cargador del controlador crea su propio puerto virtual (CDC), que aparece en la lista del administrador de dispositivos con un nuevo número durante aproximadamente 8 segundos.

Después del tiempo de existencia del nuevo puerto virtual (8 segundos), el puerto COM con el número original se devuelve a la lista del administrador de dispositivos.

Durante la existencia del nuevo puerto COM, a través de él se puede descargar el programa de usuario al controlador utilizando el
comando avrdude de muestra
de la consola Arduino IDE. Obtener un comando de ejemplo del gestor de arranque avrdude en un IDE de Arduino es similar a la opción anterior para los microcontroladores Atmega328. El puerto virtual creado desaparece de la lista de dispositivos después de reiniciar la placa y el puerto COM con el número original se devuelve a la lista.
El cargador de arranque también se puede iniciar conectando el pin RST de la placa Arduino a tierra GND.
Si el restablecimiento automático del controlador (mediante la creación y desactivación del puerto COM a una frecuencia de 1200 baudios) no funciona, la carga de dispositivos (Arduino Leonardo, Arduino Pro Micro) basados en el microcontrolador ATmega32U4 se puede realizar a través de la consola Arduino IDE en la siguiente secuencia.
1. Presione y mantenga presionado el botón "Reset" (o cortocircuite el pin RST a tierra). La conexión USB serie está desconectada. El puerto COM del controlador desaparece de la lista del administrador de dispositivos.
2. Presione el botón

Cargar (Ctrl + U) Arduino IDE. La Figura 6 muestra el estado inicial del administrador de dispositivos (izquierda) y el IDE Arduino (derecha) en este punto
Figura 6 El número de puerto COM en el administrador de dispositivos y una indicación del proceso de compilación del programa en la consola Arduino IDE.3. Espere hasta que el indicador de estado termine de compilar "Compilando" y continúe con la descarga de "Carga", como se muestra en la Figura 7.
Figura 7 El número del nuevo puerto COM temporal en el administrador de dispositivos y una indicación del proceso de carga del programa en la consola Arduino IDE.4. Suelte el botón "Restablecer" (abra el pin RST). Se restablece la conexión USB. Descarga en progreso. El indicador indica el final de la carga con la frase Carga finalizada (consulte la Figura 8)
Figura 8 El número de puerto COM en el administrador de dispositivos y una indicación de la finalización de la carga del programa en la consola Arduino IDE.Descargar controladores a través de un archivo bat de lotes (comando)La carga sin conexión (sin usar la consola Arduino IDE) se puede hacer usando un archivo por lotes (lote). Un ejemplo de un archivo por lotes (con la extensión bat) para descargar archivos HEX a dos controladores Arduino Pro Micro (Atmega32u4) conectados a la computadora a través del primer concentrador, a dos controladores Teensy conectados a la computadora a través del segundo concentrador y al controlador Arduino UNO (Atmega328) abajo Los archivos HEX descargados y todos los programas necesarios para esto se colocaron previamente en la carpeta compartida que se muestra en la Figura 9.
Figura 9 Contenido de ejemplo de una carpeta para la carga sin conexión de 5 controladores: Arduino Pro Micro (Atmega32u4), Teensy y Arduino UNO (Atmega328)
El archivo por lotes mcLoad.bat para la carga sin conexión de cinco controladores se muestra a continuación. Se agrega un segundo retraso (TIMEOUT / T 1 / NOBREAK) antes de cargar los controladores Arduino Pro Micro. Se ingresa un retraso de 2 segundos antes de cargar el segundo controlador Teensy. Una vez que todos los controladores hayan terminado de cargarse, la ventana del programa Teensy.exe se cierra.
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 el controlador de la línea USB no afecta la carga de los controladores restantes.
Para excluir el nombre Arduino de la lista del administrador de dispositivos, por ejemplo, "Arduino UNO (COMX)", puede usar programas, por ejemplo, RegOwnersahipEx, o clones de hardware de controladores Arduino, por ejemplo, WAVGAT, que se indica en la lista de dispositivos como "USB-SERIAL CH340 (COMX) ) ".
Lista bibliográfica1. Comparación de placas Arduino (tabla)
digitrode.ru/arduino-comparison.html2. Arduino Micro,
shop.pimoroni.com/products/arduino-micro3. Dr. Bob Davidov. Tecnologías de control informático en sistemas técnicos portalnp.ru/author/bobdavidov.