簡述
上手了一塊樂鑫科技官方推出的ESP32-S3-DevKitC-1開發闆,發現 ESP32-S3 的綜合性能較比前兩代有着非常明顯的提升,wifi與藍牙功能,更充足的外設擴充能力,可以看出其在未來物聯網開發應用中将占有更大的地位與應用場景。
micropython實作了大部分python 3 特性和文法,易學易上手,驗證程式效果無需編譯直接下載下傳進晶片運作。有python基礎的自然知道好用,沒python基礎的,上手難度也絕對遠低于其他程式設計語言,在開源社群有多年積累的豐富資源,代碼易讀性高,了解快,就如同python一樣擁有極強的生命力與應用價值。
micropython團隊在GitHub上的代碼維護是很積極的,晶片支援,功能更新,BUG修複,是以掌握自行編譯最新的micropython固件是很有必要的。
在此總結一番 micropython 開發環境的搭建,ESP32-S3 的固件編譯,燒錄的一整套流程,以便大家上手應用。
Linux
Linux系統目前對于 micropython 來說是必須的。
如果已經有在用的Linux系統就可直接進行後續步驟,如果正在使用Windows系統則推薦一條上手Linux最便利的路徑,安裝VMware虛拟機+Ubuntu系統。
其他上手Linux的方法多不勝數,各種虛拟機,各色Linux發行版本百花齊放,但若說目前最低門檻我認為就是這條,僅需在搜尋引擎裡搜尋 VMware Ubuntu 即可擷取很成熟的配置經驗與資源。
關于軟體本體及系統鏡像檔案建議直接從各自的官方網站上擷取,安全可靠。
esp-idf環境搭建
ESP32系列晶片的開發絕大部分都是經由樂鑫科技提供的SDK軟體開發工具包 esp-idf 來進行的, micropython 也需要應用此SDK。
可以直接參考樂鑫科技的 esp-idf中文快速入門指南 來搭建。
以下是簡要彙總。
首先需要在home目錄下建立一個檔案夾。
打開一個 Terminal 終端 輸入以下指令建立檔案夾:
mkdir -p ~/esp
進入這個檔案夾:
cd ~/esp
輸入以下兩個指令之中的一個,從github上克隆esp-idf 4.4到這個檔案夾裡。将
https
替換為
git
則有可能解決各種下載下傳失敗的問題,如何還是不行則需要再另尋他方,網絡疑難雜症容易使人頭疼腦熱:(
git clone -b release/v4.4 --recursive https://github.com/espressif/esp-idf.git
git clone -b release/v4.4 --recursive git://github.com/espressif/esp-idf.git
進入esp-idf檔案夾:
cd ~/esp/esp-idf
輸入以下指令安裝 ESP-IDF 使用的各種工具,比如編譯器、調試器、Python 包等,可以一次單獨隻為一個晶片型号配置,如
./install.fish esp32s3
,建議直接用以下指令全部安裝,一勞永逸:
./install.sh all
如果遭遇網絡問題,多次嘗試無果後,也可以試試替換下載下傳源到 Espressif 下載下傳伺服器:
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh all
倉庫克隆和工具安裝都弄好後,在需要運作 ESP-IDF 的終端視窗運作以下指令即可,例如在micropython開始編譯之前就必須要使其運作起來:
. $HOME/esp/esp-idf/export.sh
運作後輸入指令
idf.py --help
可以檢視幫助,
idf.py --version
檢視目前版本,
idf.py --list-targets
檢查目前支援的晶片型号。
在Ubuntu中為esp-idf建立快捷指令
用指令來打開檔案并修改對于不熟悉linux的生手來說還需要多加學習和适應,我們可以利用好 Ubuntu 比較完善的圖形化操作界面,如同在windows裡修改檔案一般來修改linux裡的檔案,為esp-idf建立快捷指令。
在Ubuntu桌面打開home檔案夾(一般它的名字是你的使用者名),在右上角的選項欄中開啟顯示隐藏檔案。
輕按兩下這個
.bashrc
檔案,即可用文本編輯器打開它。
在其最後一行,輸入以下指令并儲存檔案。
# get run esp-idf
alias get_idf='. /home/wind/esp/esp-idf/export.sh'
打開一個終端,輸入以下指令使之生效:
source ~/.bashrc
以後在任何終端中輸入以下指令即可運作ESP-IDF:
get_idf
這比前文提到的要容易記憶很多,也可以自行替換成任何與其他指令不沖突的指令文本來使用。
micropython環境搭建
可以直接參考GitHub:micropython/port/esp32中的描述來搭建,以下是中文簡述,不想看英文的可以參考一下。
克隆micropython倉庫到本地,我選擇在
esp
檔案夾中再建立一個
mpy
檔案夾來放置。
在一個終端中打開要放置micropython的檔案夾:
cd ~/esp/mpy
輸入以下指令克隆倉庫:
git clone git://github.com/micropython/micropython
進入micropython目錄中:
cd micropython/
先輸入以下指令編譯一下 mpy-coress ,這是為了建構MicroPython交叉編譯器,以便将一些内置腳本預編譯為位元組碼,這隻需要做一次:
make -C mpy-cross
再打開ESP32的目錄:
cd ports/esp32
輸入以下指令初始化子子產品,這隻需要做一次:
make submodules
固件編譯
确認ESP-IDF已經運作後,在
ports/esp32
目錄中可以立即輸入以下指令嘗試編譯一個預設設定的ESP32的micropython固件出來:
make
一切順利的話會在此目錄中出現一個
build-GENERIC
檔案夾,且内涵一個
firmware.bin
檔案,這就是适用于ESP32晶片的micropython固件。
如果并不順利,需要先檢查ESP-IDF是否啟動,檢查ESP-IDF是否是最新版,檢查ESP-IDF所用相關工具是否都安裝完備,極大部分問題都是由于ESP-IDF或其相關工具出問題所導緻的。
選擇linux系統也有考慮這部分原因,ESP-IDF在linux系統中配置起來最輕松穩定不容易産生各種疑難雜症。
确認可以正常編譯後,就可以開始做ESP32-S3晶片的固件編譯了。
在
ports/esp32
目錄可以找到一個
Makefile
檔案,前文中
make
指令就是直接執行其内部的指令,打開它進行編輯。
第6行設定要編譯的型号,此處改成
GENERIC_S3
即可設定為ESP32S3了,此時儲存檔案後就可以去終端用
make
指令開始編譯。
關于此
Makefile
檔案,我們可以稍微再了解得細緻一些,以便後續自行修改與使用。
第6行
BOARD ?=
指向的是
ports/esp32/boards
目錄下的檔案夾名稱,打開後可以看到已經有不少micropython官方支援的闆型,在
BOARD ?=
後面填入對應闆型的檔案夾名即可在終端使用
make
指令編譯适用于對應闆型的固件。
第12行
PORT ?=
用于設定将要燒錄固件的裝置接口。
第13行
BAUD ?=
用于設定波特率,這将改變燒錄速度,也可能對燒錄穩定性有影響。
建議在第33行下面增加一行代碼,這将在每次使用
make
指令編譯時,在最開始将應用ESP-IDF的
idf.py menuconfig
指令打開工程配置視窗,友善調整晶片的各項功能,在以後熟悉修改工程配置檔案後可以删除此行,如果編譯時不需要修改配置也可以直接按一下鍵盤的
esc
鍵退出,後續将自動完成編譯。
idf.py $(IDFPY_FLAGS) menuconfig
第44行後面的代碼比較容易直覺了解,例如在終端中使用
make clean
指令等同于
idf.py fullclean
指令,完全删除工程檔案夾内的所有檔案。
固件燒錄
對于ESP32-S3晶片,目前ESP-IDF尚且不支援通過晶片的USB接口來将固件燒錄進flash,暫不知道為什麼擦除flash卻可以,推測後期ESP-IDF的更新會支援,屆時本文也将更新相應内容。
如果是使用樂鑫科技官方的FLASH下載下傳工具 flash_download_tool 在Windows PC平台則可以直接通過ESP32-S3晶片USB接口将固件燒錄進flash。
無論用什麼方法,在對flash進行操作前,要保證晶片進入固件下載下傳模式,對于ESP32-S3-DevKitC-1開發闆,進入固件下載下傳模式的按鍵順序是:
按住BOOT鍵,按一下RESET鍵并松開,松開BOOT鍵。
其他裝置或是出現的問題則需要參考ESP-IDF程式設計指南中關于燒錄過程中可能遇到的問題的描述或者是晶片手冊上的描述。
以下将簡述兩種燒錄方法。
Ubuntu終端make指令燒錄
目前在Ubuntu系統中使用終端指令的方法暫且隻支援通過ESP32-S3晶片的UART序列槽燒錄固件到flash。通常需要一個 ch340 或 cp2102 晶片将UART序列槽轉換為USB與系統連接配接,ESP32-S3-DevKitC-1開發闆自帶一個,通過其UART轉USB的接口與PC的USB接口連接配接即可。
燒錄前要确認一下系統是否識别到裝置,通常需要先在VMware虛拟機中做好USB連接配接的相關設定才行。
在不接入待燒錄的裝置的情況下,先在終端中輸入以下指令檢視目前所有裝置:
ls /dev/tty*
接入裝置,再輸入此指令,正常的話可以看到多出一個USB裝置,如果僅有接入這一個裝置,通常就是
ttyUSB0
,在
Makefile
檔案中無需修改接口名,若是别的就需要做出相應修改并儲存。
确認目前終端裡ESP-IDF運作中,且固件編譯已經完成,ESP32-S3晶片處于固件下載下傳模式。
先用擦除指令擦除目前晶片的flash,再用燒錄指令将固件燒錄進flash中。
make erase
make deploy
如果遇到權限問題,使用如下指令擷取此USB接口的權限:
sudo chmod 777 /dev/ttyUSB0
Windows FLASH下載下傳工具燒錄
将
firmware.bin
檔案從其對應的工程檔案夾中拷貝出來,放到Windows系統下的檔案夾裡。VMware虛拟機拷貝檔案很容易,在Ubuntu裡選擇檔案并複制,再到Windows的檔案夾裡粘貼即可将其拷貝出來,可以修改一下檔案名以便記錄是用于什麼晶片,在什麼時候編譯的。
打開樂鑫科技的FLASH下載下傳工具,選擇晶片,選擇燒錄接口的模式,這裡就可以選擇USB,使用晶片自帶的usb接口燒錄,如果是ESP32-S3-DevKitC-1開發闆就直接用USB口,而不用UART轉接出的USB。
在燒錄前先确認ESP32-S3晶片是否已經設定為固件下載下傳模式,ESP32-S3晶片是否已被Windows識别,可以到裝置管理器中檢視對應序列槽名,如果沒有則需要先排除一下是否自動連接配接到虛拟機的系統裡了,如果有則要斷開其與虛拟機的連接配接。
在晶片處于固件下載下傳模式的條件下,修改COM接口為對應的接口,添加強件,對于ESP32-S3晶片要設定flash起始位址為
0x0
,具體見下圖。
可以修改BUAD波特率加快下載下傳速度,但對穩定性可能有影響,建議以460800為參考值進行設定。
設定好後,先點選ERASE按鈕擦除flash,擦除完成後再點選START燒錄固件進flash中。
簡單驗證固件是否有效
推薦使用 PuTTY 序列槽調試軟體,無論在Linux或是Windows中都可以下載下傳使用,操作便捷。
在Linux系統如Ubuntu的終端裡使用如下指令安裝PuTTY:
sudo apt-get install putty
在終端輸入
putty
指令即可打開,也可直接在應用程式清單找到它。
在Windows系統中,可以在PuTTY官網下載下傳到64位的
putty.exe
檔案,運作即可,無需安裝。
PuTTY設定方法如圖:
需要注意前面編譯的micropython固件預設将調試資訊輸出在晶片的USB接口而不是UART串行接口,是以此時需要将直連晶片的USB接口與PC連接配接。
在Linux中,此時的裝置接口名稱應為
ttyACM0
,而在Windows中則是一個COM端口,具體名稱需檢視裝置管理器再對于填入。
Speed 一定要設定為 115200 ,這是晶片設計決定的。
點選Open即可打開一個視窗,一般此時并無資訊,建議用組合按鍵
ctrl + D
軟體重新開機micropython,可看到如下資訊。
這就是micropython的 REPL互動式解釋器 。
可以直接在此處鍵入micropython代碼,例如:
print("Hello Wind~")
如果沒有得到類似上圖的資訊,亂碼或是無響應,則需要回頭去檢查編譯燒錄等各項設定流程是否有差錯了。
2021/12/10更新: 将esp-idf 克隆連結指向4.4分支,解決目前micorpython編譯時所依賴的esp-idf中的部分檔案在master 5.0分支中被移除的問題。
對本文有任何疑問的地方,歡迎留言提問,不一定及時回複,但總會回複的~