arduino远程刷新(烧录)固件
来源:互联网 发布:understand mac 破解 编辑:程序博客网 时间:2024/06/07 03:36
在车间部署了十几个网络版的温湿度采集器(基于arduino的),这些采集器分布在不同的地方,现在要更新一下上面的固件。最笨的方法是一个一个地取下来,插到电脑的USB接口上进行固件更新,这样做显然很麻烦。能不能直接通过网络(以太网)进行固件的更新呢?
我查了一下资料,发现网上只有通过蓝牙更新的固件的,但是没有以太网的。低功耗的商用的蓝牙,其传输距离只有10米,且那个方法必须在板上进行手动复位。我研究了一下,发现了通过以太网刷新固件的方法,现跟大家分享一下。
1、原理:
(1)通过串口转wifi模块发送一个指令,让arduino复位。
(2)然后开始传送编译好的二进制文件,arduino在重启的时候,会将这个文件写入到flash中。avr固件的烧录原理请见:http://news.eeworld.com.cn/mcu/2013/0608/article_13291.html
2、硬件:
Arduino uno + 串口转wifi模块。
线路连接:2号IO口串联一个550k电阻接到reset上。
我所用的Wifi模块是在这家店买的:
http://item.taobao.com/item.htm?spm=a1z09.2.9.41.0CxtvI&id=36815717425&_u=blmt59h45fc
3、所需要工具软件:
(1)avrdude。版本013.9.18,在附件的bin文件夹下。这个程序可用来将编译好的二进制文件刷写(烧录)到arduino中,它需要用到串口。
(2)VSPM虚拟串口服务器,下载地地址:http://www.kinghwawin.com/DownloadShow.asp?ID=40。
这个软件的作用是将TCP服务器虚拟成本地的串口,用于跟avrdude配合使用,即提供一个串口给avrdude使用。下载完毕之后,请按默认路径安装。启动该程序,然后新建一个虚拟串口,将串口号设置为“COM256”。如图所示:
(3)TCP/UDP调试工具。此工具的作用是给远端的arduino控制器发送复位指令。
4、arduino代码
void setup(){ Serial.begin(115200); pinMode(2,OUTPUT); digitalWrite(2, HIGH); // switch off} void loop(){ if (Serial.available() > 0) { char val; val = Serial.read(); // read serial data if(val == 'r') { digitalWrite(2, LOW); // 将reset管脚的电平拉低50ms,起到复位的作用 delay(50); digitalWrite(2, HIGH); // } }}
注:arduino中必须有以上的这些代码才能被远程刷新。请将这些代码嵌入到你的arduion中,然后用usb线刷新到arduino中。
5、在arduino编辑器中找到编译好的固件(.hex文件)
默认情况下,arduino会在后台将源码进行编译成二进制文件,然后下载到arduino控制器中,这个过程不会有提示。
可以通过一些方法来显示编译烧录的过程,并且提取hex文件,详细方法见链接:http://see.sl088.com/wiki/Arduino_%E6%8F%90%E5%8F%96hex
这个步骤完成之后,我们手头上就有了一个后缀名为hex的二进制文件。
附件中的bin文件夹下,有一个名为的Blink.cpp.hex文件,它是官方提供的例子编译之后的二进制文件,可以拿这个来做测试。
6、手工烧录
手工烧录是直接使用avrdude来进行烧录。avrdude是一个控制台程序,需要在命令行下进行操作。
(1)cd进附件中的bin文件夹下。
(2)使用TCP/UDP调试工具连接到TCP服务器,发送指令r,将arduino复位。
(3)马上执行以下命令:avrdude.exe avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM256 -b115200 -D -Uflash:w:Blink.cpp.hex:i
至于为什么知道是这个命令,我是通过分析arduino编辑器的编译及下载输出得出的,以下是arduino的编译下载时的输出(过程),请注意第43行。
7、自动烧录
我用C#写了一个工具,将上面的手工操作给封装起来。功能包括启动VSPM虚拟串口服务器,复位远端的arduino uno,执行avrdude指令。详见的代码见附件。
8、附件下载
点击下载
- arduino远程刷新(烧录)固件
- arduino 蓝牙SSP远程烧录
- Arduino的程序烧录
- 怎样烧录D-duino(Arduino&NodeMCU)
- 用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
- Arduino - Pro mini 烧录方法 ( FT232RL )
- arduino pro mini烧录问题
- Arduino IDE 烧录 ESP8266教程
- Arduino pro mini 烧录程序
- Arduino nano的bootloader文件烧录
- ESP8266 ESP01 Arduino IDE 烧录配置
- ESP8266 透传模式 固件(含jcson版)烧录
- Android烧录的固件都是怎么生成的
- 使用OpenOCD烧录STM32-F411RE固件
- esp8266固件刷新
- Arduino烧录bootloader,并作为ISP进行下载程序
- 使用Visual Studio 2013开发Arduino固件
- 机械臂——arduino、marlin固件、printrun软件
- Logger---使你的日志更简单漂亮强大!
- 互不侵犯King
- hadoop的mapreduce编程模型中GroupingComparator的使用
- Spark Streaming基本概念
- CSS强制文本不换行、溢出处理
- arduino远程刷新(烧录)固件
- 字符串及字符串常量池
- Nginx rewirte规则详解-转于老僧系列Nginx
- nginx location的正则匹配规则
- MySQL数据库5.6版本首次安装Root密码问题
- Android官方架构组件介绍之LifeCycle
- ubuntu下使用rst2pdf转换成pdf中文文档及在ubuntu下安装新字体
- HDU 2099
- F. Madness Codeforces 822F 贪心 构造