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