本文讲解的是如何使用最简单的方法来实现esp8266的无线升级,同时支持远程服务器和本地服务器升级.
下面是我用esp8266的sdk实现在线升级的整个流程(点击链接下载 源代码 )。
1. 需要准备的软件工具:
1.1 搭建本地服务器(或者远程服务器)
1.2 我使用的本地服务器是一个轻量级的小型服务器EasyWebserver1.9,好处是可以直接把需要升级的两个bin文件放在服务器的主目录就ok,不需要添加其它PHP代码,也不用安装WAMP软件,更不需要做其它各种繁琐配置, 使用起来极其简单,个人非常推荐使用哦 (点击链接下载)
1.3 ESP_DOWNLOAD_TOOL_V2.4 烧录工具,相信做8266开发的都不陌生,我就不一一介绍了.
需要注意的是烧录地址:以下是我自己的烧录文件对应的烧录地址(4M flash,不同的flash大小烧录地址不一样,请注意查看自己的模块flash);
boot_v1.6.bin ---- 0x00000
user1.4096.new.4.bin----0x01000 //也就是user1.bin
blank.bin----0x3FE000
esp_init_data_default.bin----0x3FC000
esp8266的升级流程:
1.生成两个bin文件:
2. 通过./gen_misc.sh或者gen_misc.bat 编译都可以生成我们需要的bin文件,区别在于生成user1.4096.new.4.bin的时候step2选择1,生成user2.4096.new.4.bin的时候step2选择2.具体生成两个bin的其它步骤选项这里不再介绍,其它网友写的很清楚了.
3.将生成的两个bin文件放在EasyWebserver的主目录下.
4. 第一次通过ESP_DOWNLOAD_TOOL_V2.4 烧录user1.4096.new.4.bin到esp8266模块.(当然包括其它上面讲到的必要烧录文件)
后面需要烧录程序可以通过无线升级方式,升级速度杠杠的.
以上只是讲解大概流程,具体操作还需要网友自己.
下面的源代码是我写的两个函数,里面封装了OTA相关的API接口,拿来可以直接使用.
经本人反复测试,无线更新后的程序稳定运行.
说明:下载的资料包里是具体详细操作步骤,下载资料后请先仔细阅读教程和说明,然后再做无线升级.
注意:
1. 在我提供的源代码中,升级更新检测时间是10s ,就是这条语句 update->check_times = 10000;
个人后期测试发现10s的升级时间如果网络不好容易造成升级未完成的情况, 所以建议设置成30s,就是把源代码里的语句改成
update->check_times = 30000;
2. 补充说明
case OTA:
{
os_printf("ready to upgrade\r\n");
char serverip[]={192,168,0,***}; //这里是本地服务器的ip地址,也可以是远程服务器ip地址.
uint16_t port = 807 ; //本地端口或者远程服务器端口,看自己使用选择
//文件路径,即easywebserver的bin文件所在的具体文件夹
//写法:对于整个文件路径为F:\esp_upgrade (esp_upgrade文件夹下是bin文件) ---> char path[] = "esp_upgrade/" ;
//假设整个文件路径为F:\cygwin\ESP8266_NONOS_SDK\bin\upgrade (upgrade文件夹下是bin文件)---> char path[] = "upgrade/";
char path[] = "esp_upgrade/" ; //本次测试的文件路劲
ota_start_Upgrade( 2 , serverip, port, path) ;//无线升级开始,其中第一个参数表示版本号,
//升级新版本一般要大于旧版本,填写具体版本号根据自己的需求,这里随意写了2.
break;
}