AppInventor - 圖形化Android[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 1 - LED 閃爍
話說從 MIT 回來之後一樣沒閒著,今天要介紹的是還沒正式公布的秘辛 - App Inventor 的 BLE (Bluetooth Low Energy) 元件。請用
http://ble-test.apinventor.mit.edu 這個測試用伺服器來測試,當然您得先買一片 Arduino 101才行
MIT App Inventor 之後會使用 Arduino 101 作為物聯網教學套件核心開發板,套件包還在規劃中,大家有沒有想要套件包裡面放那些東西呢?說不定可以美夢成真喔

https://youtu.be/WSktBhO94Ug
Arduino 101 是 Arduino.cc (注意不是 .org) 與 Intel 合作的最新開發板,在美國以外的區域稱為
Genuino 101。
延伸閱讀:
硬體架構
- Arduino 101
- Android 手機
- [非必須]LED,長腳接在 Arduino 101的D13腳位。或直接使用板載的LED也可以。
App Inventor 程式
基本上概念與咱們的[
雙A計畫]完全相同,只是改用 BLE 元件而已。本範例將控制 Arduino 101 的 D13 板載 LED 燈亮滅。別忘了這樣的架構可以改成繼電器再接個檯燈或風扇,就是小小智慧家電控制囉
Designer 頁面
這個版面很熟悉吧,雙A計畫都長這樣嘛,差別就在於 BluetoothLE 這個元件。由於通訊協定的不同,您當然無法用原本的 BluetoothClient元件來與 Arduino 101 溝通。

Blocks 頁面
1. 連線與斷線
程式初始化時,要求 BluetoothLE1元件進行掃描。請注意本範例是直接對指定藍牙裝置(Arduino 101)連線。如果您日後需要從多個裝置中選擇的話,建議還是先配對再從 ListPicker 中點選是比較好的做法。請注意 BLE 元件不需要事先配對,只要指定 address 即可直接連線。
ConnectButton按下時,要求BluetoothLE1元件對指定位址的藍牙裝置(98:4F...) 進行連線。
2. 連線確認
承上一步,BluetoothLE1.connected事件會在連線成功後啟動,我們在此顯示一些確認訊息。
3. 發送訊號
在 TurnButton按下時,使用 BluetoothLE1.WriteIntValue,Arduino 101 在接收到 value 1 之後就會點亮 LED (digitalWrite)。請注意 service_uuid 與 characteristic_uuid 這兩個欄位請分別填入
"19B10010-E8F2-537E-4F6C-D104768A1214" 與 "19B10011-E8F2-537E-4F6C-D104768A1214" ,這是一組自定義的文字數字組合,Arduino 101 會使用這個參數代表它所提供的 BLE 服務。您可以使用
這個網站來幫您產生 UUID

您可以把這兩個動作寫在同一個 Button 的 TouchDown 與 TouchUp 事件中,就能做到按著按鈕時開燈,放開按鈕就關燈的效果囉,例如像這樣:
4. 斷線
Button_Disconnect按下時,要求BluetoothLE1元件對指定藍牙裝置斷線。
Arduino 101 程式碼
本草稿碼感謝 MIT App Inventor 小組提供。請注意 Arduino 101 已經具備藍牙4.0,因此不必再外接 HC05 這類的藍牙裝置
文中一樣要寫明 service_uuid 與 characteristic_uuid,在此是一組自訂的文字分別是
"19B10010-E8F2-537E-4F6C-D104768A1214" 與 "19B10011-E8F2-537E-4F6C-D104768A1214"。這要與 App Inventor 中對應,您可以使用
這個網站來幫您產生 UUID
[pastacode lang="c" manual="%23include%20%3CCurieBLE.h%3E%0A%0A%23define%20LED%2013%0A%0ABLEPeripheral%20blePeripheral%3B%20%20%2F%2F%20BLE%20Peripheral%20Device%20(the%20board%20you're%20programming)%0ABLEService%20ControlLED(%2219B10010-E8F2-537E-4F6C-D104768A1214%22)%3B%20%2F%2F%20BLE%20AnalogRead%20Service%0A%0A%2F%2F%20BLE%20LED%20Switch%20Characteristic%20-%20custom%20128-bit%20UUID%2C%20read%20and%20writable%20by%20central%0ABLEUnsignedIntCharacteristic%20LEDStatus(%2219B10011-E8F2-537E-4F6C-D104768A1214%22%2C%20BLERead%20%7C%20BLEWrite%20%20)%3B%0A%0Aint%20incom%20%3D%200%3B%0Aint%20last_incom%20%3D%200%3B%0A%0Avoid%20setup()%20%7B%0A%20%20Serial.begin(9600)%3B%0A%20%20%2F%2F%20set%20Light%20pin%20to%20output%20mode%0A%20%20%2F%2F%20set%20advertised%20local%20name%20and%20service%20UUID%3A%0A%20%20blePeripheral.setLocalName(%22ControlLED%22)%3B%0A%20%20blePeripheral.setAdvertisedServiceUuid(ControlLED.uuid())%3B%0A%0A%20%20%2F%2F%20add%20service%20and%20characteristic%3A%0A%20%20blePeripheral.addAttribute(ControlLED)%3B%0A%20%20blePeripheral.addAttribute(LEDStatus)%3B%0A%0A%20%20%2F%2F%20begin%20advertising%20BLE%20Light%20service%3A%0A%20%20blePeripheral.begin()%3B%0A%0A%20%20Serial.println(%22BLE%20AnalogRead%20service.%22)%3B%0A%0A%20%20pinMode(LED%2C%20OUTPUT)%3B%0A%0A%7D%0A%0Avoid%20loop()%20%7B%0A%20%20%2F%2F%20listen%20for%20BLE%20peripherals%20to%20connect%3A%0A%0A%20%20BLECentral%20central%20%3D%20blePeripheral.central()%3B%0A%20%20%2F%2F%20if%20a%20central%20is%20connected%20to%20peripheral%3A%0A%20%20if%20(central)%20%7B%0A%20%20%20%20Serial.print(%22Connected%20to%20central%3A%20%22)%3B%0A%20%20%20%20%2F%2F%20print%20the%20central's%20MAC%20address%3A%0A%20%20%20%20Serial.println(central.address())%3B%0A%0A%0A%20%20%20%20%2F%2F%20while%20the%20central%20is%20still%20connected%20to%20peripheral%3A%0A%20%20%20%20while%20(central.connected())%20%7B%0A%20%20%20%20%20%20%2F%2FSerial.println(LEDStatus.written())%3B%0A%0A%0A%20%20%20%20%20%20if%20(LEDStatus.written())%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20incom%20%3D%20LEDStatus.value()%3B%0A%20%20%20%20%20%20%20%20Serial.print(%22incom%20%22)%3B%0A%20%20%20%20%20%20%20%20Serial.println(incom)%3B%0A%20%20%20%20%20%20%20%20if%20(incom%20!%3D%20last_incom)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(incom%20%3D%3D%201)%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Serial.println(%22LED%20On%22)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20digitalWrite(LED%2C%20HIGH)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Serial.println(%22LED%20Off%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20digitalWrite(LED%2C%20LOW)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20last_incom%20%3D%20incom%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20delay(100)%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20when%20the%20central%20disconnects%2C%20print%20it%20out%3A%0A%0A%20%20Serial.print(F(%22Disconnected%20from%20central%3A%20%22))%3B%0A%20%20Serial.println(central.address())%3B%0A%7D%0A" message="Arduino 101 LED blink" highlight="" provider="manual"/]
留言 💬 (0)
還沒有留言,來當第一個。