樂鑫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
  • 個人郵箱:xuhongv@yeah.net 24小時在線,有回必回復!
  • esp8266源代碼學習匯總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代碼學習匯總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp32
  • 關注下面微信公眾號二維碼,干貨多多,第一時間推送!

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM