本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的的LED燈。
作者/攝影 |
袁佑緣 |
時間 |
1小時 |
成本 |
|
難度 |
* * |
材料表 |
- LinkIt 7697
- micro usb線
- 電腦
- Android手機
|
App Inventor Extension 安裝
請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。
並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。
如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。
本範例的aia檔請到此處下載(https://drive.google.com/open?id=0B0HNqd_8V0OlNjJDTGx0dVNKOTg)。
(建議先下載後重新上傳到app inventor tw的檔案庫上)
App Ineventor 程式設計
首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。
接下來請看到Desginer的部份,connect按鈕主要是用來連線到7697的,而下面有兩個按鈕,分別用來控制LED燈的ON跟OFF。
接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的mac address,至於這個mac address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。
再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話就,按鈕就會切換到Disconnect,以等待下一次使用者按下時,就會斷線。
至於定義連線時與斷線時的功能有哪些,則是用下面的when block來決定,只有成功連線時,才能夠控制控制LED的開關。
接下來是本範例的重點部份,當按下ON/OFF開關時,會透過BLE元件的WriteIntValue來傳送訊息給7697,並且是已經指定好service跟characteristic的uuid了,而這個uuid其實是跟Arduino端裡面寫的UUID是一致的,詳情請看下面的範例程式碼。
而我們送出的整數數值1或者是0則分別代表LED是要亮或者是暗。
LinkIt 7697 程式設計
本範例程式可以在Arduino IDE的範例code上找到,請先確定您的控制板在編輯器中切換成7697,再點選Files->Examlpes->LBLE->SimplePeripheral。
/*
This example configures LinkIt 7697 to act as a simple GATT server with 1 characteristic.
To use it, open AppInventor project:
*
Build & install it on Android id
created Mar 2017
*/
#include <LBLE.h>
#include <LBLEPeriphral.h>
// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);
void setup() {
// Initialize LED pin
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
//Initialize serial and wait for port to open:
Serial.begin(9600);
// to check if USR button is pressed
pinMode(6, INPUT);
// Initialize BLE subsystem
LBLE.begin();
while (!LBLE.ready()) {
delay(100);
}
Serial.println("BLE ready");
Serial.print("Device Address = [");
Serial.print(LBLE.getDeviceAddress());
Serial.println("]");
// configure our advertisement data.
// In this case, we simply create an advertisement that represents an
// connectable device with a device name
LBLEAdvertisementData advertisement;
advertisement.configAsConnectableDevice("BLE LED");
// Configure our device's Generic Access Profile's device name
// Ususally this is the same as the name in the advertisement data.
LBLEPeripheral.setName("BLE LED");
// Add characteristics into ledService
ledService.addAttribute(switchCharacteristic);
// Add service to GATT server (peripheral)
LBLEPeripheral.addService(ledService);
// start the GATT server - it is now
// available to connect
LBLEPeripheral.begin();
// start advertisment
LBLEPeripheral.advertise(advertisement);
}
void loop() {
delay(1000);
Serial.print("conected=");
Serial.println(LBLEPeripheral.connected());
if (digitalRead(6))
{
Serial.println("disconnect all!");
LBLEPeripheral.disconnectAll();
}
if (switchCharacteristic.isWritten()) {
const char value = switchCharacteristic.getValue();
switch (value) {
case 1:
digitalWrite(LED_BUILTIN, HIGH);
break;
case 0:
digitalWrite(LED_BUILTIN, LOW);
break;
default:
Serial.println("Unknown value written");
break;
}
}
}
成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。
範例影片
([Appinventor ]使用手機BLE控制7697 LED燈)
相關文章: