Gần đây tôi đã bắt đầu tìm hiểu phát triển một thiết bị dựa trên mircocontroller sẽ có mô-đun BLE. Thiết bị này được cho là để gửi đọc tương tự lấy từ cảm biến đến một ứng dụng Android mà tôi sẽ phát triển.
Đối với những gì tôi đã nghiên cứu về cách thức GATT hoạt động là:Hiểu giao thức GATT trong BLE
- Thiết bị dựa trên microntroller sẽ là máy chủ GATT.
- Ứng dụng android sẽ là ứng dụng khách GATT.
- Khi nhìn từ quan điểm truyền thông, thiết bị dựa trên microntroller là Slave và ứng dụng android là Master.
Câu hỏi:
- Làm thế nào để quyết định số lượng các thuộc tính mà tôi cần phải xác định để nhận lệnh từ GATT khách hàng và gửi response (mà sẽ là một giá trị float)? Tôi có cần phải có hai thuộc tính riêng biệt: Một cho Android để gửi lệnh và một cho thiết bị dựa trên microncontroller để gửi dữ liệu đến android? Hoặc tôi có thể sử dụng một thuộc tính duy nhất?
- GATT dường như là một hệ thống hướng sự kiện.
2.1: Sự kiện nào sẽ được tạo khi Android gửi lệnh tới thiết bị dựa trên vi điều khiển: (Máy khách đến Máy chủ)?
2.2: Sự kiện sẽ được tạo khi dữ liệu được ghi trên thuộc tính sẽ được ứng dụng Android đọc: (Server to Client)? - Ứng dụng android (GATT Client) nên sử dụng lệnh đọc/ghi để giao tiếp với thiết bị dựa trên vi điều khiển (GATT Server). Và, GATT Server nên sử dụng Notify/Indicate để chuyển dữ liệu cho GATT Client. Tôi hiểu có đúng không?
Tôi đang sử dụng this BlueGiga BLE112 Module để phát triển.
File gatt.xml mà tôi cho đến nay đã được viết là:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 1800: org.bluetooth.service.generic_access -->
<service uuid="1800" id="generic_access">
<description>Generic Access</description>
<!-- 2A00: org.bluetooth.characteristic.gap.device_name -->
<characteristic uuid="2A00" id="c_device_name">
<description>Device Name</description>
<properties read="true" const="true" />
<value>MyBLEDev</value>
</characteristic>
<!-- 2A01: org.bluetooth.characteristic.gap.appearance -->
<characteristic uuid="2A01" id="c_appearance">
<description>Appearance</description>
<properties read="true" const="true" />
<value type="hex">0300</value>
</characteristic>
</service>
<!-- custom service -->
<service uuid="624e957f-cb42-4cd6-bacc-84aeb898f69b" advertise="true">
<description>Custom Device Service</description>
<!-- custom write-only characteristic for Client to send commands to fetch reading -->
<characteristic uuid="a57892fe-4f58-97d4-a5245-78a4125d3e6" id="c_cmd_TxReading">
<description>Request for Reading</description>
<properties write="true" />
<value length="4" />
</characteristic>
<characteristic uuid="8fde302a-56ac-b289-65ed-a577ed66b89c" id="c_reading">
<description>Measurement</description>
<properties read="true" write="true" />
<value length="4" type="float32" />
</characteristic>
</service>