🤖
LinkIt 7697 BlocklyDuino 使用指南
  • LinkIt 7697 BlocklyDuino 使用指南
    • 認識 LinkIt 7697
    • 認識 BlocklyDuino
    • BlocklyDuino v2 & v3 比較
    • 安裝開發環境 (v2)
      • 安裝 Arduino 編輯器
      • 安裝驅動並連接開發板
      • 安裝 BlocklyDuino 編輯器
      • 連結兩個編輯器並上傳程式
    • 安裝開發環境 (v3)
    • BlocklyDuino 基礎操作
    • 實作範例教學
      • A01. 內建 LED 閃爍
      • A02. 外接 LED 閃爍
      • A03. 外接 LED 呼吸燈
      • A04. RGB LED 顏色變化
      • A05. 外部按鈕控制開關
      • A06. 蜂鳴器播放聲音
      • A07 .可變電阻控制電壓輸出
      • A08. 伺服馬達控制
      • A21. DHT: 溫濕度感應器
      • A22. HTU21D: 溫溼度感應器
      • A23. PMSX003: PM2.5 感測器
      • A24. HC-SR04P: 超音波測距
      • A25. ADXL345: 加速規(動態)
      • A26. ADXL345: 加速規(手勢)
      • A27. 1602/2004: 液晶顯示模組
      • A28. WS2812: RGB 彩色燈條
      • A29. MFRC522: RFID
      • B00. Grove 相關基礎知識
      • B01. Grove 光感應器
      • B02. Grove 超音波測距感應器
      • B03. Grove 溫溼度感應器
      • B04. Grove 繼電器
      • B05. Grove LED 燈條
      • B06. Grove OLED 顯示器
      • C01. 雲端控制 LED 開關
      • C02. 上傳溫溼度到雲端
      • D01. 手機透過 BLE 讀寫裝置資料
      • E01. 遙控器: 按鈕控制 LED
    • 資源鏈結
  • LinkIt 7697 - Arduino IDE 開發指南
    • 環境設定
      • 設定 Arduino IDE
      • 將 LinkIt 7697 連接到電腦
        • 在 Windows 上安裝 CP2102N 驅動程式
        • 在 macOS 上安裝 CP2102N 驅動程式
      • 執行第一個程式
    • 開發指南
      • GPIO
      • UART
      • ADC
      • EINT (外部中斷 / External Interrupt)
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (索引式儲存空間)
      • RTC (Real-Time Clock)
      • Software Serial
      • 使用 Wi-Fi 函式庫
      • 使用 MCS 函式庫
        • 連接到 MCS
        • 連接到 MCSLite
          • 建立可透過 MCS Lite 控制的 Beacon
        • MCS 函式庫 API 使用手冊
          • MCSDevice
          • MCSLiteDeviceMCSLiteDevice
          • MCSDataChannel 相關類別
      • 使用 BLE 低功耗藍牙
        • 藍牙信標
        • 主控裝置
        • 周邊裝置
        • 已知限制
        • LBLE API 指南
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • 使用 LinkIt Remote
        • LRemote API
        • LRemote 控制元件 API
      • LinkIt 7697 腳位的初始狀態
      • LinkIt 7697 供電說明
      • 更新 Bootloader 與韌體
      • Flash 燒錄工具
      • FOTA 更新
      • LinkIt 7697 的功能限制
      • 自行編譯 Arduino Package
      • 回報問題
    • 週邊元件連接教學
      • SMD 按鈕
      • RGB 三色 LED
      • 可變電阻
      • 九軸感應器 (MPU-9250)
      • 溫度與濕度感應器 (AM2302)
      • 超音波距離感應器
      • 光感應器 (LM358)
      • 0.96 吋 OLED 顯示模組 (SSD1308Z)
      • 長條型 LED 顯示模組 (MY9221)
      • 繼電器
      • 伺服馬達 (EMAX 9g ES08A Servo)
      • 使用 74HC595 驅動七段顯示器
      • 使用 MAX7219 驅動七段顯示器
      • 使用 MAX7219 驅動 8x8 矩陣式顯示器
      • 使用 OLED 模組 (如 SH1106 / SSD1306... 等模組)
      • 使用 PCF8574 / PCF8574A 驅動 1602 LCD
    • 開發套件與擴充板
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • 下載
    • 資源連結
    • BSP 版本更新資訊
  • LinkIt 7697 - Development Guide for Arduino IDE
    • Environment Setup
      • Setup Arduino IDE
      • Connecting LinkIt 7697 to Computer
        • Install CP2102N Driver on Windows
        • Install CP2102N Driver on macOS
      • Run Your First Sketch
    • Developer Guide
      • GPIO
      • UART
      • ADC
      • External Interrupt
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (Key-Pair Storage)
      • RTC (Real-Time Clock)
      • Software Serial
      • Using the Wi-Fi Library
      • Using MCS Library
        • Connecting to MCS
        • Connecting to MCSLite
          • Build a Beacon controlled by MCS Lite
        • MCS Library API Reference
          • MCSDevice
          • MCSLiteDevice
          • MCSDataChannel Classes
      • Using Bluetooth
        • Beacons
        • Central Devices
        • Peripheral Devices
        • Limitations of LBLE library
        • LBLE Library API Guide
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • Using LinkIt Remote
        • LRemote
        • LRemote Control Classes
      • Initial Pin State of LinkIt 7697
      • Powering the LinkIt 7697
      • Update Bootloader and Firmware
      • Flash Uploading Tool
      • FOTA Update
      • Limitations of LinkIt 7697
      • Source Code of Arduino Package
      • Issue Report
    • Tutorial
      • SMD Buttons
      • RGB LED
      • Potentiometer
      • IMU 9DOF v2.0 (MPU-9250)
      • Temperature and Humidity Sensor Pro (AM2302)
      • Grove Ultrasonic Ranger
      • Light Sensor (LM358)
      • Grove OLED Display 0.96" (SSD1308Z)
      • LED Bar v2.0 (MY9221)
      • Relay
      • Mini Servo (EMAX 9g ES08A Servo)
      • Driving 7-segment Displays with 74HC595
      • Driving 7-segment Displays with MAX7219
      • Driving 8x8 Dot Matrices with MAX7219
      • Using OLED module (SH1106 / SSD1306... etc.)
      • Driving 1602 LCD with PCF8574 / PCF8574A
    • Kits and Shields
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • Download
    • Resources
    • BSP Release Notes
Powered by GitBook
On this page
  • SimplePeripheral 範例
  • 匯入 AppInventor 範例程式
  • 連線至 BLE 周邊
  1. LinkIt 7697 - Arduino IDE 開發指南
  2. 開發指南
  3. 使用 BLE 低功耗藍牙

周邊裝置

Previous主控裝置Next已知限制

Last updated 3 years ago

低功耗藍牙的周邊裝置會提供各種服務與資料,讓主控裝置連接後進行存取。

更進一步來說,周邊裝置需要提供一個 GATT 伺服器,才能夠讓主控裝置連接。 所謂的 GATT 伺服器,是包含了一組由服務(service)和資料特性(characteristics)共同形成的屬性(attributes)的集合。

一個服務,比如說「心率測量服務」,會用一個 UUID 代表。一個服務由數個資料特性所構成,而資料特性會提供實際的數值資訊供主控裝置讀寫。比如說,心率測量服務會包含多個資料特性,其中一個稱做「心率測量值」的資料特性,讓主控裝置可以進行讀取心率測量的數值。

如果想進一步瞭解 GATT 以及各種服務的內容,可以參考 或是.

所以說,在創建 GATT 伺服器之前,必須先定義好相關的服務與資料特性列表。要注意的是,因為服務與資料特性是可以在任何時刻被主控裝置存取的,應將實際定義的服務與資料特性定義在全域空間當中,以確保它的生命週期。比如說:

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

// 在全域空間定義一個只有一個資料特性的服務
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

其中,

  • 19B10010-E8F2-537E-4F6C-D104768A1214 是服務的 UUID,這個 UUID 會被主控裝置用於搜尋與確認服務的內容。

  • 19B10011-E8F2-537E-4F6C-D104768A1214 是資料特性的 UUID,主控裝置可以依據此 UUID 來確認讀寫的資料內容。要注意的是,GATT 當中資料特性是沒有型別概念的,所以開發者需要自己根據服務與資料特性的定義,來解析要讀寫的資料內容。為了便於解析資料,像是 LBLECharacteristicInt 這樣的資料特性類別,提供了對應的 setValue() 方法,可以直接使用這個方法來寫入整數。

當定義並且設定好 GATT 相關的屬性內容之後,需要建立起服務跟資料特性之間的關聯,方可建立並執行 GATT 伺服器:

void setup() {
    // 將 switch 這個資料特性添加到 LED 這個服務當中
    ledService.addAttribute(switchCharacteristic);

    // 將 LED 這個服務添加到 GATT 伺服器之中
    LBLEPeripheral.addService(ledService);

接著,若要啟動 GATT 伺服器,需要呼叫:

LBLEPeripheral.begin();

請注意,當 begin() 被呼叫之後,就不能夠再添加其他的服務與資料特性,也不能夠改變服務與資料特性之間的關聯。

此時周邊裝置已經準備就緒,可以被主控裝置連線。可以透過呼叫 isWritten() 來檢查一個資料特性是否有被主控裝置寫入,如下:

void loop() {
  delay(100);
  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;
    }
  }
}

在接下來的段落中,我們會簡單的示範,要怎麼樣連線至 SimplePeripheral 範例所創建出來的 BLE 裝置。

SimplePeripheral 範例

匯入 AppInventor 範例程式

可以透過 iOS 或 Android 的 GATT 程式庫來連結到此範例。在這個段落中,將會示範怎麼用 AppInventor 這個圖形化的程式開發環境來撰寫一個連接到此範例的 Android 手機程式。請依照下列步驟操作:

  • 在網站的介面選單當中,請選擇 Projects > Import project (.aia) from my computer

  • 上傳剛剛下載的 BLE_LED.aia 專案檔。

連線至 BLE 周邊

在連接到 BLE 周邊裝置時,我們需要指定 BLE 裝置位置。然而,此裝置位置在每一片LinkIt 7697 開發板上面都是不一樣的。為了讓開發者可以比較容易指定此裝置位置,請先執行 SimplePeripheral 範例。此範例會在 Arduino Serial Monitor 上面顯示出 LinkIt 7697 開發板的裝置位置。

  • 請用 baud rate 9600 開啟 Serial Monitor,並觀察開發板輸出的 Device Address,如下:

  • 在 AppInventor 當中,切換到 Blocks 顯示介面,並且參考下圖,找到 addr 這個積木的位置:

  • 從 Arduino Serial Monitor 拷貝裝置位置到 addr 積木當中。請注意,AppInventor只接受大寫的位置字串,如: D7:00:00:2B:88:8C. 如果修改為小寫的字串,它將會連線失敗。

  • 接下來,在 AppInventor 選單當中,選擇 Build > App (provide QR code for .apk):

  • 下載並安裝 QR Code 所含有的連結中的 BLE_LED.apk。手機程式的名字應該會叫做 BLE Light。

  • 執行安裝好的 BLE Light 程式,然後按畫面上的 Connect 按鈕。

  • 如果連線成功,畫面上的 ON 跟 OFF 按鈕將會被啟用

  • 點擊 ON ,開發板上面的 LED 應該會發光。

  • 點擊 OFF,開發板上面的 LED 應該會熄滅。

請在 IDE 的選單中選擇 File > Examples > LBLE > SimplePeripheral 並且上傳此範例到 LinkIt 7697。這個範例會等待主控裝置連線,並不斷檢查主控裝置是否有改變 switch 這個資料特性的數值。根據主控裝置寫入的數值是 1 或是 0,此範例會開關開發板上面的內建 LED 燈。在接下來的段落中,我們會示範怎麼用 來建造一個可以連接到此範例的 Android 手機程式。

從下載 AppInventor 的專案檔,檔名為:BLE_LED.aia。

請造訪 網站並且登入。開發者可以使用自己的 Google 帳號登入。

Bluetooth.com
這篇文章
AppInventor
此連結
AppInventor