劉曉靜 滕永豐
以Arduino為基礎的創意電子類創客教育課程正逐步在中小學推廣開來。然而,由于受到其本身技術門檻的限制,創意電子類課程的開設對廣大師生提出了巨大的挑戰(Arduino需要通過C/C++語言編程實現創意,這對低年齡段的學生來說難度太大)。
圖形化編程工具可以降低學習的難度,Mixly(全稱為Mixly_Arduino,中文名為米思齊)因此應運而生,它是由北京師范大學教育學部創客教育實驗室傅騫教授團隊開發的圖形化編程軟件。
教師做桌面創客到了一定的階段,難免想嘗試物聯網,想與手機、WIFI相連,但沒有一定的C語言功底是不行的,不過不用灰心。Mixly現有版本,支持手機藍牙與Arduino的連接,這里筆者就以安卓手機結合Arduino控制器,利用Mixly和App Inventor編程,實現手機控制板載LED燈的亮滅。
用Mixly為Arduino控制器編程,用App Inventor編寫一款手機控制軟件,二者通過藍牙配對,實現手機控制板載LED燈。
(1)Arduino控制器及USB:本例中用Dfrobot公司的Romeo BLE多合一控制器,它自帶了藍牙模塊的接口APC220,而且這個主控板可以驅動電機,做藍牙遙控車也很方便。
(2)藍牙模塊:App Inventor里面的藍牙功能對應的是藍牙2.0,盡管筆者的Romeo BLE控制器自帶藍牙4.0,但受App Inventor的限制,必須換用藍牙模塊2.0標準。
藍牙模塊的選擇有兩種:一種是Dfrobot生產的,與Romeo BLE控制器相匹配,連接起來相當省事的DF-BluetoothV3藍牙串口模塊(如圖1),注意它的藍牙協議是Bluetooth Specification v2.0+EDR,符合筆者的要求,缺點是價格小貴。

另一種是BT06藍牙串口模塊(如圖2),兼容HC-06,藍牙協議為Bluetooth Specification V2.1+EDR,也符合要求。優點是價格低,缺點是連接要用到四根一頭公、一頭母的杜邦線,還要注意接法,本例用的就是這種普通的BT-06藍牙串口模塊。

Romeo BLE多合一控制器上有APC220接口專門用于連接藍牙接口,BT06藍牙串口模塊有四個引腳,其中VCC接5V,GND接GND,TXD接控制器APC220的RX,RXD接控制器APC220的TX,APC220共有七個接口,用了四個,余下三個空著即可(如圖3)。

Mixly:0.984版本。
App Inventor2:安卓手機端圖形化編程軟件,目前國內已經有中文服務器了,可以在線編程,手機直接掃描二維碼或使用AI伴侶即可運行,比較方便。
Mixly的編程如圖4所示。

App Inventor的編程:從“通信連接”拖入一個藍牙客戶端,用于與Arduino通信。拖入一個列表選擇框,用于選擇需要連接的藍牙設備。拖入兩個標簽用于顯示藍牙狀態。拖入一個按鈕用以斷開藍牙,拖入兩個按鈕用于發送開燈命令和關燈命令以控制板載的LED燈,界面完成后如圖5所示。組件設計完畢,接下來進行程序的編寫,總程序如下頁圖6所示。


現在對程序分別進行說明。
當screen1初始化的時候,將“斷開連接按鈕”的“啟用”屬性設置為“false”,由于剛開始運行時藍牙設備并未連接,因此“斷開連接”按鈕需要設置為假。藍牙BT06模塊要先成為已配對設備,然后就可以打開列表進行選擇,因此第二句的作用是把已配對藍牙列表顯示出來供用戶選擇。
藍牙使用的標準流程即配對→連接,配對只在新設備第一次連接時用一次,連接則是每次都需要操作的。因此,藍牙BT06模塊在加電以后,在手機上先要配對成功,這樣在“已配對列表中”就可以找到了(如下頁圖7、圖8)。

本例中,藍牙BT06模塊,從模式、初始密碼1234、串口缺省波特率為9600bps,這三者可根據所用模塊的資料進行相應的修改,需要專門的串口調試模塊,此處不再展開,本文所用均為缺省值。
狀態指示LED:用于指示藍牙模塊所處狀態,LED燈閃爍方式與藍牙模塊狀態對應如下頁表所示。

接下來,當用戶點擊了列表中的選項后,就需要連接藍牙了,首先斷開原來連接的藍牙設備,接下來連接用戶選擇的藍牙設備,此處有地址、唯一編號兩個參數(如下頁圖9)。“地址”:Arduino設備上的藍牙模塊對應的MAC地址,也就是上一步操作后的“選中項”;“唯一編號”:
00001101-0000-1000-8000-00805F9B34FB。

此處的唯一編號即UUID,因為筆者使用的是藍牙串口與Arduino通信,因此使用這個編號,此編號不可以變。

UUID是“Universally Unique Identifier”的縮寫,通用唯一識別碼的意思。對于藍牙設備,每個服務都有一個與它對應的UUID(唯一的)。連接藍牙這個動作會返回連接成功還是失敗,成功即為true,失敗即為false,此處可以使用如果判斷來判斷藍牙連接成功或者失敗,如果連接成功就顯示“已連接”,同時讓“斷開連接”按鈕可使用,否則連接失敗就顯示“未連接”,同時讓“斷開連接”按鈕不能使用。
接下來,筆者介紹一下三個按鈕的功能:①“斷開連接”按鈕點擊后斷開連接,同時設置一下藍牙狀態和按鈕禁用;②開燈按鈕點擊后發送文本“a”,關燈按鈕點擊后發送文本“b”,即點擊兩個按鈕分別發送不同的字符,那么Arduino程序就可以根據接收到的文本信息判斷是需要進行開燈還是關燈操作(如圖10)。
App Inventor程序編輯完畢即可打包apk下載到手機進行安裝了。Mixly端程序簡單,因為藍牙模塊就是串口通信,因此只要設置藍牙串口然后讀取串口數據進行判斷即可。程序編寫完成上傳到Romeo BLE控制板中,注意上傳的時候需要拔下藍牙模塊,上傳完畢后再插上藍牙模塊,此時模塊上的指示燈快速閃爍即為等待連接狀態,打開手機配對并連接,指示燈長亮即為已連接,然后點擊“開燈”“關燈”就可以嘗試控制板載的LED燈。