App Inventor 控制與讀取 microbit

本篇目的是提供一個樣板,讓您的App可以發送多種訊號給micro:bit,同時控制與讀取 micro:bit 的感測器(例如:溫度感測器),這樣,遙控機器人的基礎功能就差不多完成了。這邊當然要自賣自誇一下,App Inventor IoT 網站上的 micro:bit  BLE extension 就是我在MIT當訪問學者時的工作項目之一。本文同時也參考了 Mason兄的小山貓專案。先來看看執行影片吧

YouTube 影片


App Inventor端

Designer頁面設定

請由MIT App Inventor 網站下載最新的 micro:bit BLE extension,或由此下載 .aia / .hex 原始檔。再匯入您的 App Inventor 專案即可。

用到的元件種類不多,一個ListPicker用來選擇要連線的藍牙裝置,一個用來斷線的按鈕。以及四個發送不同字元的按鈕,不難發現這就是控制機器人的常見介面。您之後當然可以根據您的需要來修改。

micro:bit元件方面,由於我們要從手機發字元給micro:bit,所以需要使用 microbit_Uart 元件,另外也希望能從手機端看到microbit的溫度感測器值,所以再加入microbit_Temperature 元件。請注意這兩個元件都要基於 BluetothLE 元件才能執行,不是 BluetoothClient元件,前者是藍牙低功耗BLE,後者是傳統藍牙SPP

Blocks

STEP1

程式初始化時,先掃描附近的藍牙裝置,並把掃到的裝置放到 SelectBLE 這個 ListPicker 裡面。另外要斷線的時候,就直接呼叫 BluetoothLE.Disconnect 指令就好

STEP2

在ListPicker中選擇您的 micro:bit (名字很特殊不會選錯)

STEP3  讀取micro:bit 溫度感測器值

在上一步已經要求取得micro:bit溫度感測器,所以要用 TemperatureReceived 事件來取得回傳的溫度值。

STEP4

接下來就是自由發揮啦!在此用四個按鈕的 TouchDown 事件來發送不同的指令給 micro:bit,在此使用的指令是 WriteRXCharacteristic 指令來發送 “R\n” 這樣的字串出去,R是根據不同的按鈕的控制指令,\n 則是換行符號,代表一個命令的結尾。

接著用 anyButton.TouchUp 來管理所有按鈕的 touchUp 事件,當然缺點就是 Disconnect 按鈕也算進去,您可以在這個事件中加入 component 不等於 Button_Disconnect 就可以了~


microbit 端

請到 makecode 網站,開啟一個新的micro:bit專案並完成以下程式。

STEP1

micro:bit 在啟動時會顯示”BLE”訊息提示使用者,並執行藍牙溫度服務與UART服務。在此宣告一個文字變數 RX_Data 來接收從手機發送過來的藍牙訊息。

並在藍牙成功連線與斷線的事件顯示對應訊息 (“C” / “D”)

STEP2

接下來就是等是否收到新的藍牙訊號,在此以換行符號 (newLine)作區別,並把讀取結果放在 RX_Data 變數中。最後比較變數內容並執行對應動作即可,如果您想要控制機器人的話,只需要在各個 case 中放入對應的馬達控制指令即可,非常簡單。

執行畫面

程式初始畫面

選擇藍牙BLE裝置,[puvuz] 為該 micro:bit 的藍牙裝置名稱

連線成功,顯示 Connected 以及溫度感測器值

按下上箭頭按鈕,顯示對應訊息

放開按鈕,顯示對應訊息

按下右箭頭按鈕,顯示對應訊息

曾吉弘,
2019年12月25日 凌晨12:21
v.1
曾吉弘,
2019年10月24日 上午9:28
v.1
曾吉弘,
2019年10月24日 上午9:59
v.2