- 本系列博客學習由非官方人員 半顆心臟 潛心所力所寫,不做開發板。僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。
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
帶你飛、加群
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 都是安信可官方出品的,這里貼下對其主要的區別:
- ESP-01S 在電路設計上已經把 GPIO0、RST和En 引腳上拉,而 ESP-01 沒有;
- ESP-01S 天線區域右下角只有一個指示燈,ESP8266-01天線區域右下角有兩個指示燈。
- 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 開發環境,參考我之前的文章:
之后,我們下載一個穩定版分支的,自己去樂鑫倉庫下載吧!
而我本文采用的是:ESP8266_RTOS_SDK Pre-release v3.3-rc1
找到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.bin
和ota_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
- 關注下面微信公眾號二維碼,干貨多多,第一時間推送!