引言使用分布式系统的控制器时,通常必须重新启动控制器。 使用Arduino IDE控制台让客户重新启动不是很方便,因为对于每种类型的控制器,都必须配置(或检查)板的类型和COM端口号,这项工作应由熟悉IDE的人员执行,并且并非每个客户都想知道系统是内置的在Arduino控制器上。
在这项工作中,我们考虑了使用单独的命令并通过批处理文件下载控制器(Atmega328和Atmega32u4上的Arduino以及兼容的Teensy控制器)的选项,而无需使用IDE。
USB COM通信板Arduino的布置通过安排串行通信通道,Arduino板可分为带有USB-UART转换器的板和带有支持USB通讯而无需外部转换器的微控制器的板。 第一个包括基于
Atmega328微控制器的Arduino UNO,Arduino NANO,Arduino Mini,Arduino UNO以太网,Arduino UNO WiFi板。 第二个是带有
Atmega32u4控制器的Arduino Leonardo,Arduino Micro,Arduino Yun Mini,Arduino Industrial 101,Arduino Leonardo以太网板[1]。
使用avrdude.exe下载Arduino控制器(Atmega328)可以使用
avrdude.exe将
hex文件下载到Arduino控制器。 该程序是IDE控制台程序包的一部分,例如Arduino版本1.8.5。 avrdude.exe加载程序由
cmd或
Command Prompt实用程序启动,如图1所示启动。
图1 运行命令提示符实用程序的示例。要获取编写命令以将
十六进制代码加载到计算机上的Arduino控制器中的示例,请完成以下序列。
•连接Arduino
•下载Arduino IDE
•从菜单>工具>板>中选择一个Arduino板类型
•从菜单>工具>端口>中选择板上的COM端口。
•在“首选项”选项卡中设置上传标志:Arduino IDE菜单>“文件”>“首选项”>在“上载期间显示详细输出”
•启动菜单>草图>上载
•下载完成后,在Arduino IDE控制台的输出窗口中,使用
avrdude查找命令,该命令看起来像这样:
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
要使用命令提示符实用程序执行
avrdude命令 ,必须在命令中输入双引号,如下所示。
"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
上面的命令可用于将
十六进制程序加载到带有Atmega328芯片和单独的USB-UART转换器的Arduino控制器中。 对于具有Atmega32u4且支持USB通信但没有硬件转换器的控制器,需要执行其他步骤来执行命令,下面在相应部分中进行了介绍。
由于已编译的程序-十六进制文件在IDE控制台打开时存储在临时文件文件夹中(.. \ AppData \ Local \ Temp \ ..),因此最好将十六进制文件复制到一个单独的文件夹中,复制avrdude.exe引导程序和avrdude.conf文件。
例如,将文件(图2)移动到C:\ ArdIDE文件夹后,带有更新文件访问路径的download命令采用表格形式,如图3所示。
图2 将引导加载程序和十六进制文件放在单独的文件夹中。
图3 使用命令提示符启动avrdude引导加载程序。使用teensy_post_compile.exe加载程序加载Teensy控制器安装
Teensy控制器的
Teensyduino软件之后,相应的控制器将显示在Arduino IDE控制台的设备列表中(请参见图4)。
图4 Arduino IDE控制台中的Teensy控制器列表。遵循上面为Arduino控制器显示的顺序,可以获得编写命令以将十六进制代码加载到
Teensy控制器中的示例。 在输出窗口中,您需要找到引导加载程序示例
-teensy_post_compile命令。 对于脱机下载,您可以将必要的文件复制到单独的文件夹,例如,如下所示。 文件teensy_post_compile,teensy_post_compile.exe和teensy.exe可以从由Teensy应用程序补充的Arduino软件包中获取。

以下是用于将十六进制文件Blink_1.ino和Blink_2.ino下载到通过USB集线器连接到计算机的两个Teensy控制器的命令示例。
"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
在这些条目中,集线器端口分别指定为usb:0 / 1A0000 / 0/1/1/1和usb:0 / 1A0000 / 0/1/1/2。
使用avrdude.exe下载Arduino控制器(Atmega32U4)Arduino UNO,Leonardo,Micro等开发板均基于ATmega32U4微控制器。 该微控制器具有内置的USB通道(全速USB 2.0),因此,将程序下载到其中与通过附加的USB-UART转换器加载到ATmega328微控制器中的考虑有所不同。
例如,设备管理器列表中列出了Arduino控制器的COM端口号。

当Arduino pro Micro控制器的虚拟COM端口打开时(任何传输频率为1200,...,9600,... 115200波特),控制器将重置并启动用户程序。 在MATLAB环境中,虚拟端口创建程序如下。
例如,关闭频率不等于1200波特的虚拟COM端口后,如下所示
fclose(s); delete(s); clear s
执行控制器的用户程序。
如下所示,在外部环境(例如,MATLAB)以12000波特的频率打开和关闭COM端口之后,将执行重置控制器和启动控制器引导加载程序的操作。
可以使用
mode命令执行相同的操作,如图5所示。
图5 在命令提示符中运行mode命令。 该命令将COM15端口的传输频率设置为1200波特,这将导致控制器复位和引导加载程序启动,并临时更改设备列表中控制器的虚拟端口号。关闭端口(fclose(s)命令)后,控制器加载程序会创建自己的虚拟(CDC)端口,该端口会在设备管理器列表中显示,并带有一个新的数字,大约持续8秒钟。

在存在新的虚拟端口(8秒)之后,具有原始编号的COM端口将返回到设备管理器列表。

在存在新的COM端口的过程中,可以使用Arduino IDE控制台的示例
avrdude命令通过该端口将用户程序下载到控制器。 在Arduino IDE中获取示例avrdude bootloader命令与上述Atmega328微控制器的选项类似。 重新启动板卡后,创建的虚拟端口将从设备列表中消失,并将具有原始编号的COM端口返回到列表中。
也可以通过将Arduino板的RST引脚连接到GND接地来启动引导程序。
如果控制器的自动重置(通过以1200波特的频率创建和禁用COM端口)不起作用,则可以通过Arduino IDE控制台按以下顺序执行基于ATmega32U4微控制器的设备(Arduino Leonardo,Arduino Pro Micro)的加载。
1.按住“重置”按钮(或将RST引脚接地)。 串行USB连接已断开。 控制器的COM端口从设备管理器列表中消失。
2.按下按钮

上传(Ctrl + U)Arduino IDE。 图6显示了此时设备管理器(左)和Arduino IDE(右)的初始状态
图6 设备管理器中的COM端口号,以及Arduino IDE控制台中程序编译过程的指示。3.等待状态指示器完成“ Compiling”的编译,然后继续下载“ Uploading”,如图7所示。
图7 设备管理器中新的临时COM端口的编号,以及Arduino IDE控制台中程序加载过程的指示。4.释放“复位”按钮(打开RST引脚)。 USB连接已恢复。 正在下载。 指示器以短语“完成上传”指示上传结束(请参见图8)
图8 设备管理器中的COM端口号,以及Arduino IDE控制台中程序加载完成的指示。通过批处理(命令)bat文件下载控制器离线加载(不使用Arduino IDE控制台)可以使用批处理(批处理)文件来完成。 用于将HEX文件下载到通过第一个集线器连接到计算机的两个Arduino Pro Micro控制器(Atmega32u4),通过第二个集线器连接到计算机的两个Teensy控制器以及Arduino UNO控制器(Atmega328)的批处理文件示例(带有bat扩展名)下面。 下载的HEX文件和为此所需的所有必要程序先前都放在共享文件夹中,如图9所示。
图9 用于离线加载5个控制器的文件夹的示例内容:Arduino Pro Micro(Atmega32u4),Teensy和Arduino UNO(Atmega328)
下面显示了用于离线加载五个控制器的mcLoad.bat批处理文件。 在加载Arduino Pro Micro控制器之前,添加了一秒钟的延迟(TIMEOUT / T 1 / NOBREAK)。 在加载第二个Teensy控制器之前,输入了2秒的延迟。 所有控制器完成加载后,Teensy.exe程序窗口关闭。
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
将控制器与USB线断开连接不会影响其余控制器的负载。
要将Arduino名称从设备管理器列表中排除,例如“ Arduino UNO(COMX)”,可以使用程序(例如RegOwnersahipEx)或Arduino控制器的硬件克隆(例如WAVGAT),在设备列表中将其表示为“ USB-SERIAL CH340(COMX)”。 )”。
书目清单1. Arduino开发板比较(表)
digitrode.ru/arduino-comparison.html2. Arduino Micro,
shop.pimoroni.com / products / arduino-micro3.博士 鲍勃·戴维多夫(Bob Davidov)。 技术系统中的计算机控制技术portalnp.ru/author/bobdavidov。