白二娃
我們已經用Micro:bit做過不少編程試驗,也用APP Invertor編寫過手機APP。今天我們將兩者結合起來,編寫一個APP,讓安卓手機和Micro:bit通過藍牙連接起來。由于實現兩個設備連接后進行基礎交互的代碼量較多,篇幅所限我們僅實現兩設備通過藍牙掃描和連接。后續實現交互的代碼您可以在掃碼下載源代碼后自行分析學習。
1. 安卓手機
2. Micro:bit板及數據線
3. APP Inventor編程平臺app.gzjkw.net或ai2.17coding.net
4. 擴展下載網站iot.appinventor.mit.edu
5. Micro:bit編程平臺makecode.microbit.org
為了更好兼容Micro:bit的低功耗藍牙,我們沒有使用APP Invertor自帶的藍牙連接組件,而是添加了新的藍牙擴展。
打開APP Invertor的支持網站(iot.appinventor.mit.edu)。在左邊Internet of Things菜單中可以找到BluetoothLE和BBC Micro:bit頁面。
1. BluetoothLE是APP Invertor專用的低功耗藍牙擴展。在BluetoothLE頁面中點擊“Download the BluetoothLE extension ”把.aix擴展文件下載到本地備用,也可以復制aix文件的網絡地址(http://iot.appinventor.mit.edu/assets/resourc
es/edu.mit.appinventor.ble-201907
01.aix)在導入項目擴展時填入。
安裝該擴展后可以讓APP Invertor編寫的程序通過手機藍牙搜索和連接低功耗藍牙設備,并進行通信。
2. 在BBC Micro:bit頁面中,點擊“Download the BBC Micro:bit extension”可以下載到Micro:bit的專用擴展。或在導入擴展時直接填寫下載網址(http://iot.appinventor.mit.edu/assets/resources/SimpleMicrobit.aix)。APP Invertor安裝該擴展后可以在手機連接后與Micro:bit板上的按鈕、引腳、LED等設備交互。
本例中我們僅需要實現兩個設備的藍牙連接,無需用手機與Micro:bit板做更多交互,因此只有需要測試有交互功能的源代碼MicrobitLED.aia時才需要安裝。
我們需要APP有搜索、連接、斷開等按鈕,有顯示周圍藍牙設備的列表,有顯示當前狀態的文字。選擇搜索到的Micro:bit設備后點連接可以通過藍牙實現連接,點斷開可以斷開藍牙(如圖1)。

1. 登錄app.gzjkw.net,新建項目lanya,在APP Invertor組件面板的最后一項Extension——擴展中導入下載的項目擴展文件edu.mit.appinventor.ble-20190701.aix,也可直接填入網址安裝擴展包。
2. 將BluetoothLE拖入工作面板。
3. 界面布局→水平布局,水平對齊→居中,寬度→充滿;從用戶界面拖入3個按鈕,組件列表中改名為“掃描、連接、斷開”,并修改按鈕文本為相應名稱。
4. 用戶界面→標簽,修改標簽名和標簽文本為“狀態”,用于顯示當前藍牙狀態。
5. 用戶界面→列表顯示框,改名為“藍牙列表”,用于顯示和選擇搜索到的藍牙設備列表。
我們希望APP可以掃描可用的藍牙設備。當點擊掃描按鈕,調用藍牙組件開始掃描,并更改狀態標簽,顯示列表。
1. 切換至邏輯設計界面。
2. 組合模塊。掃描按鈕→當掃描被點擊執行。
3. BluetoothLE1→調用BluetoothLE1.StartScanning。組合積木:狀態→設置狀態.文本為和文本→文本中填入“狀態:掃描”。
4. 組合積木:藍牙列表→設置藍牙列表.可見性為和邏輯→真。設計這個可見性邏輯判斷是為了連接成功后可以隱藏列表,因為如果附近有很多藍牙設備,列表會很長(如圖2)。

我們需要在列表中列出周圍所有可用的藍牙設備。
1. 組合模塊。BluetoothLE1→BluetoothLE1.DeviceFound,當掃描到可用藍牙設備時。
2. 組合積木:藍牙列表→設置藍牙列表.元素字串為和BluetoothLE1→BluetoothLE1.DeviceList(如圖3)。

我們希望實現在列表中選中設備名稱后,點擊“連接”按鈕后通過藍牙連接Micro:bit。
1. 組合模塊。連接按鈕→當“連接”被點擊。
2. 調用BluetoothLE1→Bluetoo
thLE1.StopScanning,停止掃描設備。
3. 組合積木:調用BluetoothLE1
→BluetoothLE1.連接,藍牙列表→選中項索引。通過藍牙連接選中的設備。
4. 設置狀態.文本為“狀態:連接中”。在手機中標明當前連接狀態(如圖4)。

當成功連接設備時,我們希望通過狀態文本獲知連接已經成功,并關閉藍牙設備列表。
1. 組合模塊。BluetoothLE1→當BluetoothLE1.Connected。
2. 設置狀態.文本為“狀態:已連接”。
3. 設置藍牙列表可見性為“假”,關閉藍牙設備列表(如圖5)。

點擊斷開按鈕后,我們希望手機斷開設備連接,并通過顯示當前狀態確認斷開按鈕有效。
1. 組合模塊。斷開按鈕→當“斷開”被點擊。
2. BluetoothLE1→調用Bluetoot
hLE1.斷開連接。
3. 組合模塊。BluetoothLE1→BluetoothLE1.Disconnected。
4. 設置狀態文本為“狀態:已斷開”(如圖6)。

程序運行中可能會遇到各種錯誤,如果程序沒有閃退的情況下我們希望能知道報錯信息。
1. 組合模塊。Screen1→當“Screen1”出現錯誤。
2. 設置狀態文本為和文本→合并字符串,連接文本“錯誤:”和出現錯誤模塊本身的“消息”→“取消息”(如圖7)。

手機中的程序還需要Micro:bit中的程序配合。當藍牙連接和斷開時在LED屏幕上顯示圖像作為連接成功的標示。
1. 在https://makecode.microbit.org/中編寫程序。新建項目。
2. 設置Micro:bit藍牙連接方式為免配對連接,這樣任何設備都可以連接Micro:bit板且無需輸入密碼,這樣可以節約調試時間,而且APP中我們也沒有寫配對相關的語句。
點擊右上角齒輪圖標→項目設定→打開No Pairing Required: Anyone can connect via Bluetooth選項。
3. 添加藍牙擴展。
4. 編程當藍牙連接時和斷開時顯示不同圖標(如圖8)。

現在,在APP Invertor中將程序打包APK,手機掃二維碼下載安裝,給APP啟動藍牙授權。將Micro:bit程序刷入Micro:bit板中。
手機打開APP,點擊掃描,看藍牙列表是否正常。在藍牙列表中選擇Micro:bit,點擊連接按鈕。開始Micro:bit與手機藍牙連接。通過手機上狀態顯示和Micro:bit的LED顯示圖標判斷連接是否成功。
根據我的試驗,程序可能出現連接易斷開或在部分手機上出現閃退等問題。這可能是因為Micro:bit本身運算處理能力不足造成藍牙斷開,或是APP Invertor擴展對一些型號的手機兼容性不好導致閃退。你可以更換其他品牌手機,或者根據iot.appinventor.mit.edu對擴展包的詳細說明來優化程序。
如果經過努力連接成功后你還有興趣,可以繼續添加拓展功能,比如點擊按鈕發送文本或預設的圖標到設備中顯示等。
掃描本版二維碼后你可以下載到實現基礎連接的源代碼lanya.aia和有交互的源代碼MicrobitLED.aia。