白二娃
我們已經(jīng)用Micro:bit做過不少編程試驗(yàn),也用APP Invertor編寫過手機(jī)APP。今天我們將兩者結(jié)合起來,編寫一個APP,讓安卓手機(jī)和Micro:bit通過藍(lán)牙連接起來。由于實(shí)現(xiàn)兩個設(shè)備連接后進(jìn)行基礎(chǔ)交互的代碼量較多,篇幅所限我們僅實(shí)現(xiàn)兩設(shè)備通過藍(lán)牙掃描和連接。后續(xù)實(shí)現(xiàn)交互的代碼您可以在掃碼下載源代碼后自行分析學(xué)習(xí)。
1. 安卓手機(jī)
2. Micro:bit板及數(shù)據(jù)線
3. APP Inventor編程平臺app.gzjkw.net或ai2.17coding.net
4. 擴(kuò)展下載網(wǎng)站iot.appinventor.mit.edu
5. Micro:bit編程平臺makecode.microbit.org
為了更好兼容Micro:bit的低功耗藍(lán)牙,我們沒有使用APP Invertor自帶的藍(lán)牙連接組件,而是添加了新的藍(lán)牙擴(kuò)展。
打開APP Invertor的支持網(wǎng)站(iot.appinventor.mit.edu)。在左邊Internet of Things菜單中可以找到BluetoothLE和BBC Micro:bit頁面。
1. BluetoothLE是APP Invertor專用的低功耗藍(lán)牙擴(kuò)展。在BluetoothLE頁面中點(diǎn)擊“Download the BluetoothLE extension ”把.aix擴(kuò)展文件下載到本地備用,也可以復(fù)制aix文件的網(wǎng)絡(luò)地址(http://iot.appinventor.mit.edu/assets/resourc
es/edu.mit.appinventor.ble-201907
01.aix)在導(dǎo)入項(xiàng)目擴(kuò)展時填入。
安裝該擴(kuò)展后可以讓APP Invertor編寫的程序通過手機(jī)藍(lán)牙搜索和連接低功耗藍(lán)牙設(shè)備,并進(jìn)行通信。
2. 在BBC Micro:bit頁面中,點(diǎn)擊“Download the BBC Micro:bit extension”可以下載到Micro:bit的專用擴(kuò)展。或在導(dǎo)入擴(kuò)展時直接填寫下載網(wǎng)址(http://iot.appinventor.mit.edu/assets/resources/SimpleMicrobit.aix)。APP Invertor安裝該擴(kuò)展后可以在手機(jī)連接后與Micro:bit板上的按鈕、引腳、LED等設(shè)備交互。
本例中我們僅需要實(shí)現(xiàn)兩個設(shè)備的藍(lán)牙連接,無需用手機(jī)與Micro:bit板做更多交互,因此只有需要測試有交互功能的源代碼MicrobitLED.aia時才需要安裝。
我們需要APP有搜索、連接、斷開等按鈕,有顯示周圍藍(lán)牙設(shè)備的列表,有顯示當(dāng)前狀態(tài)的文字。選擇搜索到的Micro:bit設(shè)備后點(diǎn)連接可以通過藍(lán)牙實(shí)現(xiàn)連接,點(diǎn)斷開可以斷開藍(lán)牙(如圖1)。
1. 登錄app.gzjkw.net,新建項(xiàng)目lanya,在APP Invertor組件面板的最后一項(xiàng)Extension——擴(kuò)展中導(dǎo)入下載的項(xiàng)目擴(kuò)展文件edu.mit.appinventor.ble-20190701.aix,也可直接填入網(wǎng)址安裝擴(kuò)展包。
2. 將BluetoothLE拖入工作面板。
3. 界面布局→水平布局,水平對齊→居中,寬度→充滿;從用戶界面拖入3個按鈕,組件列表中改名為“掃描、連接、斷開”,并修改按鈕文本為相應(yīng)名稱。
4. 用戶界面→標(biāo)簽,修改標(biāo)簽名和標(biāo)簽文本為“狀態(tài)”,用于顯示當(dāng)前藍(lán)牙狀態(tài)。
5. 用戶界面→列表顯示框,改名為“藍(lán)牙列表”,用于顯示和選擇搜索到的藍(lán)牙設(shè)備列表。
我們希望APP可以掃描可用的藍(lán)牙設(shè)備。當(dāng)點(diǎn)擊掃描按鈕,調(diào)用藍(lán)牙組件開始掃描,并更改狀態(tài)標(biāo)簽,顯示列表。
1. 切換至邏輯設(shè)計(jì)界面。
2. 組合模塊。掃描按鈕→當(dāng)掃描被點(diǎn)擊執(zhí)行。
3. BluetoothLE1→調(diào)用BluetoothLE1.StartScanning。組合積木:狀態(tài)→設(shè)置狀態(tài).文本為和文本→文本中填入“狀態(tài):掃描”。
4. 組合積木:藍(lán)牙列表→設(shè)置藍(lán)牙列表.可見性為和邏輯→真。設(shè)計(jì)這個可見性邏輯判斷是為了連接成功后可以隱藏列表,因?yàn)槿绻浇泻芏嗨{(lán)牙設(shè)備,列表會很長(如圖2)。
我們需要在列表中列出周圍所有可用的藍(lán)牙設(shè)備。
1. 組合模塊。BluetoothLE1→BluetoothLE1.DeviceFound,當(dāng)掃描到可用藍(lán)牙設(shè)備時。
2. 組合積木:藍(lán)牙列表→設(shè)置藍(lán)牙列表.元素字串為和BluetoothLE1→BluetoothLE1.DeviceList(如圖3)。
我們希望實(shí)現(xiàn)在列表中選中設(shè)備名稱后,點(diǎn)擊“連接”按鈕后通過藍(lán)牙連接Micro:bit。
1. 組合模塊。連接按鈕→當(dāng)“連接”被點(diǎn)擊。
2. 調(diào)用BluetoothLE1→Bluetoo
thLE1.StopScanning,停止掃描設(shè)備。
3. 組合積木:調(diào)用BluetoothLE1
→BluetoothLE1.連接,藍(lán)牙列表→選中項(xiàng)索引。通過藍(lán)牙連接選中的設(shè)備。
4. 設(shè)置狀態(tài).文本為“狀態(tài):連接中”。在手機(jī)中標(biāo)明當(dāng)前連接狀態(tài)(如圖4)。
當(dāng)成功連接設(shè)備時,我們希望通過狀態(tài)文本獲知連接已經(jīng)成功,并關(guān)閉藍(lán)牙設(shè)備列表。
1. 組合模塊。BluetoothLE1→當(dāng)BluetoothLE1.Connected。
2. 設(shè)置狀態(tài).文本為“狀態(tài):已連接”。
3. 設(shè)置藍(lán)牙列表可見性為“假”,關(guān)閉藍(lán)牙設(shè)備列表(如圖5)。
點(diǎn)擊斷開按鈕后,我們希望手機(jī)斷開設(shè)備連接,并通過顯示當(dāng)前狀態(tài)確認(rèn)斷開按鈕有效。
1. 組合模塊。斷開按鈕→當(dāng)“斷開”被點(diǎn)擊。
2. BluetoothLE1→調(diào)用Bluetoot
hLE1.斷開連接。
3. 組合模塊。BluetoothLE1→BluetoothLE1.Disconnected。
4. 設(shè)置狀態(tài)文本為“狀態(tài):已斷開”(如圖6)。
程序運(yùn)行中可能會遇到各種錯誤,如果程序沒有閃退的情況下我們希望能知道報錯信息。
1. 組合模塊。Screen1→當(dāng)“Screen1”出現(xiàn)錯誤。
2. 設(shè)置狀態(tài)文本為和文本→合并字符串,連接文本“錯誤:”和出現(xiàn)錯誤模塊本身的“消息”→“取消息”(如圖7)。
手機(jī)中的程序還需要Micro:bit中的程序配合。當(dāng)藍(lán)牙連接和斷開時在LED屏幕上顯示圖像作為連接成功的標(biāo)示。
1. 在https://makecode.microbit.org/中編寫程序。新建項(xiàng)目。
2. 設(shè)置Micro:bit藍(lán)牙連接方式為免配對連接,這樣任何設(shè)備都可以連接Micro:bit板且無需輸入密碼,這樣可以節(jié)約調(diào)試時間,而且APP中我們也沒有寫配對相關(guān)的語句。
點(diǎn)擊右上角齒輪圖標(biāo)→項(xiàng)目設(shè)定→打開No Pairing Required: Anyone can connect via Bluetooth選項(xiàng)。
3. 添加藍(lán)牙擴(kuò)展。
4. 編程當(dāng)藍(lán)牙連接時和斷開時顯示不同圖標(biāo)(如圖8)。
現(xiàn)在,在APP Invertor中將程序打包APK,手機(jī)掃二維碼下載安裝,給APP啟動藍(lán)牙授權(quán)。將Micro:bit程序刷入Micro:bit板中。
手機(jī)打開APP,點(diǎn)擊掃描,看藍(lán)牙列表是否正常。在藍(lán)牙列表中選擇Micro:bit,點(diǎn)擊連接按鈕。開始Micro:bit與手機(jī)藍(lán)牙連接。通過手機(jī)上狀態(tài)顯示和Micro:bit的LED顯示圖標(biāo)判斷連接是否成功。
根據(jù)我的試驗(yàn),程序可能出現(xiàn)連接易斷開或在部分手機(jī)上出現(xiàn)閃退等問題。這可能是因?yàn)镸icro:bit本身運(yùn)算處理能力不足造成藍(lán)牙斷開,或是APP Invertor擴(kuò)展對一些型號的手機(jī)兼容性不好導(dǎo)致閃退。你可以更換其他品牌手機(jī),或者根據(jù)iot.appinventor.mit.edu對擴(kuò)展包的詳細(xì)說明來優(yōu)化程序。
如果經(jīng)過努力連接成功后你還有興趣,可以繼續(xù)添加拓展功能,比如點(diǎn)擊按鈕發(fā)送文本或預(yù)設(shè)的圖標(biāo)到設(shè)備中顯示等。
掃描本版二維碼后你可以下載到實(shí)現(xiàn)基礎(chǔ)連接的源代碼lanya.aia和有交互的源代碼MicrobitLED.aia。