周賢杰 李玲雪 薛港瀟



創客書籍《愛上Arduino》(Massimo Banzi著)中,介紹了一個叫做“互動云”的互動媒體作品。這個作品利用Processing程序語言編寫代理程序(proxy),通過網絡從makezine.com下載RSS文件并提取文件中的所有關鍵詞,然后再計算“peace、love、Arduino”三個詞的數量,并且根據這三個數據產生一個代表色彩的RGB值,最后通過USB接口傳給Arduino,點亮一個RGB燈,顯示出具有特定意義的燈光色彩。
這個作品的實現,需要作者了解Processing的使用方法和功能,同時要具備Arduino的編程能力,熟悉串口通信和引腳控制,難度比較大。但是筆者發現,借助pinpong庫,并借助Python語言的requests庫(網頁爬蟲),實現這個項目的難度就降低了。
● 作品的創意思路
筆者準備用新的方案,重新實現(remake)這個“互動云”作品。因為技術更新,makezine.com上已經不提供RSS文件訂閱了,筆者改用“DF創客論壇”上的帖子信息。具體思路如下:
在“DF創客論壇”搜索“pinpong”,在返回的網頁信息中找三個關鍵字,分別為“arduino”“虛谷號”和“掌控板”,得到不同的關鍵字出現次數,然后分別對應0~255的數字,賦值為R、G、B,然后用pinpong庫來對應控制R、G、B三種顏色(RGB燈)。
這個RGB燈光的顏色就代表了pinpong庫的用戶中,使用“arduino”“虛谷號”和“掌控板”這三種開源硬件的比例。隨著用戶作品發布數量的變化,這個燈光的色彩也在同步變換,是不是很有意義?
● 作品的原理分析
“互動云”作品是一個典型的網頁爬蟲結合開源硬件的案例。網絡爬蟲是信息輸入,燈光顯示是信息的輸出,工作流程如圖1所示。
從圖1可以看出,獲取信息、處理信息和輸出信息,都需要特定的庫來實現,如爬蟲使用requests、網頁文本分析使用Beautiful Soup庫、開源硬件的驅動則需要pinpong。對這三個庫的簡要介紹如下頁表所示。
● 作品的硬件搭建
作品的硬件其實非常簡單,開源硬件加上RGB全彩LED模塊即可。開源硬件可以使用任何一塊Arduino、掌控板或者micro:bit等。考慮到RGB的LED模塊不夠亮,筆者在boson Kit中找了一個WS2812 RGB全彩燈帶模塊。
器材清單:任何一塊Arduino、Arduino擴展板、WS2812 RGB全彩燈帶。
筆者將燈帶連接在Arduino的數字口P7(其實從P2~P13,任何一個引腳都可以),作品實物連接如圖2所示。
因為使用了燈帶,所以在引用pinpong庫時,需要導入“NeoPixel”包。指令為:from pinpong.board import Board,Pin,NeoPixel。
● 作品的代碼編寫
平時教學已經習慣了用Jupyter Notebook,這次的代碼習慣上用Jupyter Notebook來寫。
首先要打開DF社區,在搜索欄搜索pinpong,然后在地址欄中得到URL地址,即https://mc.dfrobot.com.cn/search.php?mod=forum&searchid=44&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=pinpong。具體的代碼也非常簡潔,為了方便理解,筆者分為三個部分來呈現,具體見下方二維碼。
筆者統計了一下,代碼僅二十多行。而《愛上Arduino》中的項目,Processing的代碼加上Arduino的代碼,要超過一百多行。Python加pinpong的優勢就顯示出來了。
● 作品的測試和部署
計算機接上Arduino,運行代碼后,Arduino將自動燒寫一個特定的固件,然后就能看到Jupyter上輸出關鍵詞“Arduino”“虛谷號”和“掌控板”出現的次數。然后Arduino連接的RGB燈帶就開始點亮。要呈現什么樣的創意外觀呢?既然是“互動云”,就可以做成“云”的樣子,將硬件封裝在棉花中,如圖3所示。
在這個作品部署的過程中,pinpong的優勢再次得到了顯示。因為原來的作品用Processing,Processing對硬件的要求要高一些,無論是安裝程序還是運行程序都不如Python方便快速。筆者選擇了一款能夠運行Linux的硬件作為處理信息的“主機”,價格不到百元,使用的是國產芯片RK3308(ROCK PI開發板),經過測試,運行非常流暢。