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