“變化是唯一不變的”是希臘哲學家赫拉克利特的智慧明珠。這一點在數字電子世界中最為真實。C 語言是 1970 年代初期計算熱潮的產物,自從 BASIC 語言放棄其對微控制器編程的統治地位以來,它就一直主導著嵌入式開發。今天風向又變了,這次轉向了日益流行的 Python 編程語言。MicroPython 在過去幾年出現,以彌合面向桌面的 CPython 參考語言與相對有限的微控制器硬件規格之間的差距。
盡管如此,對于新手嵌入式開發人員來說,MicroPython 還是有點挑戰。輸入CircuitPython,它是 MicroPython 語言的一個分支,經過調整以滿足學生和其他希望學習現代嵌入式系統開發的人的特定需求。自 2017 年夏季首次發布以來,由Adafruit Industries主辦的CircuitPython 語言在制造商和教育標記中的受歡迎程度一直在穩步增長。
在其當前迭代中,即本文的 6.1.0 版,CircuitPython 支持由 Microchip Technology Atmel SAMD21和SAMD51微控制器以及 Nordic Semiconductor nRF52840片上系統 (SoC) 提供支持的眾多開發板。以前的 CircuitPython 版本支持流行的 ESP8266 微控制器,但從版本 4 開始不再支持。雖然 CircuitPython 在許多方面與 MicroPython 相似,但它確實去除了復雜性并為那些剛剛接觸嵌入式電子產品的人提供了更直接的開發工作流程。
CircuitPython 入門
首先,與 MicroPython 一樣,CircuitPython 需要將特殊固件上傳到開發板,稱為 USB 閃存版本 2 或 UF2。許多受支持的開發板都預裝了固件。但是,所有開發板都提供一種機制,使系統進入引導加載程序模式,從而允許刷新 UF2 固件。UF2 固件特定于每個開發板,因此請確保下載特定于您的開發板的最新固件。CircuitPython網站使這項任務變得簡單。將開發板插入計算機并啟用引導加載程序模式后,開發板應顯示為名為BOOT的閃存驅動器。只需將之前下載的UF2文件拖入BOOT的根目錄即可駕駛。成功安裝后,將出現一個名為CIRCUITPY的新驅動器。至此,開發板已經為它的第一個項目做好了準備。
雖然任何代碼編輯器都可用于編輯 CircuitPython 源文件 (.py ),但建議初學者使用Mu 編輯器。安裝并運行編輯器后,只需單擊“新建”按鈕即可創建一個空白的 Python 腳本文件。有大量示例代碼可以滿足幾乎所有需求。當然,舉世聞名的Blinky LED就是硬件世界的Hello, World。這是一個閃爍 LED 的示例:
進口板
進口數碼
導入時間
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
而真實的:
led.value = 真
時間.睡眠(0.5)
led.value = 假
時間.睡眠(0.5)
輸入代碼后,將文件命名為code.py并將其保存到CIRCUITPY驅動器的根目錄。如果您將文件保存在其他地方,例如桌面,只需單擊文件并將其從桌面拖動到CIRCUITPY驅動器圖標即可。重要說明,文件名對 CircuitPython 很重要,因為有些文件名是為特殊目的保留的。code.py 文件在每次重新加載后運行。要建立僅在啟動時運行一次的任何設置函數,請將該代碼放在名為boot.py的文件中。
CircuitPython 的一個很好的特性是它可以檢測到任何時候添加或更新文件并自動重新啟動代碼。無需按下重置按鈕或拔下/重新插入開發板的 USB 電纜。所有源代碼都保留為用戶可讀文件,因此您可以將開發板連接到任何計算機并以零配置管理工作進行代碼更改。換句話說,您始終在設備上擁有最新的源代碼。
CircuitPython 通過使用庫使擴展功能變得非常簡單。在CIRCUITPY驅動器的根文件夾中,應該有一個名為 lib 的文件夾。如果沒有,使用計算機的文件資源管理器從頭開始創建文件夾是安全的。這是存儲添加功能或與傳感器和執行器交互所需的所有支持文件的地方。CircuitPython 提供標準的庫包,這些庫在 CircuitPython 開發人員中很受歡迎。這些庫文件針對嵌入式設備進行了顯式優化,并以 . MPY文件擴展名。確保庫包的版本號與您正在使用的 CircuitPython 的版本號相匹配至關重要。在升級 CircuitPython 固件時,不要忘記同時升級庫包。
CircuitPython 與 MicroPython
CircuitPython 和 MicroPython 之間的其他一些主要區別包括:
所有構建都啟用了浮點數。
不支持并發。
CircuitPython 中引入了一種安全模式,可在檢測到硬崩潰或掉電情況時阻止用戶代碼運行。
模塊別名不可用。換句話說,uos和utime模塊不能作為os和time 使用。為了保持 CPython 兼容性,CircuitPython 操作系統和時間模塊是其 CPython 對應項的子集。因此,CircuitPython 代碼在 CPython 中是可執行的,但反之則不一定。
引入存儲模塊來掛載文件系統。
與其他 Python 版本一樣,CircuitPython 通過讀取-評估-打印循環 (REPL) 終端提供交互式編程體驗。對于 CircuitPython,可以在主代碼完成后通過串行終端連接到電路板并按鍵盤上的任意鍵進入 REPL 環境。輸入 REPL 會禁用自動重新加載功能。
CircuitPython 的另一個令人興奮的方面是Blinka。雖然 CircuitPython 在微控制器上運行,但 Blinka 將 CircuitPython 庫帶到了微型個人計算機上,這些個人計算機被稱為單板計算機 (SBC),例如 Raspberry Pi。對于那些來自桌面開發人員背景的人,Blinka 使 MicroPython 成為可在面向桌面的 Python 版本中運行的 pip 可安裝 Python 庫,從而使使用與 SBC 相同的庫與各種傳感器和執行器交互成為可能用于微控制器。
Python,Python,無處不在
CircuitPython 是進入嵌入式系統軟件開發“Python 化”的激動人心的入口。它的設計簡單,加上強大的功能集,使其成為教育工作者和創客等人的誘人編程語言。CircuitPython 還為專業人士提供了獨特的機會。對于嵌入式工程師來說,學習 Python 等強大語言的機會有助于教授桌面和 Web 應用程序技能。對于傳統的桌面應用程序軟件開發人員,CircuitPython 提供了一種將他們的編碼技能從 PC 遷移到嵌入式系統的方法。
無論您的經驗如何,CircuitPython 都是嵌入式開發領域值得一提的新編程語言。它的獨特功能使嵌入式開發入門變得輕而易舉,同時還提供了一些新概念,這些概念也應該會吸引資深程序員。CircuitPython 是嵌入式開發編程語言傳奇歷史中一個受歡迎的新成員。
我們想知道您是否有使用 CircuitPython 的經驗?在Twitter 上與我們聯系并與我們分享您的 CircuitPython 支持的項目!有興趣開始使用 CircuitPython,請查看此Adafruit CircuitPython 入門工具包。
審核編輯黃昊宇
-
python
+關注
關注
56文章
4797瀏覽量
84752
發布評論請先 登錄
相關推薦
評論