MicroPython 讓 Python 語言的易用性與微控制器的高效能完美結合,成為嵌入式系統開發的絕佳選擇。本文從 MicroPython 的起源和發展歷程談起,詳細介紹了 PyBoard、micro:bit、ESP 等主流微控制器的特性,並提供開發環境建置的逐步。更重要的是,本文深入淺出地講解了嵌入式程式設計的核心技術,包含 GPIO 控制、感測器資料讀取、網路通訊協定等,讓讀者能快速掌握 MicroPython 的開發技巧,並將其應用於實際專案中。
MicroPython 程式設計:微控制器與 Python 的嵌入式程式設計
MicroPython 是一種針對微控制器最佳化的 Python 實作,它讓開發者能夠在資源有限的硬體上執行 Python 程式碼。本文將探討 MicroPython 的基本概念、開發環境設定,以及如何在不同微控制器上進行嵌入式程式設計。
為什麼選擇 MicroPython?
MicroPython 結合了 Python 的易用性和微控制器的高效能,使其成為嵌入式系統開發的理想選擇。Python 語言的簡潔性和豐富的函式庫支援,讓開發者能夠快速開發出功能強大的應用程式。
MicroPython 的誕生
MicroPython 最初由 Damien George 開發,第一款支援的硬體是 PyBoard。隨著社群的成長,越來越多的微控制器被納入支援範圍,包括 BBC micro:bit、Adafruit Circuit Playground Express 和 ESP8266/ESP32 等。
微控制器的選擇
本文介紹了多種流行的微控制器硬體,包括:
- PyBoard:MicroPython 的原生硬體平台,具有豐富的 GPIO 和外設。
- BBC micro:bit:一款流行的教育用微控制器,具有 LED 矩陣和多種感測器。
- Adafruit Circuit Playground Express:一款功能豐富的開發板,具有 NeoPixels 和多種感測器。
- ESP8266/ESP32:低成本的 WiFi 微控制器,適合物聯網應用。
開發環境設定
每種微控制器的開發環境設定都不同,本文提供了詳細的步驟說明,包括驅動程式安裝、韌體更新和開發工具的組態。
嵌入式程式設計基礎
本文涵蓋了嵌入式程式設計的基本概念,包括:
- GPIO 操作:如何控制微控制器的輸入輸出引腳。
- 感測器和輸入裝置:如何使用按鈕、加速計和溫度感測器等裝置。
- 視覺回饋:如何使用 LED、NeoPixels 和 LCD 顯示器等輸出裝置。
- 網路連線:如何使用 WiFi 和藍牙等技術實作網路連線。
進階主題
本文還探討了一些進階主題,包括:
- 聲音和音樂:如何使用微控制器產生聲音和音樂。
- 機器人:如何使用微控制器控制機器人。
- 效能最佳化:如何最佳化 MicroPython 程式的效能。
本文內容解密:
本文內容涵蓋了 MicroPython 的基本概念、開發環境設定、嵌入式程式設計基礎和進階主題。透過本文,讀者可以深入瞭解 MicroPython 的技術細節和實際應用,並學習如何在不同微控制器上進行嵌入式程式設計。
import pyb
# 初始化 LED
led = pyb.LED(1)
# 閃爍 LED
while True:
led.on()
pyb.delay(500)
led.off()
pyb.delay(500)
程式碼解密:
這段程式碼初始化了 PyBoard 上的第一個 LED,並進入無限迴圈閃爍 LED。pyb.LED(1) 用於建立 LED 物件,led.on() 和 led.off() 用於控制 LED 的開關,pyb.delay(500) 用於延遲 500 毫秒。這個例子展示瞭如何使用 MicroPython 控制 PyBoard 的硬體資源。
前言
2012年末,我有了一個想法,想要開發一台極小型、低功耗的電腦,能夠直接在底層硬體上執行指令碼。我的目標是讓任何人,無論背景或技術水平如何,都能夠輕鬆地製造出能夠使用0和1控制真實世界的數位裝置。就我個人而言,我希望能有一個更簡單的方法來程式設計當時正在製作的小型機器人。
起初,我並沒有為這個裝置選擇特定的指令碼語言,但在研究了什麼是好的語言選擇,以及人們喜歡寫什麼、容易學習什麼之後,我選擇了Python。
我還對進行Kickstarter眾籌活動感興趣,看看人們是否喜歡這個想法,也許可以藉此開始建立一個社群。2013年底的第一個Kickstarter眾籌活動真的啟動了MicroPython:它籌集了資金來製造3000個pyboard,MicroPython將在其上執行;它讓近2000人加入了最初的社群;並且吸引了一些非常有才華的程式設計師,他們自願貢獻時間和專業知識來改進MicroPython。
我的背景是理論物理,因此我以更具學術和研究導向的角度來設計和開發MicroPython,而不是簡單地為問題設計解決方案。我相信這是MicroPython成功的原因之一。從一開始,MicroPython是否能夠運作並不是顯而易見的,Python是否能夠縮小到如此小的尺寸並在記憶體極少的微控制器上執行也不是顯而易見的。我把MicroPython的建立視為一個研究專案,並結合分析與許多程式設計技巧,忽略了許多軟體開發原則,只是為了讓它能夠運作。
我對MicroPython的總體理念是保持最小化但可用。而這個名字本身就體現了這一點:「微型」指的是微控制器和嵌入式系統,但也給人一種極簡主義的感覺。「Python」則是一種非常實用且易於使用的語言,旨在讓人類能夠享受程式設計。在一個極端上,讓一切都過於極簡會造成傷害(極端的極簡主義等於什麼都沒有!),但在另一個極端上,增加大量的可用性功能會導致過度負擔和過度使用資源。這些關於在極簡主義和實用主義之間取得平衡的想法,不僅適用於MicroPython的設計和開發理念,也適用於更廣泛的電腦產業,甚至更廣泛的領域。
自從第一個Kickstarter活動以來,MicroPython經歷了驚人的成長,我和社群中的許多其他人,在硬體和軟體方面都投入了大量的工作。今天,MicroPython仍然忠於其最初的目標,讓任何人都能輕鬆地數位控制真實世界,並且正在擴大其範圍,被業餘愛好者和專業人士用於教育和研究,以及商業產品。MicroPython實際上已經形成了自己的小產業(很快就會變得更大!),看到自己的創作成長並吸引來自世界各地、如此多樣化的人們的興趣,用於如此多樣化的應用,真是令人感到謙卑。
MicroPython不斷改進,使用者社群每天都在成長,未來看起來非常光明。我希望MicroPython能夠繼續激勵人們,繼續幫助人們學習,並繼續被用來構建和控制系統,從咖啡機到太空衛星。數位計算裝置需要被程式設計,而MicroPython提供了一種高效且愉快的方式來做到這一點。
Nicholas從早期開始就是MicroPython的積極推動者,並且對其發展做出了巨大的貢獻,尤其是在社群和教育方面,並且是micro:bit平台開發和成功的關鍵人物。他對MicroPython非常瞭解,尤其是從最終使用者的角度來看,並且非常適合向您介紹它。
所以,請深入閱讀並享受這本關於MicroPython世界的精彩介紹,並開始製作一些令人驚豔的數位裝置!
— Damien P. George MicroPython創始人 2017年7月
序言
這是一本關於MicroPython的書。
MicroPython是針對微控制器和嵌入式系統重新實作的Python 3。這是在如此受限的環境下運作的Python重新實作的一個令人驚嘆的工程壯舉。為什麼這很重要?MicroPython賦予了人們力量:它將最美麗、易於學習和富有表現力的程式語言之一帶到了嵌入式開發的世界。
本文適合任何想要學習如何使用MicroPython進行嵌入式開發的人。我預計您已經瞭解Python1,但我不期望您是專家。例如,本文中的許多內容在教育環境中非常適用;因此,您可能不是專業程式設計師,而是一位老師或自學者。
我的目標是給予您所需的理解、指引和想法,以便您在自己的專案中感到自信。
最重要的是,我希望這本文既有趣又具有啟發性。在閱讀完之後,我希望您有足夠的熱情,能夠全身心投入製作自己的根據MicroPython的小裝置、小玩意或神奇物件。
本文將概述執行MicroPython的裝置型別,促使您思考如何最佳地開發和執行嵌入式專案,研究MicroPython如何使用和與硬體互動以實作各種常見結果和行為,並探索慣用的MicroPython開發方式。最後,本文將提出下一步的建議。
與任何書籍一樣,本文包含妥協。有些人可能會覺得它過於技術化,有些人則覺得不夠技術化。或者,有些人可能會覺得我在某些主題上花費了太多時間。
內容解密:
本段主要介紹了本文的目的、目標讀者以及內容概要。它強調了本文旨在幫助讀者瞭解如何使用MicroPython進行嵌入式開發,並提供了學習和使用MicroPython的和建議。同時,也提到了本文可能存在的一些侷限性和妥協。
前言
MicroPython 是一種令人著迷的技術,近年來在嵌入式開發領域引起了廣泛的關注。作為一本關於 MicroPython 的書籍,本文旨在為讀者提供一個易於理解且全面的介紹,讓讀者能夠快速上手並深入探索這一技術。
本文的寫作目標
本文的寫作目標是讓讀者能夠輕鬆地學習 MicroPython,並提供足夠的背景知識和資源指引,以便進一步學習。作者希望透過本文幫助更多的人瞭解並使用 MicroPython 這一優秀的技術。
MicroPython 的現狀與未來
MicroPython 是一個相對年輕的專案,目前正處於快速發展階段。隨著社群的不斷壯大、工具和基礎設施的不斷完善、功能的增加和錯誤的修復,MicroPython 正逐漸嶄露頭角。近年來,MicroPython 在各類別會議、研討會和社群聚會中受到越來越多的關注,顯示出其巨大的潛力。Python 程式設計師正在學習如何使用 MicroPython 進行嵌入式開發,而嵌入式開發者則發現使用 Python 進行開發的樂趣。教育工作者也看到了 MicroPython 在教學程式設計方面的巨大潛力。
本文的排版規範
本文採用以下排版規範:
- 斜體字:表示新的術語、網址、電子郵件地址、檔案名稱和副檔名。
固定寬度:用於程式清單,以及在段落中參照程式元素,如變數或函式名稱、資料函式庫、資料型別、環境變數、陳述式和關鍵字。固定寬度粗體:表示使用者應當逐字輸入的命令或其他文字。固定寬度斜體_:表示應當替換為使用者提供的值或由上下文決定的值。
本文的使用
相關資源
- 本文的補充材料(程式範例、練習等)可從 https://github.com/ntoll/programming-with-micropython 下載。
聯絡資訊
致謝
作者在此感謝所有參與審閱本文的評論者,他們發現了許多錯誤,提出了有益的建議,並指出了改進的方向。同時,也感謝 Adafruit Industries 的 Scott Shawcroft、Tony DiCola、Limor Fried 和 Phillip Torrone 對本文與 CircuitPython 相關部分的幫助和支援。
內容解密:
本段落主要介紹了本文的寫作目標、MicroPython 的現狀與未來、本文的排版規範、使用以及相關資源和聯絡資訊。同時,也對參與本文製作的人員表示了感謝。主要目的是讓讀者瞭解本文的背景和內容安排,並提供進一步學習的資源和途徑。
Plantuml 圖表
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title MicroPython微控制器嵌入式程式設計
package "物聯網架構" {
package "感知層" {
component [感測器] as sensor
component [執行器] as actuator
component [嵌入式裝置] as device
}
package "網路層" {
component [閘道器] as gateway
component [MQTT Broker] as mqtt
component [邊緣運算] as edge
}
package "平台層" {
cloud "IoT Platform" as platform
database [時序資料庫] as tsdb
component [規則引擎] as rules
}
package "應用層" {
component [監控儀表板] as dashboard
component [告警系統] as alert
component [數據分析] as analytics
}
}
sensor --> device : 資料採集
device --> gateway : 資料傳輸
gateway --> mqtt : MQTT 協議
mqtt --> edge : 邊緣處理
edge --> platform : 雲端上傳
platform --> tsdb : 資料儲存
platform --> rules : 規則處理
rules --> alert : 觸發告警
tsdb --> analytics : 資料分析
analytics --> dashboard : 視覺化
@enduml此圖示說明:
此圖示呈現了讀者學習 MicroPython 的流程,從開始瞭解 MicroPython,到學習本文內容,再到實踐與應用,最終深入探索。這一流程體現了本文的指導作用和讀者的學習路徑。
本文結構
章節安排
本文共分為多個章節,每個章節圍繞 MicroPython 的不同方面進行探討。從基礎概念到進階應用,本文力求全面覆寫 MicroPython 的各個重要主題。
學習建議
讀者在學習本文內容時,應當結合實際操作,親自實踐程式範例,以加深理解。同時,也建議參考本文提供的相關資源,進一步擴充套件知識面。
內容解密:
本段落主要介紹了本文的結構安排和學習建議,強調了實踐操作的重要性,並鼓勵讀者參考相關資源,以達到更好的學習效果。
內容解密:
本段落總結了本文的主要內容和學習目標,重申了 MicroPython 的重要性和本文的指導作用。
希望這份改寫內容符合您的要求!如果需要進一步調整,請隨時告知。
MicroPython 的簡介
MicroPython 是針對微控制器和嵌入式系統重新實作的 Python 程式語言。
微控制器是將電腦縮小到單一、非常小的晶片上的裝置。嵌入式系統則是在較大的機械或電氣系統中運作的電腦。嵌入式系統通常使用微控制器。
本文透過四種典型但不同的裝置來介紹、探索和解釋 MicroPython,所有這些裝置的核心都是一個微控制器。
為何使用微控制器?
這些裝置與其他型別的電腦非常不同。大多數電腦包含許多不同的元件:記憶體、儲存和處理是物理上分離的元件,包含各種專門的晶片。它們可能還包含用於聲音、圖形和網路功能的額外元件。這樣的電腦比本文中使用的根據微控制器的資源有限的裝置要強大得多。
這引出了兩個重要的問題:
- 為什麼要使用如此小、功能有限的根據微控制器的裝置?
- 為什麼要使用 Python?
回答這些問題可以說明為什麼 MicroPython 引起了這麼大的轟動。
為什麼是 Micro?
電腦是令人驚嘆且似乎具有魔力的東西。例如,與世界另一端的人進行視訊通話現在已經司空見慣。然而,僅僅 20 年前,這還是科幻小說中的情節。
「任何足夠先進的技術都與魔法無異。」—— 阿瑟·克拉克,《預言的危險:想像力的失敗》
科幻小說作家阿瑟·克拉克的這句名言表明,先進的技術看起來像是令人敬畏的魔法。他忘了提到,如果先進技術無處不在,那麼它就會變得枯燥無味。熟悉和普遍性會消除大多數人的驚奇感,除了那些最具探究精神的人。
我指的是什麼?
我剛好夠老,記得一個沒有電腦的世界。在大學時期,我花了很多時間連線到多使用者、根據文字的虛擬世界,與來自全球各地連線到伺服器的人們協作。這感覺就像魔法。例如,我可以與我的同伴使用者聊天,詢問他們當地的天氣狀況,並立即知道舊金山、特拉維夫或新加坡的天氣狀況(通常比倫敦的天氣要好)。知道這些資訊,更加重要的是,知道如何取得這些資訊,感覺就像魔法。
根據你的年齡,你可能會對我的例子產生兩種不同的反應:
- 對那些美好的、令人興奮的、神奇的早期網際網路時代產生懷舊之情。
- 別再感嘆那些美好的舊時光了;你沒聽說過社交媒體嗎?
如今,我自己的孩子們對用手機視訊通話給祖父母感到司空見慣。他們不再對這樣的工程壯舉感到驚奇或讚嘆。相反,就像他們之前的幾代孩子一樣,他們更被故事、傳說和童話中的魔力所吸引和娛樂。
為什麼?
為什麼是微控制器?
想像一下,如果日常物件能夠活起來,並且按照我們的意願運作,這將會多麼令人興奮。在J.K.羅琳的《哈利波特》系列中,充滿了被施予魔法的物品、魔力以及咒語,這些都讓讀者沉浸在一個充滿奇幻的世界裡。同樣,在託爾金的《中土世界》、古希臘傳說、超級英雄故事以及《星球大戰》中的原力,都讓我們能夠暫時脫離現實,進入一個充滿魔幻與驚奇的世界。
那麼,這與微控制器有什麼關係呢?微控制器是一種嵌入式計算裝置,它讓程式設計師能夠將日常物品變成可程式化的「魔法」物品。當這些物品內嵌微控制器時,它們就變得可程式化,具有自主性和能動性,不再只是靜止的物件。這些微控制器足夠小,可以被嵌入到其他物件中,從而將日常用品轉變成具有行為和互動能力的「魔法」物品。
任何具備正確知識的人,都可以透過編寫程式碼來「施咒」,改變這些物件的行為和活動。這使得我們的世界變得可程式化,就像在虛構的魔法世界中,透過咒語來控制一切。想像一下,我們可以問自己:「如果我能夠程式設計這些裝置,我會做什麼?」正如Seymour Papert所說,學習編寫程式碼的人不僅能夠掌握現代最強大的技術,還能夠接觸到科學、數學和藝術領域中最深刻的思想。
為什麼選擇Python?
Python是一種易於學習、廣泛使用且富有表現力的程式語言。它簡潔明瞭,讓人能夠輕鬆地表達自己的想法。此外,Python擁有一個組織良好、積極活躍、多樣化且友好的全球社群。
圖1-1顯示了2016年Python在IEEE排名中位列第三的程式語言。Python的創始人Guido van Rossum指出,由於MicroPython的出現,Python在嵌入式領域也佔有一席之地。
對於所有經驗層次的Python開發者來說,有大量的教育資源可供使用。無論你是初學者還是有經驗的程式設計師,都可以找到免費的教程、課程和線上社群來學習和成長。本文不會包含Python的入門教程,因為有許多優秀的資源可供參考,包括Jake VanderPlas的《Python速覽》以及Allen Downey的《Think Python》。
值得注意的是,學習Python 3並避免使用Python 2。Python 2是一種較早版本的語言,由於遺留原因仍然被廣泛使用,但它將在2020年後停止支援。雖然Python 2和Python 3非常相似,甚至可以編寫相容兩者的程式碼,但Python 3正在積極開發中,包含了許多對Python 2的改進和新功能,這些在Python 2中永遠不會可用。
MicroPython是Python 3的重新實作版本,除了一些差異外,你對Python的瞭解同樣適用於MicroPython。兩者之間最明顯的差異是,MicroPython是為了在極度受限的環境下工作而設計的,例如在micro:bit上只有16千位元組的RAM。MicroPython直接在硬體上執行,沒有底層作業系統如Windows、macOS或Linux,所有通常由作業系統提供的操作和服務都由MicroPython直接處理。因此,MicroPython實際上就是作業系統。
除了少數例外,Python的所有語言特性在MicroPython中也都具備。由於裝置的限制,MicroPython預設情況下不包含完整的標準函式庫,而是根據裝置的不同,包含標準函式庫的子集,通常以高效的嵌入式方式重新實作。
MicroPython與Python的主要差異:
- MicroPython是為了在資源極度受限的環境下執行而設計的。
- MicroPython直接在硬體上執行,無需底層作業系統。
- MicroPython包含Python 3的大部分語言特性,但標準函式庫可能不完整。
程式碼範例1:閃爍LED燈
import pyb
# 初始化LED燈
led = pyb.LED(1)
while True:
# 開啟LED燈
led.on()
# 延遲500毫秒
pyb.delay(500)
# 關閉LED燈
led.off()
# 延遲500毫秒
pyb.delay(500)
內容解密:
import pyb:匯入pyb模組,該模組提供了對Pyboard硬體的控制功能。led = pyb.LED(1):初始化第一個LED燈,將其指定給led變數。while True:進入無限迴圈,不斷執行迴圈內的程式碼。led.on()和led.off():分別開啟和關閉LED燈。pyb.delay(500):每次開關LED燈後延遲500毫秒,使得閃爍效果可見。
這個範例展示瞭如何使用MicroPython控制Pyboard上的LED燈,使其不斷閃爍。透過這個簡單的例子,我們可以看到MicroPython如何讓硬體“活”起來,並按照我們的意願運作。
為什麼MicroPython如此特別?
MicroPython不僅僅是一種程式語言,它還是一個完整的作業系統,能夠直接控制硬體。這使得它非常適合用於嵌入式系統開發,在資源有限的裝置上執行複雜的任務。它讓開發者能夠以更直觀、更易於理解的方式與硬體互動,就像在使用魔法一樣,讓無生命的物件變得生動起來。
例如,您熟悉Python的語法,瞭解如何定義和呼叫函式,並且知道如何在程式碼中控制流程。 ↩︎