孫小娟
(重慶電子工程職業學院 重慶 401331)
K-12教育即基礎教育,是教育的根本,決定了一個國家國民的基本素質和民族的發展偉業。國內K-12編程教育理念還不夠成熟,沒有引起足夠的重視,只有民間有些許的K-12編程培訓機構,且大多是軟硬件分離的[1]。即使是目前經驗豐富的程序員,軟硬件都擅長的及其少,而軟硬件的結合,才是未來互聯網發展的大趨勢。因此,本文提出并設計了軟硬件結合的面向K-12的可視化編程平臺,使學生在學習軟件編程的同時,可以學習智能硬件,提高其綜合能力。
pencilcode一種一種協作式的基于網頁的在線模塊化編程網站[2],可以畫畫、音樂及創作游戲,小到6歲的孩子都可以使用它。在pencilcode中,完美的實現了塊編程和文本編程之間的轉換,屏幕被分成了兩部分,一部分用于顯示項目的源碼,一部分則輸出代碼的運行結果。用戶點擊設置按鈕,可以在CoffeeScript和JavaScript兩種語言間中進行選擇,從中選擇語言和已經添加的函數庫,窗格語言可以選擇CSS或者HTML。同時,為了便于用戶更好的交流,pencilcode提供了一個在線論壇。
pcDuino是一款小巧而強大的高性能、高性價比的迷你PC平臺,它結合了ARM架構的迷你PC和arduino的優勢,實現了開源軟件Linux和開源硬件arduino生態系統的完美結合[3]。類似于樹莓派和arduino的合體,且相比樹莓派配置更高,讀寫速度更快,被稱為“arduino與迷你PC的合體”。pcDuino配備簡單易用的編譯工具,能夠完全運行PC操作系統,如ubuntu和Android ICS等。同時,pcDuino3B自帶了Cloud 9 IDE,用戶可以自己下載pcDuino對應的scratch或ArduBlock源碼到板子上進行可視化編程。pcDuino也是一個服務器,無線路由器,用于3D打印,IP-PBX交換,使用計算機視覺OpenCV等等。
本文的開發是基于在線可視化編程網站pencilcode進行的,系統硬件環境的搭建如圖1所示:

圖1 pcduino環境搭建
本文采用pcDuino3B硬件,它自帶ubuntu 12.04系統,但ubuntu 12.04的版本號比較低,因此將pcDuino的系統升級到ubuntu 14.04。并安裝node.js,然后將pencilcode的源碼移植到pcDuino上。johnny-five是一種JavaScript機器人和IoT的編程框架,對pcDuino不完全兼容。通過johnny-five框架與pcDuino進行通信時,需要同時安裝一個針對pcDuino的適配器,即IO插件。所以,在移植johnny-five源碼的同時,移植了pcduino-io庫。
本文所設計的可視化編程平臺通過JavaScript運行環境node.js和Johnny-Five框架控制智能硬件[4]。
硬件可視化編程模塊的實現同軟件可視化編程模塊相似,首先是塊編輯,用拖拽的方式拉取相應的模塊,再利用Droplet編輯器將塊編程程序轉化成文本化代碼。具體實現時,由于pcDuino不支持JavaScript語言,且即使用C語言編寫程序調用其模塊,程序都比較繁瑣。因此,我們通過調用Johnny-Five框架和其針對pcDuino的IO插件pcduino-io,編寫簡單的文本化代碼,實現對pcDuino硬件模塊的調用,具體實現過程如圖2所示。

圖2 智能硬件可視化編程實現過程
“Hello world”程序是無處不在的,它幾乎是每一個程序員敲的第一個程序。軟件界的“Hello world”,一般是通過編程使程序在屏幕打印輸出“Hello world”;相對應地,硬件界的“Hello world”,就是LED燈的閃爍,以測試一個單片機,開啟硬件編程世界。在完成硬件可視化編程模塊后,我們首先測試了“Hello world”程序,即LED燈的閃爍。在編程頁面,選擇智能硬件模塊,在跳轉到的智能硬件編程頁面,拉取相應的可視化模塊,并選擇適當的引腳和參數,本文例子中選擇13號引腳。然后在物理pcDuino開發板上,將LED燈連接到pcDuino的13引腳上,在編程頁面中點擊運行按鈕,觀察pcDuino開發板上LED燈變化,發現LED燈閃爍,則實驗成功,LED燈閃爍文本化程序代碼如圖3所示,LED閃爍如圖4所示。

圖3 LED閃爍代碼

圖4 LED閃爍效果圖
本文采用pencilcode作為軟件可視化編程工具,本pcDuino為硬件開發平臺。在系統功能設計實現方面,本文完成了pcDuino硬件環境的搭建過程,包括ubuntu系統的安裝、node.js的安裝、johnny-five庫和pcduino-io庫源碼移植,及pencilcode源碼的移植。通過Droplet編輯器和johnny-five框架,實現了基于pencilcode編程平臺與pcDuino硬件相結合的智能硬件可視化編程模塊,通過LED閃爍效果進行了測試。