Python 編程語言是為臺(tái)式機(jī)、筆記本電腦和服務(wù)器等計(jì)算機(jī)系統(tǒng)開發(fā)的。像 Raspberry Pi Pico 這樣的微控制器板更小、更簡(jiǎn)單、內(nèi)存也更小,這意味著它們不能運(yùn)行與大型 Python 語言相同的 Python 語言。這就是 MicroPython 誕生的意義。
MicroPython 最初由 Damien George 開發(fā),于 2014 年首次發(fā)布,是一種專門為微控制器開發(fā)的 Python 兼容編程語言。它包含了許多主流 Python 的特性,同時(shí)添加了一系列新的特性,旨在利用 Raspberry Pi Pico 和其他微控制器板上燈可用的設(shè)備。如果你以前與 Python 編程過,你會(huì)立即發(fā)現(xiàn) MicroPython 很熟悉。如果沒有,不要擔(dān)心,這是一個(gè)學(xué)習(xí)起來很容易的語言!
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,并單擊頁面頂部的下載鏈接,下載用于你的操作系統(tǒng)的 Thonny 和 Python 包安裝程序。
作為一個(gè)集成的開發(fā)環(huán)境,Thonny 將你需要編寫或開發(fā)的所有不同工具聚集在一起或集成到單個(gè)用戶界面或環(huán)境中。有許多不同的 IDE——有些允許你使用多種不同的編程語言進(jìn)行開發(fā),而另一些則像 Thonny 一樣專注于單一語言。
當(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 行。
條件和變量
和所有編程語言一樣,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è)條件語句:
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)在知道如何使用條件語句和比較操作符了!
審核編輯:劉清
-
微控制器
+關(guān)注
關(guān)注
48文章
7559瀏覽量
151480 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105670 -
USB數(shù)據(jù)線
+關(guān)注
關(guān)注
0文章
11瀏覽量
4928 -
macOS系統(tǒng)
+關(guān)注
關(guān)注
0文章
9瀏覽量
1543
原文標(biāo)題:使用 MicroPython 在樹莓派 Pico 上編程
文章出處:【微信號(hào):趣無盡,微信公眾號(hào):趣無盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論