Python 編程語(yǔ)言是為臺(tái)式機(jī)、筆記本電腦和服務(wù)器等計(jì)算機(jī)系統(tǒng)開發(fā)的。像 Raspberry Pi Pico 這樣的微控制器板更小、更簡(jiǎn)單、內(nèi)存也更小,這意味著它們不能運(yùn)行與大型 Python 語(yǔ)言相同的 Python 語(yǔ)言。這就是 MicroPython 誕生的意義。
MicroPython 最初由 Damien George 開發(fā),于 2014 年首次發(fā)布,是一種專門為微控制器開發(fā)的 Python 兼容編程語(yǔ)言。它包含了許多主流 Python 的特性,同時(shí)添加了一系列新的特性,旨在利用 Raspberry Pi Pico 和其他微控制器板上燈可用的設(shè)備。如果你以前與 Python 編程過,你會(huì)立即發(fā)現(xiàn) MicroPython 很熟悉。如果沒有,不要擔(dān)心,這是一個(gè)學(xué)習(xí)起來很容易的語(yǔ)言!
Thonny Python IDE 介紹
A 工具欄 – 工具欄提供基于圖標(biāo)的快速訪問系統(tǒng),用于常用的程序功能,如保存、加載和運(yùn)行程序。
B 腳本區(qū)域 – 腳本區(qū)域是編寫 Python 程序的位置。它被分割成你的程序的主要區(qū)域和 顯示行數(shù)的少量側(cè)邊距。
C Python 控制臺(tái) – Python 控制臺(tái)允許你鍵入單個(gè)指令,當(dāng)你按下回車鍵時(shí),這些指令就會(huì)運(yùn)行,并提供有關(guān)運(yùn)行程序的信息。這也稱為 REPL,用于「讀取、評(píng)估、打印和循環(huán)」。
D 解釋器 – Thonny 窗口的右下角顯示并允許你更改當(dāng)前的 Python 解釋器——用于運(yùn)行你的程序的 Python 版本。
Thonny 連接到 Pico
在開始用 MicroPython 編程之前,需要設(shè)置所謂的集成開發(fā)環(huán)境(IDE)。Thonny,一個(gè)流行的 Python 和 MicroPython IDE,已經(jīng)預(yù)裝在 Raspberry Pi OS 上。如果你在另一個(gè) Linux 發(fā)行 版、Windows 或 macOS 上使用Pico,請(qǐng)打開 Web 瀏覽器,訪問 thonny.org,并單擊頁(yè)面頂部的下載鏈接,下載用于你的操作系統(tǒng)的 Thonny 和 Python 包安裝程序。
作為一個(gè)集成的開發(fā)環(huán)境,Thonny 將你需要編寫或開發(fā)的所有不同工具聚集在一起或集成到單個(gè)用戶界面或環(huán)境中。有許多不同的 IDE——有些允許你使用多種不同的編程語(yǔ)言進(jìn)行開發(fā),而另一些則像 Thonny 一樣專注于單一語(yǔ)言。
當(dāng)你的 Pico 已經(jīng)連接到樹莓派時(shí),點(diǎn)擊 Thonny 窗口的右下角,上圖區(qū)域 D。這里顯示了你當(dāng)前的解釋器,它負(fù)責(zé)接受你輸入的指令,并將它們轉(zhuǎn)換成計(jì)算機(jī)或微控制器可以理解和運(yùn)行的代碼。通常解釋器是在 Raspberry Pi 上運(yùn)行的 Python 的副本,但是為了在你的 Pico 上運(yùn)行你的程序,需要對(duì)它進(jìn)行修改。
在顯示的列表中,查找「MicroPython(Raspberry Pi Pico)」,然后單擊它。如果你在列表中看不到它,請(qǐng)仔細(xì)檢查你的 Pico 是否正確插入 microUSB 數(shù)據(jù)線,以及 micro USB 數(shù)據(jù)線是否正確插入到樹莓派或計(jì)算機(jī)。
看看 Thonny 窗口底部的 Python 控制臺(tái): 你會(huì)看到它現(xiàn)在輸出顯示「MicroPython」,并告訴你,它正在運(yùn)行在「Raspberry Pi Pico」。恭喜你,你已準(zhǔn)備好了編程環(huán)境。
第一個(gè) MicroPython 程序:Hello, World!
開始編寫第一個(gè)程序時(shí),請(qǐng)單擊 Thonny 窗口底部的 Python Shell 區(qū)域,只需在底部「>>>」提示符的右側(cè),輸入以下指令之后回車。
print("Hello, World!")
你會(huì)看到你的程序立即開始運(yùn)行:Python 將在相同的 Shell 區(qū)域響應(yīng),并打印出「Hello, World!」,這是因?yàn)?Shell 與運(yùn)行在你的 Pico 上的 MicroPython 解釋器直接相連,后者的工作是查看你的指令并解釋它們的含義。這就是所謂的互動(dòng)模式,你可以把它想象成與某人面對(duì)面的對(duì)話:你剛說完話,對(duì)方就會(huì)做出回應(yīng),然后等著你接下來說什么。
使用 Shell 為 Pico 編程有點(diǎn)像電話對(duì)話:當(dāng)你按下回車鍵時(shí),你的指令將通過 microUSB 線發(fā)送到運(yùn)行在 Pico 上的 MicroPython 解釋器;解釋器查看你的指令并執(zhí)行,然后通過 microUSB 線把執(zhí)行結(jié)果發(fā)送回給 Thonny。
不過,你不必通過 Shell 在交互模式下編程。點(diǎn)擊 Thonny 窗口中間的腳本區(qū)域,然后再次輸入你的程序:
print("Hello, World!")
當(dāng)你這次按下回車鍵時(shí),除了在腳本區(qū)域中獲得新的空白行外,什么都沒發(fā)生。要使此版本的程序工作,你必須單擊 Thonny 工具欄中的「運(yùn)行」圖標(biāo),或單擊「運(yùn)行」菜單,然后單擊「運(yùn)行當(dāng)前腳本」。
你會(huì)被詢問是否要保存程序到這臺(tái)電腦,即 Raspberry Pi,或「MicroPython device」,即 Pico。單擊「MicroPython device」,然后鍵入一個(gè)文件名,如 Hello_World.py,然后單擊 OK 按鈕。
一旦你的程序保存好,它就會(huì)自動(dòng)在你的 Pico 上運(yùn)行。你會(huì)看到兩條消息出現(xiàn)在 Shell 區(qū) 域的底部的 Thonny 窗口:
>>> %Run -c $EDITOR_CONTENT
Hello, World!
其中第一行是 Thonny 的指示,告訴 Pico 上的 MicroPython 翻譯運(yùn)行腳本區(qū)域的內(nèi)容:「EDITOR_CONTENT」。第二個(gè)是程序的輸出——你讓 MicroPython 打印的信息。恭喜你!現(xiàn)在你 已經(jīng)以交互模式和腳本模式寫了兩個(gè) MicroPython 程序,并成功地在你的 Pico 上運(yùn)行了它們!
還有一件事需要解決,就是重新加載你的程序。按窗口右上角的「X」鍵關(guān)閉 Thonny,然后再次加載它。這次不是編寫一個(gè)新程序,而是點(diǎn)擊 Thonny 工具欄中的「Open」圖標(biāo)。
就像當(dāng)你保存你 的程序時(shí),你會(huì)被詢問是否要保存到「This computer」或你的「MicroPython device」。點(diǎn)擊「MicroPython device」,你會(huì)看到你已經(jīng)保存到你的 Pico 的所有程序的列表。
在列表中查找 Hello_World.py,單擊選擇它,然后單擊OK。你的程序?qū)⒓虞d到 Thonny,準(zhǔn)備好被編輯或你再次運(yùn)行它。
循環(huán)和代碼縮進(jìn)
與標(biāo)準(zhǔn) Python 程序一樣,MicroPython 程序通常從上到下運(yùn)行。它依次運(yùn)行每一行,在進(jìn)入下一 行之前通過解釋器運(yùn)行它,就像你在 Shell 中逐行輸入它們一樣。
但是,僅僅逐行運(yùn)行指令列表的程序并不是很聰明——因此,MicroPython 就像 Python 一樣,有自己的方法來控制程序運(yùn)行的順序,即縮進(jìn)。
通過單擊 Thonny 工具欄中的新圖標(biāo)創(chuàng)建一個(gè)新程序。你不會(huì)失去現(xiàn)有的程序,相反,Thonny 將在腳本上方的區(qū)域創(chuàng)建一個(gè)新的標(biāo)簽。輸入以下兩行開始你的程序:
print("Loop starting!") for i in range(10):
第一行向 Shell 輸出一條簡(jiǎn)單的消息,就像你的 Hello World 程序一樣。第二行開始一個(gè)定義的循環(huán),它將重復(fù)-循環(huán)-一個(gè)或多個(gè)指令的一組次數(shù)。一個(gè)變量i被賦值給循環(huán),并給出一系列數(shù)字。range 指令從數(shù)字 0 開始計(jì)次,但永遠(yuǎn)不會(huì)到達(dá)數(shù)字 10。冒號(hào)告訴 MicroPython 循環(huán)本身從下一行開始。
變量是強(qiáng)大的工具。顧名思義,變量是可以改變的值,或在程序的控制下隨時(shí)間變化。最簡(jiǎn)單 的說,一個(gè)變量有兩個(gè)方面——它的名稱和它所存儲(chǔ)的數(shù)據(jù)。在循環(huán)的情況下,變量的名字是「i」,其數(shù)據(jù)由 range 指令設(shè)置——從 0 開始,每次循環(huán)結(jié)束并重新開始時(shí)增加 1。
為了在循環(huán)中真正包含一行代碼,它必須縮進(jìn)——從腳本區(qū)域的左側(cè)移動(dòng)進(jìn)來。下一行以四個(gè) 空格開始,當(dāng)你按下第二行回車后,Thonny 將自動(dòng)添加這些空格?,F(xiàn)在輸入:
print("Loop number", i)
與程序中的其他行相比,這四個(gè)空格將這行推入內(nèi)部??s進(jìn)是 MicroPython 區(qū)分循環(huán)外部指令 和循環(huán)內(nèi)部指令的方式:縮進(jìn)的代碼構(gòu)成了循環(huán)內(nèi)部,被稱為嵌套代碼。
你將注意到,當(dāng)你在第三行末尾按下回車時(shí),Thonny 會(huì)自動(dòng)縮進(jìn)下一行——假設(shè)它是循 環(huán)的一部分。要?jiǎng)h除這個(gè)縮進(jìn),只需在輸入第四行之前按下退格鍵一次:
print("Loop finished!")
你的四行程序現(xiàn)在已經(jīng)完成。第一行位于循環(huán)之外,并且只運(yùn)行一次;第二行設(shè)置循環(huán);第三個(gè)循
環(huán)位于循環(huán)內(nèi)部,每次循環(huán)運(yùn)行一次;第四行還是在循環(huán)外面。
print("Loop starting!") for i in range(10): print("Loop number", i) print("Loop finished!")
單擊 Run(運(yùn)行)圖標(biāo),選擇通過點(diǎn)擊「MicroPython device」選擇將程序保存在 Pico 上,并將其命名為 Indentation.py。該程序?qū)⒃诒4婧罅⒓催\(yùn)行,查看 Shell 區(qū)域的輸出。
Loop starting!
Loop number 0
Loop number 1
Loop number 2
Loop number 3
Loop number 4
Loop number 5
Loop number 6
Loop number 7
Loop number 8
Loop number 9
Loop finished!
縮進(jìn)是 MicroPython 的一個(gè)強(qiáng)大部分,也是程序不能按預(yù)期工作的最常見原因之一。當(dāng)尋找程 序中的問題時(shí),一個(gè)稱為調(diào)試的過程,總是反復(fù)檢查縮進(jìn),特別是當(dāng)你開始在循環(huán)中嵌套循環(huán) 時(shí)。
MicroPython 還支持無限循環(huán),它可以無限循環(huán)。要將程序從確定循環(huán)變?yōu)闊o限循環(huán),請(qǐng)編輯 第 2 行:
while True:
如果你現(xiàn)在單擊 Run 圖標(biāo),你將得到一個(gè)錯(cuò)誤:名稱「i」沒有定義。這是因?yàn)槟阋呀?jīng)刪除了為
變量「i」創(chuàng)建并賦值的行。要修復(fù)這個(gè)問題,只需編輯第 3 行,這樣它就不再使用變量了:
print("Loop running!")
再次點(diǎn)擊 Run 圖標(biāo),如果你動(dòng)作快,你會(huì)看到「Loop starting! 」消息后面跟著一串永無休止的「Loop running!」消息?!窵oop finished!」消息將永遠(yuǎn)不會(huì)打印,因?yàn)檠h(huán)沒有結(jié)束。每次 Python 打印完「Loop running!」消息時(shí),它返回到循環(huán)的開始處并再次輸出。
點(diǎn)擊 Thonny 工具欄上的 Stop 圖標(biāo),告訴程序停止正在做的事情,即中斷程序并重新啟動(dòng) MicroPython 解釋器。你將看到 Shell 區(qū)域中出現(xiàn)一條消息,程序?qū)⑼V?,而不?huì)到達(dá)第 4 行。
條件和變量
和所有編程語(yǔ)言一樣,MicroPython 中的變量的存在不僅僅是為了控制循環(huán)。點(diǎn)擊 Thonny 工具欄上的 New 圖標(biāo)啟動(dòng)新程序,然后在腳本區(qū)域輸入以下內(nèi)容:
user_name = input ("What is your name? ")
點(diǎn)擊 Run 圖標(biāo),通過點(diǎn)擊「MicroPython device」選擇將程序保存在 Pico 上,并將其命名為 Name_Test.py,并觀察 Shell 區(qū)域中發(fā)生了什么:將詢問你的姓名。在 Shell 區(qū)域中輸入你的名字,然后回車。因?yàn)檫@是你的程序中唯一的指令,其他的都不會(huì)發(fā)生。
如果想要對(duì)放入變量中的數(shù)據(jù)進(jìn)行實(shí)際操作,則需要在程序中增加更多行。
為了讓你的程序用這個(gè)名字做一些有用的事情,從第 2 行開始輸入一個(gè)條件語(yǔ)句:
if user_name == "Clark Kent": print("You are Superman!") else: print("You are not Superman!")
記住,當(dāng)Thonny看到你的代碼需要縮進(jìn)時(shí),它會(huì)自動(dòng)這么做——但它不知道什么時(shí)候你的代碼 需要停止縮進(jìn),所以你必須自己刪除空格。
單擊 Run 圖標(biāo)并在 Shell 區(qū)域中鍵入你的名字。除非你的名字恰好是「Clark Kent」,否則你會(huì)看到「You are Superman!」再次點(diǎn)擊 Run,這次輸入 Clark Kent 的名字,確保寫的和程序中完全一樣,用大寫的 C 和 K。這次,程序承認(rèn)你實(shí)際上是超人。
「==」符號(hào)告訴 Python 進(jìn)行直接比較,查看變量 user_name 是否與程序中的文本(即字符串)匹配。
如果你處理的是數(shù)字,你還可以進(jìn)行其他的比較「>」查看一個(gè)數(shù)字是否大于另一個(gè)數(shù)字,「<」查看它是否小于,「>=」查看它是否大于或等于,「<=」查看它是否小于或等于。還有「!=」,意思是不等于,是「==」的反義詞。這些符號(hào)在技術(shù)上稱為比較運(yùn)算符。
注意:使用變量的關(guān)鍵是了解「=」,與「==」兩者的區(qū)別。記住,「=」的意思是「使這個(gè)變量等于這個(gè)值」,而「==」的意思是「檢查變量是否等于這個(gè)值」。把它們混在一起肯定會(huì)導(dǎo)致程序無法工作!比較操作符也可以在循環(huán)中使用。刪除第 2 行到第 5 行,然后在它們的位置輸入以下內(nèi)容:
while user_name != “Clark Kent”: print(“You are not Superman – try again!”) user_name = input(“What is your name? “) print(“You are Superman!”)
再次點(diǎn)擊 Run 圖標(biāo)。這一次,程序不會(huì)退出,而是會(huì)不斷詢問你的名字,直到確認(rèn)。有點(diǎn)像一個(gè)非常簡(jiǎn)單的密碼。要退出循環(huán),可以在腳本區(qū)域輸入「Clark Kent」,或者單擊 Thonny 工具欄上的 Stop 圖標(biāo)。
祝賀你!你現(xiàn)在知道如何使用條件語(yǔ)句和比較操作符了!
審核編輯:劉清
-
微控制器
+關(guān)注
關(guān)注
48文章
7467瀏覽量
150882 -
python
+關(guān)注
關(guān)注
55文章
4774瀏覽量
84386 -
樹莓派
+關(guān)注
關(guān)注
116文章
1697瀏覽量
105461 -
USB數(shù)據(jù)線
+關(guān)注
關(guān)注
0文章
11瀏覽量
4909 -
macOS系統(tǒng)
+關(guān)注
關(guān)注
0瀏覽量
1539
原文標(biāo)題:使用 MicroPython 在樹莓派 Pico 上編程
文章出處:【微信號(hào):趣無盡,微信公眾號(hào):趣無盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論