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