ESP8266模组SDK开发之远程固件升级

1. FOTA

FOTA(Firmware Over-The-Air)移动终端的空中下载软件升级,指通过云端升级技术,为具有连网功能的设备:例如手机、平板电脑、便携式媒体播放器、移动互联网设备等提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过FOTA进行云端升级,完成系统修复和优化


ESP8266远程升级:ESP8266能通过网络远程更新固件,需要将编译生成的user1.bin和user2.bin放到服务器上。可以使用用户自己的服务器,也可以使用乐鑫官方提供的免费服务器

  • 使用用户自己的服务器,比较简单,将新的固件放到服务器的路径下,ESP8266使用http get的方式下载新的固件写到FLASH里面,然后重启运行新的固件
  • 使用乐鑫官方提供的免费服务器,较复杂一些,需要遵循一定的规则,首先要从乐鑫官网申请一个key(密匙),将这个密匙写到程序中,再将新的固件放到乐鑫的服务器上,然后填写一些和固件相关的信息,程序中也要有相关的部分。程序可参照官方实例ESP8266 IOT PLATFORM,文档可参考99CESP8266_FOTA_UPGRADE_CN.PDF

2. 升级代码功能开发

填充参数,调用如下函数即可实现固件升级,该函数定义在upgrade.c中

BOOL system_upgrade_start(struct upgrade_server_info *server)

参数upgrade_server_info的结构体定义如下:

struct Upgrade_server_info {struct sockaddr_in sockaddrin;   /* 存放固件的服务器地址 */upgrade_states_check_callback check_cb; /* 固件下载完成后的回调函数 */uint32 check_times;   /* 升级超时时间,单位:ms */uint8 pre_version[16];    /* 固件升级之前的版本 */uint8 upgrade_version[16];   /* 要升级的固件版本 */uint8 *url;   /* http请求报文,包含起始行和首部 */void *pclient_param;uint8 upgrade_flag;   /* 升级成功标志 */
};


除此之外,还需要编写执行升级函数和升级成功回调函数

//执行升级的函数,参数为固件存放路径
bool ExcuteUpgrade( char * FirmWareDownLoadPath );
//固件下载完成后的回调函数,检测upgrade_flag标志,判断升级是否成功
LOCAL void DeviceUpgradeRsp(void *arg);

3. FOTA功能实现

FOTA功能开发:在局域网内运行WebServer,将固件放到WebServer的目录下,使用网络调试助手建立TCP连接,触发ESP8266从WebServer上下载新固件,重启ESP8266后,运行新固件

实验步骤如下:

–> 在ESP8266_RTOS_SDK目录下新建upgrade文件夹,把httpserver实验中的httpserver目录下所有文件拷贝到该文件夹中

–> 将upgrade源码中的upgradefirmware.c文件拷贝到user目录下;该文件中主要实现了ExcuteUpgrade()和DeviceUpgradeRsp()函数

–> 将upgrade源码中的upgradefirmware.h文件拷贝到include目录下

–> 将upgrade文件夹拷贝到upgrade主目录下

–> 修改upgrade主目录下的Makefile,添加工程编译子目录upgrade,生成libupgrade.a静态库

–> 修改httpserver.c文件中的http任务代码

void ATaskHttpServer( void *pvParameters ){int iVariableExample = 0;int fd = -1;int cfd = -1;int NetTimeOnt = 2000;int ret;struct sockaddr_in ServerAddr;struct sockaddr ClientAddr;socklen_t ClientAddrlen = sizeof(struct sockaddr);char *Httpmsg;char *Sendmsg;STATION_STATUS StaStatus;do{StaStatus = wifi_station_get_connect_status();vTaskDelay(100);}while(StaStatus != STATION_GOT_IP);fd = socket(PF_INET,SOCK_STREAM,0);if(fd == -1){printf("get socket fail!\n");vTaskDelete(NULL);return;}setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,&NetTimeOnt,sizeof(int));memset(&ServerAddr,0,sizeof(ServerAddr));ServerAddr.sin_family = AF_INET;ServerAddr.sin_addr.s_addr = INADDR_ANY;ServerAddr.sin_port = htons(SERVERPORT);ServerAddr.sin_len = sizeof(ServerAddr);if(bind(fd,(struct sockaddr*)&ServerAddr,ServerAddr.sin_len) != 0){       printf("bind socket fail!\n");vTaskDelete(NULL);return;}if(listen(fd,5) != 0){printf("listen socket fail!\n");vTaskDelete(NULL);return;}Httpmsg = (char*)zalloc(sizeof(char)*1000);for(;;){        cfd = accept(fd,&ClientAddr,&ClientAddrlen);if(cfd != -1){            printf("HttpClient accept\n");ret = recv(cfd,Httpmsg,1000,0);if(ret > 0){if( strncmp( Httpmsg , "UpgradeFirmware:" , 16 ) == 0 ) {if( ExcuteUpgrade( (char *)&Httpmsg[16] ) == true ){send( cfd , "Upgrade is Excuted!\r\n" , strlen( "Upgrade is Excuted!\r\n" ) , 0 );}else{send( cfd , "Upgrade fail!\r\n" , strlen( "Upgrade fail!\r\n" ) , 0 );}}}else{printf("HttpClient data is no!\n");}}close(cfd);}free(Httpmsg);vTaskDelete( NULL );
}

–> 在user_main.c文件中的user_init()函数下添加如下代码

user_init(void){printf("SDK version:%s\n", system_get_sdk_version());if(system_upgrade_userbin_check() == UPGRADE_FW_BIN1)printf("user1 is runing!\n");elseprintf("user2 is runing!\n");wifi_set_opmode(STATION_MODE);struct station_config *config = (struct station_config *)\zalloc(sizeof(struct station_config));sprintf(config->ssid,SSID);sprintf(config->password,PASSWORD);wifi_station_set_config(config);free(config);wifi_station_set_auto_connect(TRUE);HttpServer_init();xTaskCreate(ATaskLed, "LED", 256, NULL, 2, NULL);
}

–> 在ESP8266编译器中完成两次编译,生成use1.4096.new.4.bin和use2.4096.new.4.bin两个bin文件

将上面生成的两个bin文件拷贝到webserver文件夹中,并改名为user1.bin和user2.bin

使用webserver软件将webserver文件夹设置为服务器根目录

将use1.4096.new.4.bin文件烧写到ESP8266中,打开串口助手,打印出user1正在运行

PC端建立tcp客户端,并连接到ESP8266的IP地址;发送 “UpgradeFirmware:http://PC端IP地址” 即可开启远程升级;注意要取消发送新行

升级完成后,从打印信息可以看出,user2正在运行,表示固件升级成功


WiFi开发|ESP8266模组SDK开发之FOTA相关推荐

  1. WiFi开发|ESP8266模组SDK开发之Station和AP连接

    ESP8266模组SDK开发之Station和AP连接 WiFi是由无线接入点AP(Access Point) .站点(Station)等组成的无线网络. STA:Station(站点),每个连接到无 ...

  2. WiFi开发|ESP8266模组SDK开发之SNTP协议

    ESP8266模组SDK开发之SNTP协议 1. NTP和SNTP NTP 是网络时间协议(Network Time Protocol),是用来同步网络设备(如计算机.手机)的时间的协议 SNTP由N ...

  3. WiFi开发|ESP8266模组SDK开发项目之智能开关

    智能开关项目 1. 智能开关 智能开关由WiFi模组和继电器组成:本实例中利用ESP8266模组作为一个TCP Server,通过STA模式将ESP8266连接到路由器中:PC或者手机连接到相同的路由 ...

  4. WiFi开发|ESP8266模组AT指令开发二

    ESP8266模组AT指令开发二 1. 基于STM32的AT指令开发 ESP8266可以使用官方提供的SDK来进行开发,也可以直接利用官方提供的固件直接使用AT指令配置模块使用.在ESP8266模组A ...

  5. 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

    实现的功能: l  APP控制月球灯 l  本地月球灯控制 l  APP控制"大白"颜色,实现各种颜色变身 l  门状态传感器状态APP显示 l  网络状态指示灯,连接服务器长亮, ...

  6. 涂鸦WIFI模组方案(模组 SDK)

    摘自:涂鸦智能模组 SDK 开发系列课程 地址:https://www.bilibili.com/video/BV1Kq4y1o728?p=1 摘自:涂鸦智能模组SDK开发系列课程--Wi-Fi接入 ...

  7. 涂鸦智能模组SDK开发系列课程——涂鸦IoT平台介绍(二)

    使用涂鸦Wi-Fi模组和涂鸦Wi-Fi&Bluetooth LE双模模组进行产品开发主要有三种不同的方式进行开发: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品 ...

  8. 智能温湿度计原型设计-BLE 模组 SDK 开发

    智能温湿度计原型设计-BLE 模组 SDK 开发 概况 温湿度传感器是一款常见的智能家居设备,通过温湿度传感器采集温度和湿度,用户可以通过 App 以温湿度为触发条件设置智能场景控制家电. 设想一下, ...

  9. ESP32串口转WiFi双天线ESP32-S模组

    ▌ESP32小模块 1.外置管脚功能图 安信可原厂直销 WiFi+蓝牙模块ESP32串口转WiFi双天线ESP32-S模组 2.自动下载电路 参考下载电路分析 ESP8266专题-ESP8266自动下 ...

最新文章

  1. Linux块设备概念和列出块设备命令学习
  2. 【公开课】“有三说深度学习”上线
  3. git rebase(变基)—— Git 学习笔记 19
  4. android中的websocket 应用
  5. 使用jfreechart来创建一个简单的饼图
  6. kettle连接数据mysql查_Kettle连接MySQL报错的解决方法
  7. ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用
  8. MySQL基础知识系统学习
  9. 微信小程序template模板使用
  10. 老罗锤子手机公布会,我感到深深地愧疚
  11. ug打开服务器文件保存不了,UG编程时突然提示保存不了,你该怎么办,看这里...
  12. 快速移除PDF复制到WORD中的换行符
  13. hublider配置php环境(wamp、phpstudy,php工具箱...)
  14. 阿里Java技术架构师教你如何写好你的技术简历,附简历模板、学习资料
  15. 20182319彭淼迪 2019-2020-1 《数据结构与面向对象程序设计》实验一报告
  16. 【Nodejs】使用http.request批量下载MP3,发现网络文件大于1000K时下载文件为0K
  17. 燕十八-PHP公益培训-学习
  18. macbook电脑如何通过ssh连接群晖nas?
  19. FastQC使用与结果详细解读
  20. 从0到一开发微信小程序(6)—小程序常用API

热门文章

  1. 华为鸿蒙系统支持谷歌地图,华为鸿蒙系统支持安卓应用吗
  2. 使用Mybatis实现点菜功能
  3. gba开发工具_GBA开发工具包
  4. 从“咖啡智能”整车系统看长城汽车的未来野心
  5. 酷播云H5播放器倍速播放功能
  6. IMU惯性测量单元学习与初始对准理论知识学习---2
  7. imageNet2015,港中大汤晓鸥教授团队超越谷歌破互联网物体检测世界纪录
  8. 全球229家独角兽公司里中国占33家
  9. 在windows下另存为Ascii文件和unicode文件的问题
  10. A2-WiNG 两作SLG RPG汉化补丁