D01. 手機透過 BLE 讀寫裝置資料

專案說明

建立起一個低功號藍芽 (BLE, Bluetooth Low Energy)的服務(Service) 和屬性(Character),透過手機寫入一個 54321 資料到開發板上,收到後會從序列埠監視器內印出。

手機軟體

iPhone 請安裝 LightBlue Explorer (免費軟體)

undefined


積木畫布

初始化

  • 創建一個藍芽周邊裝置的服務 (Service),此裝置顯示名稱為 "LinkIt 7697" (此名稱就是手機上會看到的藍芽名字, 可修改避免多人時有衝突)
  • 幫這裝置新增的一屬性,類型是整數且可以讀寫 (此範例是讀取,所以也可設成讀)
  • 修改服務和屬性的 UUID,避免和別人衝突到 (請使用 UUID generator)

重複執行

  • 檢查是否有人修改過這屬性,若有則透過序列埠印出來 
  • 持續寫入 123456789 到這屬性



產生的 Arduino 程式如下

#include <LBLE.h>
#include <LBLEPeriphral.h>

int data;

LBLEService __periphralService("B77D53AC-D590-41E0-B75A-6DA442F543F6");
LBLECharacteristicInt __b77d53ac_d590_41e0_b75a_6da442f543f6("B77D53AC-D590-41E0-B75A-6DA442F543F6", LBLE_READ | LBLE_WRITE);

void setup()
{
  LBLE.begin();
  while (!LBLE.ready()) { delay(100); }

  __periphralService.addAttribute(__b77d53ac_d590_41e0_b75a_6da442f543f6);

  LBLEPeripheral.addService(__periphralService);
  LBLEPeripheral.begin();
  LBLEAdvertisementData __advertisement;
  __advertisement.configAsConnectableDevice("LinkIt 7697");
  LBLEPeripheral.advertise(__advertisement);
  Serial.begin(9600);

  Serial.println("藍芽裝置建立成功");
}

void loop()
{
  if (__b77d53ac_d590_41e0_b75a_6da442f543f6.isWritten()) {
    data = __b77d53ac_d590_41e0_b75a_6da442f543f6.getValue();
    Serial.println(data);
  }
  __b77d53ac_d590_41e0_b75a_6da442f543f6.setValue(123456789);
 delay(1000);
}


操作步驟 : 讀取開發板上的屬性數值 

▼在 iPhone 上打開 LightBlue,搜尋和配對 "LinkIt 7697" 藍芽裝置


▼這一串 UUID 就是之前在 BlocklyDuino 內寫的屬性 UUID
 


▼Ox15CD5B07 就是之前寫入的 123456789 的 HEX (十六進位) 表示,看不太懂可以在右上(紅色箭頭) 換顯示方式


▼將 Hex 改成用 Integer (十進位) 的顯示方式


▼ 改完之後可以看到從裝置讀回來的數值是 123456789 
 


操作步驟 : 
寫入開發板上的屬性數值

▼ 延續前面的操作,在 LightBlue 內去寫這屬性值


▼ 輸入個 54321
 


▼ 裝置端發現屬性的改變,就會印出來
 


 

其他學習資源

[Cavedu] BLE藍牙簡介