劉曉靜 滕永豐
以Arduino為基礎(chǔ)的創(chuàng)意電子類創(chuàng)客教育課程正逐步在中小學(xué)推廣開來。然而,由于受到其本身技術(shù)門檻的限制,創(chuàng)意電子類課程的開設(shè)對廣大師生提出了巨大的挑戰(zhàn)(Arduino需要通過C/C++語言編程實現(xiàn)創(chuàng)意,這對低年齡段的學(xué)生來說難度太大)。
圖形化編程工具可以降低學(xué)習(xí)的難度,Mixly(全稱為Mixly_Arduino,中文名為米思齊)因此應(yīng)運而生,它是由北京師范大學(xué)教育學(xué)部創(chuàng)客教育實驗室傅騫教授團(tuán)隊開發(fā)的圖形化編程軟件。
教師做桌面創(chuàng)客到了一定的階段,難免想嘗試物聯(lián)網(wǎng),想與手機(jī)、WIFI相連,但沒有一定的C語言功底是不行的,不過不用灰心。Mixly現(xiàn)有版本,支持手機(jī)藍(lán)牙與Arduino的連接,這里筆者就以安卓手機(jī)結(jié)合Arduino控制器,利用Mixly和App Inventor編程,實現(xiàn)手機(jī)控制板載LED燈的亮滅。
用Mixly為Arduino控制器編程,用App Inventor編寫一款手機(jī)控制軟件,二者通過藍(lán)牙配對,實現(xiàn)手機(jī)控制板載LED燈。
(1)Arduino控制器及USB:本例中用Dfrobot公司的Romeo BLE多合一控制器,它自帶了藍(lán)牙模塊的接口APC220,而且這個主控板可以驅(qū)動電機(jī),做藍(lán)牙遙控車也很方便。
(2)藍(lán)牙模塊:App Inventor里面的藍(lán)牙功能對應(yīng)的是藍(lán)牙2.0,盡管筆者的Romeo BLE控制器自帶藍(lán)牙4.0,但受App Inventor的限制,必須換用藍(lán)牙模塊2.0標(biāo)準(zhǔn)。
藍(lán)牙模塊的選擇有兩種:一種是Dfrobot生產(chǎn)的,與Romeo BLE控制器相匹配,連接起來相當(dāng)省事的DF-BluetoothV3藍(lán)牙串口模塊(如圖1),注意它的藍(lán)牙協(xié)議是Bluetooth Specification v2.0+EDR,符合筆者的要求,缺點是價格小貴。
另一種是BT06藍(lán)牙串口模塊(如圖2),兼容HC-06,藍(lán)牙協(xié)議為Bluetooth Specification V2.1+EDR,也符合要求。優(yōu)點是價格低,缺點是連接要用到四根一頭公、一頭母的杜邦線,還要注意接法,本例用的就是這種普通的BT-06藍(lán)牙串口模塊。
Romeo BLE多合一控制器上有APC220接口專門用于連接藍(lán)牙接口,BT06藍(lán)牙串口模塊有四個引腳,其中VCC接5V,GND接GND,TXD接控制器APC220的RX,RXD接控制器APC220的TX,APC220共有七個接口,用了四個,余下三個空著即可(如圖3)。
Mixly:0.984版本。
App Inventor2:安卓手機(jī)端圖形化編程軟件,目前國內(nèi)已經(jīng)有中文服務(wù)器了,可以在線編程,手機(jī)直接掃描二維碼或使用AI伴侶即可運行,比較方便。
Mixly的編程如圖4所示。
App Inventor的編程:從“通信連接”拖入一個藍(lán)牙客戶端,用于與Arduino通信。拖入一個列表選擇框,用于選擇需要連接的藍(lán)牙設(shè)備。拖入兩個標(biāo)簽用于顯示藍(lán)牙狀態(tài)。拖入一個按鈕用以斷開藍(lán)牙,拖入兩個按鈕用于發(fā)送開燈命令和關(guān)燈命令以控制板載的LED燈,界面完成后如圖5所示。組件設(shè)計完畢,接下來進(jìn)行程序的編寫,總程序如下頁圖6所示。
現(xiàn)在對程序分別進(jìn)行說明。
當(dāng)screen1初始化的時候,將“斷開連接按鈕”的“啟用”屬性設(shè)置為“false”,由于剛開始運行時藍(lán)牙設(shè)備并未連接,因此“斷開連接”按鈕需要設(shè)置為假。藍(lán)牙BT06模塊要先成為已配對設(shè)備,然后就可以打開列表進(jìn)行選擇,因此第二句的作用是把已配對藍(lán)牙列表顯示出來供用戶選擇。
藍(lán)牙使用的標(biāo)準(zhǔn)流程即配對→連接,配對只在新設(shè)備第一次連接時用一次,連接則是每次都需要操作的。因此,藍(lán)牙BT06模塊在加電以后,在手機(jī)上先要配對成功,這樣在“已配對列表中”就可以找到了(如下頁圖7、圖8)。
本例中,藍(lán)牙BT06模塊,從模式、初始密碼1234、串口缺省波特率為9600bps,這三者可根據(jù)所用模塊的資料進(jìn)行相應(yīng)的修改,需要專門的串口調(diào)試模塊,此處不再展開,本文所用均為缺省值。
狀態(tài)指示LED:用于指示藍(lán)牙模塊所處狀態(tài),LED燈閃爍方式與藍(lán)牙模塊狀態(tài)對應(yīng)如下頁表所示。
接下來,當(dāng)用戶點擊了列表中的選項后,就需要連接藍(lán)牙了,首先斷開原來連接的藍(lán)牙設(shè)備,接下來連接用戶選擇的藍(lán)牙設(shè)備,此處有地址、唯一編號兩個參數(shù)(如下頁圖9)?!暗刂贰保篈rduino設(shè)備上的藍(lán)牙模塊對應(yīng)的MAC地址,也就是上一步操作后的“選中項”;“唯一編號”:
00001101-0000-1000-8000-00805F9B34FB。
此處的唯一編號即UUID,因為筆者使用的是藍(lán)牙串口與Arduino通信,因此使用這個編號,此編號不可以變。
UUID是“Universally Unique Identifier”的縮寫,通用唯一識別碼的意思。對于藍(lán)牙設(shè)備,每個服務(wù)都有一個與它對應(yīng)的UUID(唯一的)。連接藍(lán)牙這個動作會返回連接成功還是失敗,成功即為true,失敗即為false,此處可以使用如果判斷來判斷藍(lán)牙連接成功或者失敗,如果連接成功就顯示“已連接”,同時讓“斷開連接”按鈕可使用,否則連接失敗就顯示“未連接”,同時讓“斷開連接”按鈕不能使用。
接下來,筆者介紹一下三個按鈕的功能:①“斷開連接”按鈕點擊后斷開連接,同時設(shè)置一下藍(lán)牙狀態(tài)和按鈕禁用;②開燈按鈕點擊后發(fā)送文本“a”,關(guān)燈按鈕點擊后發(fā)送文本“b”,即點擊兩個按鈕分別發(fā)送不同的字符,那么Arduino程序就可以根據(jù)接收到的文本信息判斷是需要進(jìn)行開燈還是關(guān)燈操作(如圖10)。
App Inventor程序編輯完畢即可打包apk下載到手機(jī)進(jìn)行安裝了。Mixly端程序簡單,因為藍(lán)牙模塊就是串口通信,因此只要設(shè)置藍(lán)牙串口然后讀取串口數(shù)據(jù)進(jìn)行判斷即可。程序編寫完成上傳到Romeo BLE控制板中,注意上傳的時候需要拔下藍(lán)牙模塊,上傳完畢后再插上藍(lán)牙模塊,此時模塊上的指示燈快速閃爍即為等待連接狀態(tài),打開手機(jī)配對并連接,指示燈長亮即為已連接,然后點擊“開燈”“關(guān)燈”就可以嘗試控制板載的LED燈。