问:为何OTA升级?
答:非常方便更新模块固件,实现最方便的更新固件的方法。
开始----》
1、环境:安信可IDE,模块8266
2、实现功能:OTA在线一键升级。
结果展示:(不知道为何图片上传不了一直提示失败??尾部看连接吧)
需要说明:写入flash之前必须先擦除指定扇区。准备中。。。
至此,模块收到升级指令--准备下载--擦除扇区--写入扇区--重启模块
注意关于flash分配问题,
服务端下载(我是IIS,搭建比较简单)不会搭建可以留言
在您已经备案的域名下直接新建个文件夹比如(updatebin放入user1.xxx.bin,user2.xxx.bin文 件和说明文件xxx.txt)
user1.4096.new.4.bin 这2个文件可以一样,也可以不一样;文件名不要一样。
user2.4096.new.4.bin 不同模块,或许名称不一样,当然可以重命名。一般默认。我的是4MBflash=32Mbit
比如您的模块运行的(boot引导的是user1,下载就下载user2,否则下载user1)
主要代码及总结
1、烧录事项(生成user1.xxx.bin时)找到项目根目录的makefile修改如下
软件:
主要代码参考:(2个文件 fotaxxx.c,fotaxxx.h)
1、升级调用时机(很多实例都是联网成功后即升级,我这是MQTT下发升级指令),我可以在内网任意一台电脑或手机对某个模块下发指令均可自动升级(当然需要知道一些列参数,有token身份验证等)
2、初始化---设置链接和断开回调函数-联网成功-设置发送接收回调-开始升级-升级过程回调-成功重启模块。
LOCAL void ICACHE_FLASH_ATTR
fota_upgrade_begin(struct espconn *pespconn, struct upgrade_server_info *server)
{
uint8 user_bin[30] = {0};//升级的文件名称
server->pespconn = pespconn;
os_memcpy(server->ip, pespconn->proto.tcp->remote_ip, 4);//ip(如果是域名此前DNS解析后传过来)
server->port = OTA_SERVER_PORT;//升级的端口(如果http即80)其他端口请设置(配置文件user_config.h)port
//可加个版本号的判断是否需要升级
server->check_cb = fota_upgrade_rsp;//升级过程回调*****
server->check_times = 120000;//120秒(此值视网络环境好坏定,建议一般不少于20秒)
if (server->url == NULL) {
server->url = (uint8 *)os_zalloc(1024);//分配http连接头 空间
}
//注意事项(如果当前运行的是user1.bin升级的文件名是user2的升级包文件,反之为user2.bin-->user1.xxxx.bin)
//文件名根据您的升级包文件修改(规范写法),注意根据flash大小,文件名会不同!!!!
//如果灵活,文件名通过参数传递过来也行
if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1) {//user1.bin时
os_memcpy(user_bin, "user2.4096.new.4.bin