乐鑫esp8266学习rtos3.0笔记:仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件!


  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板。仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 Esp8266进阶之路: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 Esp8266进阶之路乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 Esp8266进阶之路细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 Esp8266进阶之路如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 Esp8266进阶之路乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 Esp8266进阶之路乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 Esp8266之rtos3.0笔记认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 Esp8266之rtos3.0笔记你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266之rtos3.0笔记 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 Esp8266之rtos3.0笔记 捋一捋微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 。
40、 Esp8266之rtos3.0笔记 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
41、 Esp8266之rtos3.0笔记 esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!
42、 Esp8266之rtos3.0笔记 我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!
43、 Esp8266之rtos3.0笔记 esp8266-12模块基于rtos3.0版本扫描周围获取附近可用的 Wi-Fi 热点路由器信息,同样适合esp32。
44、 Esp8266之rtos3.0笔记 整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。
45、 Esp8266之rtos3.0笔记 内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品。
46、 Esp8266之rtos3.0笔记 详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。
47、 Esp8266之rtos3.0笔记 无需外网,如何实现在本地局域网与控制端做数据交换的一些开发经验。
48、 Esp8266之rtos3.0笔记 迟来的1024程序员祝福,开源分享一个驱动 ds18b20 获取温度的工程。
49、 Esp8266之rtos3.0笔记 aliyun sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制。
50、 Esp8266之rtos3.0笔记 esp产品量产方案初入门之 如何从外部读取 csv 文件的数据,比如从代码读取外部文件阿里云三元组。
51、 Esp8266之rtos3.0笔记 体验下 Linux搭建 ESP8266_RTOS_SDK 3.0 最新环境的搭建和编译吧。
52、 Esp8266之rtos3.0笔记仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件 。

-------- 学习笔记持续更新,欢迎关注我…

很多人怎么联系我一起学习进步,下面打个小小公告:
玩转esp8266带你飞、加群QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32



前言

     最近在弄公司新项目,对ESP8266的各种需求已司空见惯,如今乐鑫官方对 二次开发ESP8266也有很多SDK版本了,从 2.2 到 2.1 、3.0 、3.3,以及最新分支开发版本,各种版本是否让你纠结我到底用哪个分支版本开发?

     个人建议:开发学习用 master 分支 ,开发产品用稳定版 3.3 或 3.1分支,如果稳定版 3.3 或 3.1分支无法满足您的开发使用,用 master 分支即可!

     最近接到一个客户的新需求,如何在 安信可 ESP-01S 的模块上面进行远程OTA 升级固件?一开始,我是直接参考我去年的一篇文章:

     再者说,群里也很多人问我 安信可模块ESP-01S如何二次开发,支持二次开发吗?仅仅1M的flash支持OTA升级吗?答案:可以的;


一、认识 ESP-01 和 ESP-01S 区别

     这里并不是为了带货写文章,太多人在群里问这个问题了,单纯想把这个文章分享出来给大家参考;

     ESP-01 和 ESP-01S 都是安信可官方出品的,这里贴下对其主要的区别:

  1. ESP-01S 在电路设计上已经把 GPIO0、RST和En 引脚上拉,而 ESP-01 没有;
  2. ESP-01S 天线区域右下角只有一个指示灯,ESP8266-01天线区域右下角有两个指示灯。
  3. ESP-01S背面有引脚说明,ESP-01背面有没有引脚说明。

在这里插入图片描述

  • 正面对比(左边是 ESP-01S,右边是 ESP-01 ):
    在这里插入图片描述
  • 背面对比(左边是 ESP-01S,右边是 ESP-01 ):
    在这里插入图片描述

二、调试接线

     因为其的用途主要是给自有MCU单片机通讯连接单片机,所以很少有人用它二次开发,可能烧录固件会考虑到其的接线,这里不再贴接线方式了,而我目前用的是 ESP-plog 连接器,这里再贴下其介绍链接:ESP-Prog 下载与调试板介绍,不仅仅可以有自动下载功能,还可以对 ESP32 断点调试哦!

    这里的分享,也是为了提高大家的开发效率,因为开发追求效率,也是提高老板对你的赏识;

     我的实物图:

在这里插入图片描述

     ESP-Prog 的 Program 接口 和 ESP-01S 的接线详情:

ESP-Prog ESP-01S 备注
ESP_TXD RX
ESP_RXD TX
IO0 IO0 必须接
VCC VCC 务必检查是否 3.3伏
GND GND
EN EN 可不接,01S 已经内部上拉

三、搭建环境和编译

3.1 环境搭建

     以上都是我目前的接线情况,如果您觉得麻烦,可以按照你方式来连线!确保接线完毕之后,极力推荐使用 Linux 开发环境,参考我之前的文章:

链接: 体验下 Linux搭建 ESP8266_RTOS_SDK 3.0 最新环境的搭建和编译吧。

     之后,我们下载一个稳定版分支的,自己去乐鑫仓库下载吧!

     而我本文采用的是:ESP8266_RTOS_SDK Pre-release v3.3-rc1

下载链接:https://github.com/espressif/ESP8266_RTOS_SDK/releases

    找到OTA升级的工程, examples/system/ota/native_ota/1MB_flash/new_to_new_no_old,之后我们面板设置他的下载方式:

     1、配置为 1M flash:

Serial flasher config  --->
    Flash size (2 MB)  --->
        (X) 1 MB

     2、SPI模式 配置为 DOUT:

Serial flasher config  --->
    Flash SPI Mode   --->  DOUT

     3、波特率改为 230400 ,可以提高下烧录速度!

Serial flasher config  --->
    Default baud rate   --->  230400 baud

     烧录配置如图所示:

在这里插入图片描述

     4、配置远程
在这里插入图片描述

3.2 编译

     1、 第一次跑3.3分支,请先擦一下模块, make flash,再编译:make ota生成固件!这时候,会生成四个固件:ota.ota.bin、ota.app1.bin、ota.app2.bin 和 ota.bin

     其关系为:

ota.app1.bin != ota.app2.bin != ota.ota.bin
ota.ota.bin = ota.app1.bin + ota.app2.bin

     2、烧录 make flash 或者 用烧录工具这样烧录:

固件 地址
ota_data_initial.bin 0xd000
bootloader.bin 0x0000
ota.bin 0x10000
partitions_two_ota.1MB.bin 0x8000

3.3 开启本地web服务器

     为了方便调试,我们可以用Python开启一个本地服务器,端口号为 8070 :

python -m SimpleHTTPServer 8070

     如下截图所示,可看到开启成功,并且得到局域网的地址 :192.168.31.48 ,这个是局域网内访问的本机设备,您在开发时候,你的电脑主机也会有所不同,请务必注意!
在这里插入图片描述

     我们需要把每次编译生成的 ota.ota.bin 固件放在web服务器即可,这里我编译了2个版本的固件(ota_v1.binota_v2.bin),并在打印上每个固件的版本,以区别是否远程升级成功。

     我们测试下web服务器是否开启成功?我们用手机加入本地局域网,之后用手机浏览器打开上述的IP地址和端口号:192.168.31.48:8070, 发现可以访问不报错即可!

     这时候,我们开始在源码修改下 web 服务器的配置,然后再 make ota 生成2个固件,放在web服务器里面,就如下图所示了:

//路由器ssid
#define EXAMPLE_WIFI_SSID "aiot_default"
//路由器的密码
#define EXAMPLE_WIFI_PASS "aiot_default123456789"
//web服务器的ip地址
#define EXAMPLE_SERVER_IP "192.168.31.48"
//web服务器的端口号
#define EXAMPLE_SERVER_PORT "8070"
//要请求的固件的路径和文件名
#define EXAMPLE_FILENAME "ota_v2.bin"

//自定义:当前工程的版本号
#define  VERSION_FW "version - 1.0"

//每次上电打印下固件版本号
 ESP_LOGW(TAG,  VERSION_FW );
  • 放置2个固件之后,再用手机浏览器访问,如图所示:
    在这里插入图片描述

3.4 现象

     首次上电,打印版本号为 version - 1.0 ,之后连接路由器,请求文件升级!来回升级哈哈!

load 0x40100000, len 7160, room 16 
tail 8
chksum 0x77
load 0x3ffe8408, len 24, room 0 
tail 8
chksum 0xce
load 0x3ffe8420, len 3540, room 0 
tail 4
chksum 0x85
I (43) boot: ESP-IDF v3.3-rc1-dirty 2nd stage bootloader
I (44) boot: compile time 17:36:54
I (44) boot: SPI Speed      : 40MHz
I (49) boot: SPI Mode       : DOUT
I (56) boot: SPI Flash Size : 1MB
I (62) boot: Partition Table:
I (67) boot: ## Label            Usage          Type ST Offset   Length
I (79) boot:  0 nvs              WiFi data        01 02 00009000 00004000
I (90) boot:  1 otadata          OTA data         01 00 0000d000 00002000
I (102) boot:  2 phy_init         RF data          01 01 0000f000 00001000
I (113) boot:  3 ota_0            OTA app          00 10 00010000 00070000
I (125) boot:  4 ota_1            OTA app          00 11 00080000 00070000
I (136) boot: End of partition table
I (143) esp_image: segment 0: paddr=0x00010010 vaddr=0x40210010 size=0x3e758 (255832) map
I (268) esp_image: segment 1: paddr=0x0004e770 vaddr=0x4024e768 size=0x08098 ( 32920) map
I (283) esp_image: segment 2: paddr=0x00056810 vaddr=0x3ffe8000 size=0x00590 (  1424) load
I (284) esp_image: segment 3: paddr=0x00056da8 vaddr=0x40100000 size=0x00a30 (  2608) load
I (295) esp_image: segment 4: paddr=0x000577e0 vaddr=0x40100a30 size=0x05854 ( 22612) load
I (317) boot: Loaded app from partition at offset 0x10000
I (344) system_api: Base MAC address is not set, read default base MAC address from EFUSE
I (351) system_api: Base MAC address is not set, read default base MAC address from EFUSE
phy_version: 1155.0, 6cb3053, Nov 11 2019, 17:31:08, RTOS new
I (407) phy_init: phy ver: 1155_0
I (410) reset_reason: RTC reset 1 wakeup 0 store 0, reason is 1
W (415) ota: version - 1.0
W (419) ota: EXAMPLE_WIFI_SSID  aiot_default
W (427) ota: EXAMPLE_WIFI_PASS  aiot_default123456789
W (436) ota: EXAMPLE_SERVER_IP  192.168.31.48
W (443) ota: EXAMPLE_SERVER_PORT  8070
W (450) ota: EXAMPLE_FILENAME  ota_v2.bin
I (478) ota: Setting WiFi configuration SSID aiot_default...
I (478) ota: Starting OTA example... @ 0x4022cf48 flash 1MB
I (494) ota: Running partition type 0 subtype 16 (offset 0x00010000)
I (3576) wifi: state: 0 -> 2 (b0)
I (3616) wifi: state: 2 -> 3 (0)
I (3657) wifi: state: 3 -> 5 (10)
I (3661) wifi: pm start, type: 2
I (5311) event: sta ip: 192.168.31.12, mask: 255.255.255.0, gw: 192.168.31.1
I (5316) ota: Connect to Wifi ! Start to Connect to Server....
I (5321) ota: Server IP: 192.168.31.48 Server Port:8070
I (5468) ota: Connected to server
I (5471) ota: Connected to http server
W (5474) ota: Connect to http server send :
GET /ota_v2.bin HTTP/1.0
Host: 192.168.31.48:8070
User-Agent: esp-idf/1.0 esp32


I (5489) ota: Send GET request to server succeeded
I (5496) ota: Writing to partition subtype 17 at offset 0x80000
I (10486) ota: esp_ota_begin succeeded
I (10489) ota: Totoal OTA number 2 update to 1 part
I (10498) ota: parse Content-Length:630976, ota_size 315488
I (13078) ota: Have written image length 692
I (13104) ota: Have written image length 1716
I (13114) ota: Have written image length 2740
I (13123) ota: Have written image length 3764
I (13135) ota: Have written image length 4788
... ...  ....

I (16765) ota: Have written image length 311236
I (16775) ota: Have written image length 312260
I (16783) ota: Have written image length 313284
I (16794) ota: Have written image length 314308
I (16801) ota: Have written image length 315028
I (16807) ota: Have written image length 315488
I (16813) ota: Connection closed, all packets received
I (16822) ota: Total Write binary data length : 315488
I (16827) esp_image: segment 0: paddr=0x00080010 vaddr=0x40280010 size=0x3e758 (255832) map
0x40280010: _flash_cache_start at ??:?

I (16919) esp_image: segment 1: paddr=0x000be770 vaddr=0x402be768 size=0x08098 ( 32920) map
I (16935) esp_image: segment 2: paddr=0x000c6810 vaddr=0x3ffe8000 size=0x00590 (  1424) 
I (16941) esp_image: segment 3: paddr=0x000c6da8 vaddr=0x40100000 size=0x00a30 (  2608) 
I (16951) esp_image: segment 4: paddr=0x000c77e0 vaddr=0x40100a30 size=0x05854 ( 22612) 
I (16971) esp_image: segment 0: paddr=0x00080010 vaddr=0x40280010 size=0x3e758 (255832) map
0x40280010: _flash_cache_start at ??:?

I (17059) esp_image: segment 1: paddr=0x000be770 vaddr=0x402be768 size=0x08098 ( 32920) map
I (17075) esp_image: segment 2: paddr=0x000c6810 vaddr=0x3ffe8000 size=0x00590 (  1424) 
I (17081) esp_image: segment 3: paddr=0x000c6da8 vaddr=0x40100000 size=0x00a30 (  2608) 
I (17091) esp_image: segment 4: paddr=0x000c77e0 vaddr=0x40100a30 size=0x05854 ( 22612) 
I (17163) ota: Prepare to restart system!
I (17166) wifi: state: 5 -> 0 (0)
I (17169) wifi: pm stop
E (17173) ota: Disconnect reason : 8

四、FAQ 笔记

1、这个OTA的升级原理是什么?

     命令“ make ota”将生成3个固件:“ xxx(项目名称).app1.bin”,“ xxx(项目名称).app2.bin”和“ xxx(项目名称).ota.bin”。您仅应将“ xxx(项目名称).ota.bin”上传到您的OTA服务器,并让应用下载它并且运行。

     xxx.app1.bin用于下载到OTA_0分区,xxx.app2.bin用于下载到OTA_1分区。如果ESP8266的闪存大于“ 1 MB”,或者您选择了“复制OTA”功能,则xxx.app1.bin = xxx.app2.bin = xxx.ota.bin 。

     否则,如果主板的闪存大小为1 MB,而您未选择“复制OTA”功能,则 xxx.app1.bin != xxx.app2.bin!= xxx.ota.bin,xxx.ota.bin = xxx.app1.bin + xxx.app2.bin。
     因此,ESP8266的falsh大小配置对于OTA升级非常重要。

     基于以上理论,我们可以看到对于ESP8266 + 2MB flash(或更大),app1和app2相同,可以直接下载而不用区别。但是对于ESP8285(ESP8266 + 1MB闪存),ota0(app1)和ota1(app2)是不同的,您需要在FOTA期间区分应该下载哪一个,并将其下载到哪个位置。

    现在,示例代码中的方法是将app1和app2合成为“ xxxx(项目名称).ota.bin”。FOTA时,根据下载位置,仅将目标应用程序(app1或app2)写入闪存;而另一部分将被丢弃。

2、连接web服务器失败?

       检查您的PC是否可以通过IP ping ESP8266,并确保menuconfig中的IP,AP和其他配置设置正确。如果您的web服务器是在外网,请检查是否允许ip地址访问?检查PC上是否有阻止进入连接的防火墙软件。

参考文章:https://www.cnblogs.com/easyidea/p/11525197.html

有任何疑问联系本人下方邮箱或加qq群或文章留言,不要私信我,我已经屏蔽私信!多多支持!


另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群QQ群,不喜的朋友勿喷勿加:434878850
  • 个人邮箱:[email protected] 24小时在线,有回必回复!
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

在这里插入图片描述

发布了165 篇原创文章 · 获赞 920 · 访问量 93万+

猜你喜欢

转载自blog.csdn.net/xh870189248/article/details/105269059