สารบัญ:

การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c: 6 ขั้นตอน
การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c: 6 ขั้นตอน

วีดีโอ: การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c: 6 ขั้นตอน

วีดีโอ: การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c: 6 ขั้นตอน
วีดีโอ: Introduction to Embedded Linux Part 5 - Patch Device Tree for I2C in Yocto | Digi-Key Electronics 2024, พฤศจิกายน
Anonim
การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c
การอ่านค่าจากอุปกรณ์ BLE โดยใช้ CSR1010 และ Dragonboard 410c

บทช่วยสอนนี้แสดงวิธีอ่านค่าจากอุปกรณ์ BLE CSR1010 โดยใช้ Dragonboard 410c กับ Linaro

ในตัวอย่างนี้ CSR1010 กำลังจำลองเซ็นเซอร์วัดอัตราการเต้นของหัวใจ

ขั้นตอนที่ 1: สแกนอุปกรณ์ BLE

ในขั้นตอนนี้ ให้ตรวจสอบว่าไคลเอ็นต์ BT ของคุณพร้อมสำหรับการสแกนอุปกรณ์ BLE หรือไม่

root@linaro-alip:/home/linaro# sudo hcitool lescan

LE Scan …18:EE:69:00:CE:00 (ไม่ทราบ) 18:EE:69:00:CE:00 (ไม่ทราบ) EE:52:5B:04:00:02 CSR HR Sensor

ขั้นตอนที่ 2: การเชื่อมต่ออุปกรณ์

เราจะใช้ gatttool เพื่อเชื่อมต่ออุปกรณ์ของเรา

-b: ที่อยู่ MAC ของอุปกรณ์

-t: ประเภทที่อยู่ LE สามารถเป็นแบบสาธารณะหรือสุ่มต้องตรวจสอบสเป็คอุปกรณ์ ในกรณีนี้เป็นแบบสาธารณะ

-I: โหมดโต้ตอบ gatttool จะเปิดพร้อมท์ให้ส่ง cmds ไปยังอุปกรณ์

root@linaro-alip:/home/linaro# sudo gatttool -b EE:52:5B:04:00:02 -t public -I

เมื่อพรอมต์เปิดขึ้น เราสามารถส่ง cmd การเชื่อมต่อไปยังอุปกรณ์ได้

[EE:52:5B:04:00:02][LE]> connect กำลังพยายามเชื่อมต่อกับ EE:52:5B:04:00:02

เชื่อมต่อสำเร็จ

[EE:52:5B:04:00:02][LE]>

ขั้นตอนที่ 3: ดึงข้อมูลลักษณะอุปกรณ์

เรียกลักษณะอุปกรณ์
เรียกลักษณะอุปกรณ์

เมื่อเชื่อมต่ออุปกรณ์แล้ว เราสามารถอ่านบริการที่มีทั้งหมดได้โดยส่ง cmd "primary"

จาก UUID ของบริการ เราสามารถค้นหาประเภทบริการได้ในข้อกำหนดของ GATT

www.bluetooth.com/specifications/gatt/services

ขั้นตอนที่ 4: การอ่านชื่ออุปกรณ์

อ่านชื่ออุปกรณ์
อ่านชื่ออุปกรณ์

มาสำรวจลักษณะที่อ่านบนโปรไฟล์การเข้าถึงทั่วไป (uuid=1800) อันดับแรก เราต้องรับค่าของตัวจัดการบริการ ดังที่อธิบายไว้ในรูปภาพแรก ในกรณีนี้ เริ่มตั้งแต่ 5 ถึง 11 ตอนนี้ เราสามารถดึงข้อมูลที่จับทั้งหมดในช่วงเวลานี้โดยใช้ cmd char-desc

[EE:52:5B:04:00:02][LE]> char-desc 05 11handle: 0x0005, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x0006, uuid: 00002803-0000-1000-8000- หมายเลขอ้างอิง 00805f9b34fb: 0x0007, uuid: 00002a00-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0008, uuid: 00002803-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0009, uuid: 00002a01-0000-1000-8000-8000-00805f หมายเลขอ้างอิง: uuid: 00002803-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b000034fb หมายเลขอ้างอิง: 0x000d, uuid: uuid: uuid: -1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0010, uuid: 00002803-0000-1000-8000- หมายเลขอ้างอิง 00805f9b34fb: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb

ตามข้อกำหนดของโปรไฟล์การเข้าถึงทั่วไป UUID 2A00 หมายถึงชื่ออุปกรณ์

พิจารณาว่า 2a00 เป็นหมายเลขอ้างอิง 0x0007 ในอุปกรณ์ของเรา มาอ่านค่ากัน

[EE:52:5B:04:00:02][LE]> char-read-hnd 7ค่าลักษณะ/ตัวอธิบาย: 43 53 52 20 48 52 20 53 65 6e 73 6f 72

การแปลงเลขฐานสิบหกเป็น ASCII ชื่ออุปกรณ์คือ: ''CSR HR Sensor"

ขั้นตอนที่ 5: อ่าน BPM

[EE:52:5B:04:00:02][LE]> Primaryattr handle: 0x0001, end grp handle: 0x0004 uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x0005, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb ตัวจัดการ attr: 0x000c ตัวจัดการ end grp: 0x0013 uuid: 0000180d-0000-1000-8000-00805f9b34fb ตัวจัดการ attr: 0x0014 ตัวจัดการท้าย grp: 0x0017 uuid: 0000180f-0000-1000-8000- 00805f9b34fb ตัวจัดการ attr: 0x0018 ตัวจัดการ end grp: 0x0021 uuid: 00001016-d102-11e1-9b23-00025b00a5a5 ตัวจัดการ attr: 0x0022 ตัวจัดการ end grp: 0xffff uuid: 0000180a-0000-1000-8000-00805f9b34fb

UUID ของบริการอัตราการเต้นของหัวใจคือ 0x180d ดังนั้นช่วงเวลาของการจัดการจึงอยู่ระหว่าง 0x000c จนถึง 0x0013

[EE:52:5B:04:00:02][LE]> char-desc 0x00c 0x0013

หมายเลขอ้างอิง: 0x000c, uuid: 00002800-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000e, uuid: 00002a37-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x000f: 00002902-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0011, uuid: 00002a38-0000-1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0012, uu0000-: 00002803- 1000-8000-00805f9b34fb หมายเลขอ้างอิง: 0x0013, uuid: 00002a39-0000-1000-8000-00805f9b34fb

การอ่านประกาศคุณลักษณะทั้งหมด (UUID 0x2803)

[EE:52:5B:04:00:02][LE]> char-read-hnd 0x000d

ค่าลักษณะ/คำอธิบาย: 10 0e 00 37 2a [EE:52:5B:04:00:02][LE]> char-read-hnd 0x0010 ค่าลักษณะ/คำอธิบาย: 02 11 00 38 2a [EE:52:5B: 04:00:02][LE]> char-read-hnd 0x0012 ค่าลักษณะ/คำอธิบาย: 08 13 00 39 2a

สังเกตว่า:

- หมายเลขอ้างอิง 0x000d เป็น CCCD สำหรับบริการ 2a37 (การวัดอัตราการเต้นของหัวใจ) พร้อมบิต 10 (รองรับการแจ้งเตือน)

- handle 0x0010 เป็น CCCD สำหรับ service 2a38 (Body Sensor Location) พร้อม bit 02 (รองรับ READ)

- handle 0x0012 เป็น CCCD สำหรับ service 2a39 (Heart Rate Control Point) พร้อม bit 08 (รองรับ WRITE)

ตอนนี้เราทราบแล้วว่าการวัดอัตราการเต้นของหัวใจทำงานเมื่อมีการแจ้งเตือนเท่านั้น หมายความว่าก่อนอื่นเราต้องลงทะเบียนสำหรับการเปลี่ยนแปลงค่าใน CCCD (UUID 0x2902) ซึ่งในกรณีนี้คือการจัดการ 0xf

[EE:52:5B:04:00:02][LE]> char-write-req 0x00f 0100

หมายเลขอ้างอิงการแจ้งเตือน = ค่า 0x000e: 16 65 f3 01 ค่าลักษณะเฉพาะถูกเขียนเรียบร้อยแล้ว ตัวจัดการการแจ้งเตือน = ค่า 0x000e: 16 6d fa 01 หมายเลขอ้างอิงการแจ้งเตือน = ค่า 0x000e: 16 6d fa 01 หมายเลขอ้างอิงการแจ้งเตือน = ค่า 0x000e: 16 6c f9 01 หมายเลขอ้างอิงการแจ้งเตือน = ค่า 0x000e: 16 6a f7 01 ตัวจัดการการแจ้งเตือน = ค่า 0x000e: 16 69 f6 01

ตามข้อกำหนดของโปรไฟล์ หมายเลขฐานสิบหกที่สองคือข้อมูล BPM

รอบต่อนาที:

6d = 109

6d = 109

6c = 108

6a = 106

69 = 105

ขั้นตอนที่ 6: การอ่านตำแหน่งเซ็นเซอร์ร่างกาย

การอ่านตำแหน่งเซ็นเซอร์ร่างกาย
การอ่านตำแหน่งเซ็นเซอร์ร่างกาย

ตำแหน่งเซนเซอร์ร่างกายคือ UUID 0x2A38 ตามคำอธิบาย คุณลักษณะนี้สนับสนุนการอ่านขั้นพื้นฐาน ดังนั้นเราจึงสามารถอ่านค่าได้โดยตรง

[EE:52:5B:04:00:02][LE]> char-read-hnd 0x11Characteristic value/descriptor: 03

ตามข้อกำหนดของ SIG 03 หมายถึง "นิ้ว"

แนะนำ: