ANT+找樂子(2),解析心跳感應器和封包
整活啦 ANT+ Device Profile,Heart Rate Monitor 規格 ,心跳傳輸的速度約4Hz。 上一篇範例程式 速度怎麼搞都很慢,問Grok AI,或是Chatgpt答案都很怪,這種冷門知識還是得靠自己。這篇要講心跳表的定義,以及怎麼用openant讀出數值 心跳表的規格 RF頻率 = 2457Mhz(下表的57代表2400Mhz + 57Mhz) 心跳表用哪個頻率是規定好的 訊息發送間隔是32768/8070=4.06Hz,大多ANT+感應器操作在4Hz附近 Device Type是0x78,Transmission Type=1 為什麼Message Period不設定成8192(4Hz) 為了避免無線電波碰撞。ANT+讓每個裝置頻率略有不同,就算發生碰撞也是短時間,稍後還是會錯開。這個是很有智慧的設計! 直接操作Channel 不囉唆,直接上code node = Node(), set network key ANT+的公開鑰匙,幾乎99%的ANT+裝置都用這把鑰匙 ANTPLUS_NETWORK_KEY = [0xB9, 0xA5, 0x21, 0xFB, 0xBD, 0x72, 0xC3, 0x45] new_channel,開啟host(電腦)和裝置的通道,這個通道是雙向的 幾乎所有範例都是雙向,直接抄 set_period(8070) 根據上表,心跳表的週期是8070照著設定 ch.set_id(54345, 120, 241) # GARMIN WATCH ch.set_id(49528, 120, 1) # Magene 上述的code,連接Garmin Watch或是Magene心跳帶都可以 ch.open() node.start() 開始和ANT+裝置溝通 finally: node.stop() 如果按CTRL+C,有機會能正確結束程式。不然在MAC經常要插拔Dongle才能恢復 解析ANT+封包 來自規格書的照片先來一張, 中文資料 byte0[bit7]叫Toggle bit,ANT+經常會重送資料以免接收端漏收,招數很土,但是有用 因為會重送,所以當封包內容改變,toggle-bit會變化;這樣接收端就能判斷是資料有變 byte0[bit6:0]叫page,這裡是一個編號,代表後面b...