MicroPython 是 Python 編程語言的輕量級版本,專為編程微控制器、SOC 和其他嵌入式系統設備而開發。它的創建是為了使開發人員能夠利用Python的“易于學習和使用”的特性進行嵌入式系統開發。使用Python現在是大多數學校的主要介紹性語言,并且它是世界上最流行和廣泛使用的編程語言之一,通過 micro-python,許多 Python 用戶能夠規避與使用 C 和 C++ 相關的壓力陡峭的學習曲線對微控制器進行編程。他們可以立即開始使用他們多年來獲得的知識來訪問低級硬件,就像使用其他語言一樣。Micro-python 特別是 Python 3 的精簡實現,因此與 python 3 的語法兼容。
雖然 MicroPython 在嵌入式系統開發方面的普及程度還不如 C 和 C++,但隨著越來越多的微控制器、IDE 和開發板支持它的使用,它的普及程度一直在增加。在今天的教程中,我們將研究可以使用 MicroPython 為其開發固件的此類板之一。
對于今天的教程,我們將研究使用 MicroPython 開發 ESP32 的代碼。
我們將首先看看為什么 MicroPython 對 ESP32 有好處,并通過為 MicroPython 設置 ESP32 并在 ESP32 上使用 MicroPython 上傳閃爍草圖來工作。
為什么選擇 MicroPython?(MicroPython 與 Arduino C)
對 ESP32 進行編程的一種經過充分驗證、最簡單的方法是使用 Arduino IDE這意味著使用 Arduino 版本的 C 或 C++。幾十年來,C 和 C++ 一直是嵌入式系統開發中最流行的兩種語言,而 Arduino 版本的語言使它變得更加簡單,由于易于開發代碼,因此它在制造商和愛好者中很受歡迎。除此之外,Arduino 擁有世界上最大的技術社區之一,社區每天都會發布新庫、軟件修復、新板支持等。所有這些使它成為編程嵌入式系統板的強大工具。可以附加到 Arduino C 的唯一真正限制是它只能在 Arduino IDE 中工作。由于 IDE 受到限制并且缺少一些在開發大型代碼庫時可能真正有用的功能,因此 Arduino C 并不是最有效的。
另一方面,MicroPython相對較新。雖然它的用戶社區正在增長,隨著對更多平臺的支持被發布,它的實力無法與 Arduino 相提并論。從好的方面來說,MicroPython 本質上是 Python 的精簡版本,Python 是世界上最流行的編程語言之一,因此,任何 MicroPython 社區無法解決的問題都可以從一般的 Python 社區中汲取靈感。
除了社區支持外,MicroPython 還具有某些功能,使其高于 Arduino 類。REPL就是其中一項功能。REPL 代表讀取-評估-打印。此功能允許您連接到板并快速執行代碼,而無需編譯或上傳整個代碼。因此,您可以在開發代碼時測試代碼的每個部分。
無論您為您的項目選擇這兩個中的哪一個,請確保最適合您的。有了這些,讓我們開始使用 ESP32 和 MicroPython 構建 Blink 示例。
所需組件
要構建眨眼示例,我們將需要以下組件;
DOIT ESP32 DevKit v1 (1)
一個 LED (1)
100 歐姆電阻 (1)
跳線
面包板 (1)
您可以使用任何其他基于 ESP32 的開發板代替 DOIT ESP32 DevKit V1,并且您可以選擇使用板載 LED,這意味著您只需要 ESP32 開發板即可完成本教程。以前,我們使用 Arduino IDE 編程使 ESP32 LED 閃爍。
除了硬件組件,我們還需要像 Thonny IDE這樣的軟件
有關此軟件的更多信息將在本文后面討論。
原理圖
使用ESP32 和 MicroPython 來閃爍 LED項目的原理圖很簡單。你已經在 Blink 項目中看到過無數次了。如下圖所示連接組件。
后面的部分包含我們需要做的一些安裝和設置,以便能夠使用 MicroPython 輕松編程 ESP32。
使用 MicroPython 固件刷新 ESP32 板
我們需要做的第一件事是使用 MicroPython 固件刷新我們的 ESP32。此過程類似于使用 NodeMCU 固件刷新基于 ESP-12e 的板。
步驟1:
我們首先從MicroPython 下載頁面下載最新 MicroPython 固件的 bin 文件。您將不得不根據適合您的方式在 3 個主要選項之間進行選擇。
穩定的固件版本
每日固件構建
支持 SPIRAM 的每日固件構建
如果您剛開始使用 MicroPython,最好的選擇是使用穩定的固件版本。如果您是一名高級、經驗豐富的 MicroPython ESP32 用戶,并且希望密切關注開發并幫助測試新功能,那么我們提供每日構建。如果您的開發板支持 SPIRAM,您可以使用標準固件或支持 SPIRAM 的固件,在后一種情況下,您將可以訪問更多用于 Python 對象的 RAM。
一直向下滾動到您擁有 ESP32 板固件的位置,然后根據您使用的板類型選擇您想要的那個。
第2步:
下載完成后,下一步是使用固件刷新您的電路板。為此,您需要將主板置于引導加載程序模式,然后使用工具將固件從 PC 復制到主板。
將您的電路板置于引導加載程序模式的確切過程在很大程度上取決于特定的電路板,您需要參考其文檔了解詳細信息。幸運的是,大多數電路板都有一個 USB 連接器、一個 USB 串行轉換器以及以特殊方式連接的 DTR 和 RTS 引腳,因此部署固件應該很容易,因為所有步驟都可以自動完成。
對于 DOIT DevKit,您只需要在即將刷機時按下啟動按鈕即可。
要使用 MicroPython 固件刷新 ESP32,我們將使用esptool.py作為我們的復制工具。
esptool.py 需要在您的計算機上安裝 Python 2.7、Python 3.4 或更新的 Python。我們推薦使用Python 3.7.X,可以從Python 的網站下載。
安裝 Python 3 后,您可以轉到官方 esp存儲庫并下載最新的穩定版本 esptool.py 或打開終端窗口通過 pip 安裝它。
要通過 pip 安裝,請打開終端窗口并運行:
點安裝 esptool
如果上述方法不起作用,請將其修改為以下任何命令,然后重試。
pip3 install esptool
python -m pip install esptool
pip3 install esptool為我工作。安裝完成后,您的終端應如下圖所示。
您現在應該能夠通過在終端中輸入命令esptool.py來啟動 esptool。跑:
esptool.py
如果您的安裝順利,您應該會看到如下圖所示的一堆消息。
第 3 步:
為獲得最佳效果,建議先擦除設備的整個閃存,然后再安裝新的 MicroPython 固件。為此,請按住 ESP32 上的啟動/閃存按鈕并運行命令;
esptool.py --chip esp32 擦除閃存
一旦該過程開始,您就可以移開您的手。ESPtool將自動識別您的ESP32所在的端口。
完成后,您現在應該會看到與此類似的屏幕。
如果連接后卡在點上,則表示您的主板未處于啟動/閃存模式,您需要重試。
第4步:
擦除完成后,您現在可以通過運行命令用新固件刷新電路板;
esptool.py --chip esp32 --port 《enter_the_serial_port_to_which_your_board_is_connected》 write_flash -z 0x1000 《location_of_the_bin_file》
用您的串行端口和我們之前下載的 bin 文件的位置填充固件中的位置。為方便起見,您可以將目錄更改為與 bin 文件相同的文件夾,因此您只需輸入文件名作為位置。例如
esptool.py --chip esp8266 --port COM4 write_flash --flash_mode dio --flash_size 檢測0x0 esp32-ppp-fix.bin
完成此操作后,您應該會看到說明您的開發板已成功刷入 MicroPython 固件,并且您應該能夠使用任何 python IDE 對開發板進行編程。
安裝 Thonny IDE 以編程 ESP32
固件啟動后,我們需要做的下一件事是安裝 Python IDE。
IDE 提供了一種為您的項目開發和管理代碼的簡單方法。存在相當多的支持 MicroPython 的 python IDE,包括 Mu、thonny、UPyCraft 等 IDE,您可以為您的項目選擇其中任何一個。對于今天的教程,我們將使用Thonny。Thonny在制造商中非常受歡迎,它作為 Raspberry Pi 的 Raspbian 操作系統上的 Python 開發環境之一而獲得了額外的分數。我假設大多數人都會因為這個因素而熟悉它,因此它在本教程中的用途。從這里的官方網頁下載 thorny 。
要在棘手的嵌入式系統設備上編程,需要將解釋器設置為 MicroPython。您可以通過轉到工具 》 選項 》 并選擇一個解釋器來執行此操作。您應該會看到一個類似于下圖中的窗口。選擇要用于運行代碼的 MicroPython,然后選擇您的開發板所連接的端口。
完成此操作后,您現在就可以使用 IDE 對電路板進行編程了。
帶有 MicroPython 的 ESP32 閃爍 LED 程序
Blink 被認為是硬件的 hello world,其想法基本上是通過時間延遲來“打開”和“關閉” LED,因此,我無法向您展示 MicroPython 的強大功能,但是我相信這是一個足夠好的第一個 MicroPython 項目。
雖然 MicroPython 沒有像 Python 中通常提到的那樣提供完整的 Python 庫或模塊,但它提供了額外的庫,允許它在低級別與硬件交互以控制 GPIO 并與通信接口交互。這些模塊之一是機器模塊。機器模塊中的功能允許對嵌入式系統上的 CPU、定時器、總線等硬件塊進行直接且不受限制的訪問和控制。它是您肯定會在所有 micropython 項目中使用的一個模塊。
要跳入代碼,請創建一個新文件,并將其保存為main.py。每次打開運行 MicroPython 的電路板時都會加載 main.py。就像 Arduino Sketch 中的循環函數一樣。使用任何其他名稱保存它是可以的,因為當您指示它上傳到設備時,IDE 會自動將其重命名為main.py 。
我們首先導入要用于腳本的模塊,在我們的例子中是機器和時間模塊。
?
從機器導入 Pin 從時間導入睡眠
?
Pin 幫助我們處理特定的 GPIO,而 sleep 幫助我們引入暫停,例如 Arduino 中的delay()函數。
完成后,我們將引腳狀態設置為類似于我們使用 Arduino pinMode() 函數所做的輸出。
?
LED = 引腳(2,引腳.OUT)
?
接下來,我們編寫while 循環。MicroPython 中 while 循環的配置類似于 Arduino 上的 void loop() 函數。在這里,我們將 LED “打開”0.5 秒,然后將其“關閉”0.5 秒。
?
while True: led.high() sleep(0.5) led.low() sleep(0.5)
?
就這樣。該示例的完整代碼如下所示。
?
從機器導入 Pin 從時間導入睡眠 LED = 引腳(2,引腳.OUT) while True: led.high() sleep(0.5) led.low() sleep(0.5)
?
代碼完成。通過轉到標題欄上的“設備”并選擇“將當前腳本作為 main.py 腳本上傳”選項將其上傳到您的開發板。
您應該看到您的電路板出現 LED 間歇性閃爍。
與 Arduino C 相比,MicroPython 可以說更容易使用,但它可能需要一段時間才能充分發揮其潛力,因為它仍未達到與 C 和 C++ 相關的嵌入式系統開發支持水平。然而,考慮到最近將機器學習、計算機視覺和其他深度技術與固件開發相結合的趨勢,MicroPython 可能只是嵌入式系統開發的未來。
從機器導入 Pin
從時間導入睡眠
LED = 引腳(2,引腳.OUT)
while True:
led.high()
sleep(0.5)
led.low()
sleep(0.5)
評論