目錄什么是 MicroPython環(huán)境配置硬件部分軟件部分Hello World!BlinkPico 的引腳常見(jiàn)電子元件面包板跳線開(kāi)關(guān)發(fā)光二極管電阻使你的 Pico 閃爍部署參考 什么是 MicroPython MicroPython 是一個(gè)基于 Python 3.4 的高效實(shí)現(xiàn),它專為微控制器和嵌
MicroPython 是一個(gè)基于 Python 3.4 的高效實(shí)現(xiàn),它專為微控制器和嵌入式系統(tǒng)設(shè)計(jì)。它提供了一個(gè)小型的 Python 環(huán)境,包含了一些標(biāo)準(zhǔn)庫(kù)的部分,并且能夠在資源受限的設(shè)備上運(yùn)行。MicroPython 支持交互式編程(REPL)、任意精度整數(shù)、列表解析、生成器、異常處理等高級(jí)功能,使開(kāi)發(fā)者可以在邊緣設(shè)備上編寫(xiě)和運(yùn)行復(fù)雜的程序。
與 MicroPython 類似的 CircuitPython,也是一種運(yùn)行在微控制器上的 Python 技術(shù)。它是由一家美國(guó)設(shè)計(jì)制造開(kāi)源電子硬件的公司 Adafruit 推動(dòng)的,基于 MicroPython 的 Folk 版本,所以 CircuitPython 的很多內(nèi)容和 MicroPython 是相似的。關(guān)鍵的區(qū)別是 CircuitPython 對(duì) Adafruit 的開(kāi)發(fā)版以及傳感器的支持更好,Adafruit 基本上對(duì)推出的每一款傳感器都提供了相關(guān)的 CircuitPython 包,更方便初學(xué)者以及 DIY。但 MicroPython 的社區(qū)更大,設(shè)備支持的更廣泛。至于學(xué)習(xí)哪一項(xiàng)技術(shù),也就仁者見(jiàn)仁,智者見(jiàn)智了。
支持 MicroPython 的微控制器有很多,這里使用 Raspberry Pi Pico。Raspberry Pi Pico 是樹(shù)莓派基金會(huì)發(fā)布的首款微控制器級(jí)產(chǎn)品,基于 RP2040 芯片構(gòu)建,售價(jià)僅 4 美元。Pico 家族目前由 Raspberry Pi Pico(最左),Pico H(左),Pico W(右)和 Pico WH(最右)組成。
Pico 使用了一顆 RP2040 芯片:
UF2
文件:
https://micropython.org/download/RPI_PICO
BOOTSEL
按鈕,然后將 Pico 插入電腦的 USB 接口,然后松開(kāi) BOOTSEL 按鈕。
MicroPython 的開(kāi)發(fā)可以使用 Thonny IDE,但是作為一款開(kāi)源軟件其表明了開(kāi)發(fā)者的政治立場(chǎng),我是比較反感的。在這里使用 Visual Studio Code 配置一個(gè)最小開(kāi)發(fā)環(huán)境。
在安裝完 MicroPython 插件后,VS Code 底部會(huì)出現(xiàn)幾個(gè)按鈕,其中:
根據(jù)上面的步驟,新建一個(gè) MicroPython 項(xiàng)目,打開(kāi)
main_example.py
文件。
def main():
? ? print("Welcome to RT-Thread MicroPython!")
? ?
if __name__ == '__main__':
? ? main()
與 C、Java、C# 等編譯型語(yǔ)言不同,Python 是一種解釋型腳本語(yǔ)言,運(yùn)行時(shí)是從模塊頂行開(kāi)始,逐行進(jìn)行翻譯執(zhí)行。所以 Python 中并不需要一個(gè)統(tǒng)一的
main()
作為程序的入口。
if __name__ == '__main__'
是一個(gè)標(biāo)志,象征著 Java 等語(yǔ)言中的程序主入口。
點(diǎn)擊“運(yùn)行”按鈕后,第一個(gè)程序就在 Pico 開(kāi)發(fā)板上運(yùn)行了,在 Python 解釋器中可以觀察到運(yùn)行結(jié)果。
當(dāng)人們想到“編程”時(shí),通常很自然地想到軟件。然而,編程不僅僅是和軟件有關(guān),它還可以通過(guò)硬件編程影響現(xiàn)實(shí)物理世界。這也是所謂的 物理計(jì)算 。顧名思義,物理計(jì)算就是用你的程序控制現(xiàn)實(shí)世界中的事物——硬件,而不是軟件。比如在空調(diào)上設(shè)置程序,改變可編程恒溫器上的溫度;或者在微波爐上選擇不同烹飪模式。這些設(shè)備通常是由單片機(jī)控制的。
Pico 通過(guò)其邊緣一系列的引腳與硬件通信。這些引腳大多是作為 通用輸入/輸出(GPIO) 引腳工作,它們可以被編程作為輸入或輸出,并沒(méi)有自己的固定用途。有些引腳有額外的功能和與更復(fù)雜的硬件通信的模式,另一些則有一個(gè)固定的功能,比如供電和提供連接的功能。
Pico 的 40 個(gè)引腳被標(biāo)記在板的底部,這些標(biāo)簽幫助你記住編號(hào)是如何排序的。淺綠色標(biāo)簽的
GPxx
,就是 GPIO 引腳,大多數(shù)情況下需要對(duì)其編程,對(duì)外部硬件進(jìn)行操作。所有引腳的用途見(jiàn)下面的表格。
引腳 | 作用 | 描述 |
---|---|---|
3V3 | 3.3V 電源 | Pico 的工作電壓 |
VSYS | 2-5V 電源 | 可作為電源輸入引腳 |
VBUS | 5V 電源 | 從 Pico 的 USB 端口獲取的 5V 電源 |
GND | 0V 接地 | 接地連接 |
GPxx | 通用輸入/輸出引腳 | 程序可以使用的GPIO引腳,標(biāo)記為GP0-GP28 |
ADCx | 模數(shù)轉(zhuǎn)換引腳 | 既可以用作模擬輸入,也可以用作數(shù)字輸入或輸出,但不能同時(shí)用作兩者 |
ADC_VREF | 模數(shù)轉(zhuǎn)換器參考電壓 | 模擬輸入設(shè)置參考電壓的特殊輸入引腳 |
AGND | 模數(shù)轉(zhuǎn)換器 0V 參考電壓 | 特殊的接地引腳 |
UARTx | 串口協(xié)議引腳 | 與其他設(shè)備進(jìn)行串口通信 |
I2Cx | I2C總線協(xié)議引腳 | 與其他設(shè)備進(jìn)行 I2C 通信 |
SPIx | SPI 協(xié)議引腳 | 與其他設(shè)備進(jìn)行 SPI 通信 |
RUN | 啟用或禁用 Pico | 其他微控制器可以通過(guò)此引腳控制 Pico,拉低用于復(fù)位 |
面包板(Breadboard)是搭建基礎(chǔ)電路原型的試驗(yàn)產(chǎn)品。最初人們都是在類似于切面包的木板上做電路搭接試驗(yàn),隨著技術(shù)發(fā)展直到 1970 年無(wú)需焊接的插接板變得普及,面包板慢慢的變成了這種便捷電路原型實(shí)驗(yàn)產(chǎn)品的統(tǒng)稱。面包板上下區(qū)是橫向5位相通,一般用于接電源和接地,中間區(qū)域是縱向5位相通,通常用于放置電路元件和電路連接線。
跳線(Jumper Wire),也被稱為杜邦線。有三種不同的類型:公對(duì)母線(M2F)、母對(duì)母線(F2F)以及公對(duì)公線(M2M)。如果不使用面包板,可以使用 F2F 將組件連接到 Pico,如果使用面包板,可以將組件插入到面包板中,使用 M2M 進(jìn)行連接。
開(kāi)關(guān)(Switch),也稱為瞬時(shí)開(kāi)關(guān)、輕觸開(kāi)關(guān),通常有兩條或四條腳可供選擇,按下按鈕時(shí)相當(dāng)于導(dǎo)線被連通。按鈕是一種輸入設(shè)備,可以告訴程序它是否被按下,然后執(zhí)行任務(wù)。另一種常見(jiàn)的開(kāi)關(guān)類型是鎖定開(kāi)關(guān),按下開(kāi)關(guān)時(shí)一直保持活動(dòng)狀態(tài),直到再次切換它。
發(fā)光二極管(LED)是輸出設(shè)備,從洗衣機(jī)、微波爐等小家電的指示燈,到路邊的路燈、房間的吊燈等,LED 燈隨處可見(jiàn)。LED 有各種各樣的形狀、顏色、工作電壓,為了防止其被擊穿,通常會(huì)配合限流電阻使用。二極管具有單向?qū)щ娦,只有在連接正確的電極方向時(shí),才能正常工作。LED 的長(zhǎng)端為陽(yáng)極,接在電源正極,短端為陰極,接在電源負(fù)極。
電阻是控制電流流動(dòng)的元件,使用歐姆 Ω 為單位,歐姆的值越大,提供的阻力就越大。
有些電阻的表面涂有一些帶有顏色的環(huán)狀標(biāo)志,稱為
色環(huán)電阻
。色環(huán)具有特殊的意義,即電阻的值。要讀取電阻的值,從左側(cè)第一個(gè)環(huán)開(kāi)始,在表的 1st/2nd Band 列中查找它的顏色,得到第一個(gè)和第二個(gè)數(shù)字。例如下圖電阻有兩個(gè)橙色色環(huán),橙色值為 3,總共為 33。第三個(gè)色環(huán)的顏色表示乘數(shù),即需要用前兩個(gè)色環(huán)得到的數(shù)乘以乘數(shù)才能得到電阻的實(shí)際值。例如下圖電阻的棕色色環(huán),意思是 ×10。前兩個(gè)色環(huán)是 33,棕色色環(huán)是 x10,
33x10=330Ω
這樣就得到了電阻的值。最后一個(gè)環(huán)是電阻的容差,表示實(shí)際阻值與標(biāo)稱阻值之間的偏離程度,對(duì)于大多數(shù)業(yè)余項(xiàng)目來(lái)說(shuō),容差并不是很重要。
就像在屏幕上打印“Hello, World!”是學(xué)習(xí)編程語(yǔ)言的第一步一樣,在電路板上通過(guò)編程點(diǎn)亮 LED 燈是學(xué)習(xí)物理計(jì)算的經(jīng)典入門(mén)方式。Blink 譯為“眨眼、閃爍”,下面通過(guò)編程使 Pico 開(kāi)發(fā)板上的 LED 燈不斷閃爍,模擬“眨眼”的效果。
Pico 上的這顆 LED 連接到 GPIO 引腳之一的 GP25,正因?yàn)檫@個(gè)引腳已經(jīng)用于在板上連接 LED,所以 Pico 邊緣引出的 GPIO 引腳上就沒(méi)有 GP25 了。這個(gè) LED 的工作原理和其它任何 LED 一樣:
下面新建一個(gè) MicroPython 項(xiàng)目來(lái)控制這顆 LED 的閃爍。首先導(dǎo)入
machine
包。
import machine
這很短的一行代碼對(duì)于在 Pico 上使用 MicroPython 是非常關(guān)鍵的,它包含了 MicroPython 與 Pico 通信所需的所有指令,擴(kuò)展了用于物理計(jì)算的語(yǔ)言。如果沒(méi)有這一行命令,我們是無(wú)法控制 Pico 的任何 GPIO 引腳,自然也無(wú)法使板載的 LED 點(diǎn)亮。
接著使用
Pin()
函數(shù)獲取引腳。
led = machine.Pin(25, machine.Pin.OUT)
這一行定義了一個(gè)名為
led
的對(duì)象,調(diào)用
machine
庫(kù)中的
Pin()
函數(shù),這個(gè)函數(shù)是專為處理 GPIO 引腳。第一個(gè)參數(shù)25,是我們要設(shè)置的引腳的編號(hào); 第二個(gè)
machine.Pin.Out
是告訴 Pico 引腳應(yīng)該用作輸出而不是輸入。
上面的代碼只是完成了引腳的設(shè)置,但還不能點(diǎn)亮LED,要點(diǎn)亮LED,還需要通過(guò)程序告訴 Pico 把引腳打開(kāi)。
led.value(1)
前面的行創(chuàng)建了對(duì)象
led
,作為 GP25 引腳上的輸出,這一行將該對(duì)象的值設(shè)定為
1
(二進(jìn)制中的高電平),用于'on',它也可以將值設(shè)置為
0
,用于'off'。
led.value(0)
如何才能讓 LED 閃爍起來(lái)呢?我們可以在 LED 的開(kāi)與關(guān)之間加入一點(diǎn)延時(shí)。像導(dǎo)入
machine
庫(kù)一樣,將
utime
庫(kù)導(dǎo)入到程序中。
import utime
這個(gè)庫(kù)處理與時(shí)間有關(guān)的所有事情。在開(kāi)啟 LED 的代碼后面添加一段延時(shí),調(diào)用 utime 庫(kù)中的
sleep()
函數(shù),這將使程序暫停輸入的秒數(shù),這里暫停
1s
。
utime.sleep(1)
創(chuàng)建一個(gè)循環(huán)后,就可以讓 LED 閃爍了。
import machine
import utime
def main():
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.value(1)
utime.sleep(1)
led.value(0)
utime.sleep(1)
if __name__ == '__main__':
main()
上面的程序都是運(yùn)行在 REPL 環(huán)境中,當(dāng)斷電重置 Pico 時(shí),程序會(huì)消失。怎樣才能將程序持久化到 Pico 中呢?在新建 MicroPython 項(xiàng)目時(shí),默認(rèn)提供了一個(gè)文件名為
main_example.py
的文件,通常會(huì)在這個(gè)文件里編寫(xiě)代碼,進(jìn)行調(diào)試。當(dāng)代碼可以燒錄時(shí),將文件重命名為
main.py
,點(diǎn)擊“同步”按鈕,或者右擊想要下載到 Pico 中的文件或文件夾點(diǎn)擊“下載該文件/文件夾到設(shè)備上”,下載完成后斷電重啟,這樣 Pico 就會(huì)執(zhí)行
main.py
中的代碼。
有些時(shí)候可能會(huì)將問(wèn)題代碼固化到 Pico 中,這時(shí)可以燒錄重置 Flash 的 UF2
flash_nuke.uf2
清空 Flash,重置完成后還需要重新燒錄 MicroPython 的 UF2,下載地址:
https://datasheets.raspberrypi.com/soft/flash_nuke.uf2
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀基于鴻蒙NEXT的血型遺傳計(jì)算器開(kāi)發(fā)案例
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)