謝作如
涉及學(xué)科:技術(shù)、工程
開(kāi)源硬件的出現(xiàn),讓中小學(xué)的編程教育不再限制在虛擬世界,開(kāi)始與物理世界互動(dòng)。從Arduino、樹(shù)莓派和pcDuino到拿鐵熊貓,各種品牌的開(kāi)源硬件不斷涌現(xiàn),推動(dòng)了我國(guó)創(chuàng)客教育和STEM教育的發(fā)展。2016年,因?yàn)楦咧行畔⒓夹g(shù)教材選擇了Python語(yǔ)言,于是micro:bit、掌控板和虛谷號(hào)快速崛起,成為當(dāng)前中小學(xué)創(chuàng)客教育的重要選擇之一。
開(kāi)源硬件的快速發(fā)展,給中小學(xué)教師帶來(lái)了更多的選擇,但同時(shí)也帶來(lái)了新的麻煩。因?yàn)椴煌拈_(kāi)源硬件采用的芯片不同,其支持的編程語(yǔ)言和編程工具也各不相同,甚至連引腳的編號(hào)、運(yùn)行的電壓和支持的擴(kuò)展模塊也不同。選擇Arduino、micro:bit還是掌控板(如圖1)?一些剛剛?cè)腴T的教師難免會(huì)陷入選擇恐懼。有沒(méi)有一種編程語(yǔ)言,用統(tǒng)一的編程規(guī)范來(lái)控制不同的開(kāi)源硬件?這道看似無(wú)解的難題,隨著pinpong庫(kù)的出現(xiàn),讓我們看到了曙光。
pinpong的原理和設(shè)計(jì)理念
pinpong庫(kù)是一個(gè)基于Firmata協(xié)議開(kāi)發(fā)的Python硬件控制庫(kù)。2020年春,當(dāng)虛谷計(jì)劃組委會(huì)的一線教師們提出相關(guān)需求時(shí),上海DFRobot的創(chuàng)客們欣然承擔(dān)了開(kāi)發(fā)任務(wù)。歷經(jīng)三個(gè)多月的時(shí)間,他們推出了測(cè)試版,得到廣大教師和專家的好評(píng)。目前pinpong的最新版本為0.3。
1. pinpong的原理
pinpong是如何做到用統(tǒng)一的語(yǔ)言控制不同的硬件?其原理是給開(kāi)源硬件燒錄一個(gè)特定的固件,使開(kāi)源硬件可以通過(guò)串口與電腦通信,執(zhí)行各種命令。這個(gè)特定的庫(kù)也是一個(gè)廣泛流行的開(kāi)源通信協(xié)議,名字叫做Firmata。pinpong庫(kù)的名稱由“Pin”和“Pong”組成,“Pin”指引腳,“pinpong”為“乒乓球”的諧音,指信號(hào)的往復(fù)(如下頁(yè)圖2)。
目前pinpong庫(kù)支持Arduino、掌控板、micro:bit等開(kāi)源硬件,同時(shí)支持虛谷號(hào)、樹(shù)莓派和拿鐵熊貓等。借助pinpong庫(kù),直接用Python代碼就能給各種常見(jiàn)的開(kāi)源硬件編程。
2.pinpong的設(shè)計(jì)理念
pinpong庫(kù)的設(shè)計(jì),是為了讓開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中不用被繁雜的硬件型號(hào)束縛,而將重點(diǎn)轉(zhuǎn)移到軟件的實(shí)現(xiàn)。哪怕程序編寫初期用Arduino開(kāi)發(fā),部署時(shí)改成了掌控板,只要修改一下硬件的參數(shù)就能正常運(yùn)行,實(shí)現(xiàn)了“一次編寫處處運(yùn)行”。
pinpong的編程規(guī)范
1.pinpong的安裝
pingpong庫(kù)的安裝和Python的其他庫(kù)安裝一樣,在命令行下用pip命令即可。參考命令:pip install pinpong。
2.pinpong的基本用法
以Arduino UNO為例,表1中的代碼,將點(diǎn)亮Arduino板載的LED燈(D13引腳)。
從上述代碼可以看出,通過(guò)pinpong庫(kù)控制開(kāi)源硬件的代碼不僅簡(jiǎn)潔,而且容易理解。初始化硬件只要正確輸入硬件的品牌和型號(hào)即可。如果端口號(hào)省略,pinpong會(huì)自動(dòng)掃描本機(jī)可用的所有串口,然后給硬件燒錄特定的固件。這樣一來(lái),開(kāi)源硬件的入門門檻降到了最低:只要能辨別開(kāi)源硬件的型號(hào),并且知道其引腳的正確編號(hào)即可。
在引腳控制方面,pinpong的語(yǔ)法跟micro:bit和掌控板是一致的,同時(shí)又兼容MicroPython的標(biāo)準(zhǔn)語(yǔ)法。例如,電平信號(hào)輸出處改為“l(fā)ed.value(1)”,代碼也能正常運(yùn)行,非常靈活。而且,一臺(tái)計(jì)算機(jī)還能同時(shí)連接多塊開(kāi)源硬件,彼此可以互動(dòng)。
pinpong的應(yīng)用案例
1.數(shù)據(jù)科學(xué)應(yīng)用案例:傳感器數(shù)據(jù)的采集
案例背景:在新版的普通高中信息技術(shù)教材中,增加了“傳感與控制”方面的學(xué)習(xí)內(nèi)容。這里的“傳感”指通過(guò)傳感器采集外界環(huán)境中的各種信息,如溫度、聲音、光線等。利用pinpong庫(kù),只要在普通電腦上接上一塊開(kāi)源硬件,如Arduino、掌控板,然后再接相應(yīng)的傳感器即可。
器材清單:(1)開(kāi)源硬件:Arduino;(2)擴(kuò)展模塊:溫度傳感器。
參考代碼如圖3所示。
2.人工智能應(yīng)用案例:迎賓機(jī)器人
案例背景:人臉識(shí)別是人工智能方面的經(jīng)典應(yīng)用,很多教材都會(huì)通過(guò)各種方式去實(shí)現(xiàn)人臉識(shí)別。本案例采用了OpenCV,實(shí)現(xiàn)了對(duì)人臉的識(shí)別。只要攝像頭檢測(cè)到人臉,就會(huì)說(shuō)“您好”,并且驅(qū)動(dòng)舵機(jī)擺動(dòng)小手,向客人打招呼。
器材清單:(1)開(kāi)源硬件:Arduino;(2)擴(kuò)展模塊:舵機(jī);(3)電腦配件:攝像頭、小音箱。
參考代碼如下頁(yè)圖4所示。
pinpong的優(yōu)勢(shì)和價(jià)值分析
1.支持市場(chǎng)上絕大多數(shù)的開(kāi)源硬件
pinpong庫(kù)支持絕大多數(shù)的開(kāi)源硬件。目前pinpong庫(kù)已經(jīng)支持Arduino、虛谷號(hào)和掌控板,其他的開(kāi)源硬件支持已經(jīng)在規(guī)劃中,從下頁(yè)表2可以看出。實(shí)際上,開(kāi)源硬件的品牌雖然很多,但基本上可以分為Arduino(涵蓋了拿鐵熊貓和虛谷號(hào)等)、ESP32(包括ESP8266和掌控板等)、micro:bit和樹(shù)莓派(涵蓋了pcDuino和banana派等)這四個(gè)類別。
2.信息系統(tǒng)的開(kāi)發(fā)調(diào)試和遷移部署非常方便
pinpong庫(kù)是采用串口的形式與開(kāi)源硬件進(jìn)行通信,因而不管最終使用什么硬件,信息系統(tǒng)的開(kāi)發(fā)都可以在普通電腦上進(jìn)行,只要計(jì)算機(jī)上接一塊Arduino或掌控板就行。等到系統(tǒng)調(diào)試成功后,將代碼遷移到虛谷號(hào)、樹(shù)莓派和拿鐵熊貓等開(kāi)源硬件,或者NUC(Next Unit of Computing,Intel的迷你電腦)、HTPC(Home Theater Personal Computer,即家庭影院電腦)、Mac Mini(蘋果的迷你電腦),幾乎不用做任何修改即可正常運(yùn)行。
3.讓人工智能應(yīng)用結(jié)合硬件更加方便
自國(guó)務(wù)院發(fā)布《新一代人工智能發(fā)展規(guī)劃》以來(lái),全國(guó)各地涌現(xiàn)出一大批人工智能教材。但對(duì)于中小學(xué)生來(lái)說(shuō),沒(méi)有結(jié)合硬件的人工智能應(yīng)用總不夠酷炫有趣,缺乏“生活”氣息。
目前,Python是當(dāng)之無(wú)愧的人工智能第一編程語(yǔ)言,也是當(dāng)前絕大多數(shù)中小學(xué)人工智能教材采用的編程語(yǔ)言。在pinpong庫(kù)的支持下,很多人工智能應(yīng)用只要增加幾行代碼就能夠感知外部環(huán)境,并且控制各種電機(jī),實(shí)現(xiàn)多模態(tài)的交互。如本文的案例2本來(lái)就是一個(gè)經(jīng)典的人臉識(shí)別案例,僅僅多加了一個(gè)舵機(jī),人工智能應(yīng)用就可愛(ài)起來(lái)。