假日藍芽工程師, 先動起來再說
前言
在Internet上找了又找 ,用這幾個關鍵字"Raspberry Pi, BLE"或著"BLE Linux"之類的,最後我找到兩篇文章很好用。只要著做,我的心跳感應器就會動了。只是我完全不懂藍牙的協定, 這讓人有點不舒服。
身為一枚假日藍牙工程師,有時候我就是得在弄清楚一切之前,就先讓東西動起來。所以我決定先把發現的事寫下來,之後再找答案。
gatttool
這個tool是Bluez套件的其中一部份。在找資料的過程中,GATT/ATT這兩個關鍵字反覆出現。之後再搞清楚他們的意思吧。
在前一篇文章提到怎麼用"hcitool lescan"找出裝置的MAC address,然後就可以用gatttool和心跳帶建立連線:
在tool的視窗裡,打help就可以看它提供的功能。身為一個好奇的假日工程師,我每個都有試玩過。
Primary這道命令很有趣,他會列出裝置支援的所有服務。我檢查所有UUID之後,在藍牙開發者網站找到一份資料,解析每個服務的意思。底下標紅字的是心跳服務,證明我的裝置真的是藍牙心跳感應器。
下一道command是"char-desc",他會產生一張表格, 列出所有的handles。交叉比對上下兩張圖,Primary指令裡列出的handle 0/8/9/11/15,在下面的表格裡,UUID正好都是0x2800。藍牙規格網站 裡面說0x2800是"Primary Service",好像這些東西互相有些關聯。
我找了一堆網頁,似乎有fu能搞清楚他們互相之間的關係。等搞清楚了再另外寫一篇文章。
最後的高潮來了,這篇文章指出要把UUID = 0x2902的項目設成 0100。上表滿足的handle是0x0C和0x14。經過實驗,最後設定handle[0x0C] = 0100就可以啟動心跳表的notification功能,週期性的回報資料。
Notification的方向是從心跳表送出資料到主機端(RPi),主機端會把收到的資料印出來。因為我很用功,所以也找到 網頁解釋怎麼解析資料。
底下的範例是上圖第一發notification,0x16 0x42 0xA1 0x03 的翻譯
在Internet上找了又找 ,用這幾個關鍵字"Raspberry Pi, BLE"或著"BLE Linux"之類的,最後我找到兩篇文章很好用。只要著做,我的心跳感應器就會動了。只是我完全不懂藍牙的協定, 這讓人有點不舒服。
- Get started with Bluetooth Low Energy
- Bluetooth Low Energy: listening for notifications/indications in linux
身為一枚假日藍牙工程師,有時候我就是得在弄清楚一切之前,就先讓東西動起來。所以我決定先把發現的事寫下來,之後再找答案。
gatttool
這個tool是Bluez套件的其中一部份。在找資料的過程中,GATT/ATT這兩個關鍵字反覆出現。之後再搞清楚他們的意思吧。
在前一篇文章提到怎麼用"hcitool lescan"找出裝置的MAC address,然後就可以用gatttool和心跳帶建立連線:
在tool的視窗裡,打help就可以看它提供的功能。身為一個好奇的假日工程師,我每個都有試玩過。
Primary這道命令很有趣,他會列出裝置支援的所有服務。我檢查所有UUID之後,在藍牙開發者網站找到一份資料,解析每個服務的意思。底下標紅字的是心跳服務,證明我的裝置真的是藍牙心跳感應器。
- 0x1800, Generic Access
- 0x1801, Generic Attribute
- 0x180D, Heart Rate
- 0x180F, Battery Service
- 0x180A, Device information
"attr handle"這個字串看起來很像是某個表格的index。
下一道command是"char-desc",他會產生一張表格, 列出所有的handles。交叉比對上下兩張圖,Primary指令裡列出的handle 0/8/9/11/15,在下面的表格裡,UUID正好都是0x2800。藍牙規格網站 裡面說0x2800是"Primary Service",好像這些東西互相有些關聯。
我找了一堆網頁,似乎有fu能搞清楚他們互相之間的關係。等搞清楚了再另外寫一篇文章。
最後的高潮來了,這篇文章指出要把UUID = 0x2902的項目設成 0100。上表滿足的handle是0x0C和0x14。經過實驗,最後設定handle[0x0C] = 0100就可以啟動心跳表的notification功能,週期性的回報資料。
Notification的方向是從心跳表送出資料到主機端(RPi),主機端會把收到的資料印出來。因為我很用功,所以也找到 網頁解釋怎麼解析資料。
底下的範例是上圖第一發notification,0x16 0x42 0xA1 0x03 的翻譯
- 0x16
[bit0] 0:heart rate value is UINT8, 1:heart rate value is UINT16
[bit2:1] 3:Sensor contact feature is supported
[bit3] 0: Energy expanded field is not present
[bit4] 1: One or more RR-interval values are present. Unit = 1/1024 seconds - 0x42
Heart rate measure value, 66 in decimal - 0xa1 0x03
The heart rate interval is 0x3A1 = 929 / 1024 seconds
60sec / (929/1024) = 66 (heart rate)
留言