这篇是主菜。全程不刷固件、不写代码,只用空口抓包和 GATT Read,把 SHT43 广播里的温湿度数据逐字节拆出来。
广播帧长什么样
不连 GATT,只用 BleAnalyzer 空口监听,抓 SHT43 DB 的广播。挑一帧完整贴出来:
09 09 53 48 54 34 33 20 44 42
0b ff d5 06 00 06 b6 48 a1 65 ac 8d 02
0a 00
按 BLE AD Structure 逐层拆:
| 09 09 | Length=9,Type=0x09 = Complete Local Name |
| 53 48 54 34 33 20 44 42 | ASCII "SHT43 DB" |
| 0b ff | Length=11,Type=0xFF = Manufacturer Specific Data |
| d5 06 | Company ID = 0x06D5(Sensirion,小端) |
| 00 06 | ad-type=0,sample-type=6(SHT4x 温湿度广播) |
| b6 48 | Device ID = 0x48B6 = 18614,正好等于 MAC 末两字节 |
| a1 65 | T_raw(uint16 LE)= 26017 |
| ac 8d | RH_raw(uint16 LE)= 36268 |
| 0a 00 | Tx Power Level = 0 dBm |
代入 SHT4x 标准换算:
T = -45 + 175 × 26017 / 65535 = 24.47 ℃
RH = -6 + 125 × 36268 / 65535 = 63.18 %RH
115 帧统计
整段记录共解出 115 帧 sample-type 0x06 广播:
| 温度 T | 24.41 ℃ | 25.07 ℃ | 24.79 ℃ |
| 相对湿度 RH | 62.44 %RH | 86.62 %RH | 63.40 %RH |
一个有意思的细节:115 帧里有一帧 RH 突然跳到 86.62 %,前后帧又立刻回到 63 % 附近。这就是手靠近/呼气掠过裸片时 SHT4x 的真实响应——响应快,但也确实敏感。

图1:BleAnalyzer 广播列表 + 展开的 Manufacturer Data hex(标 00 06 + DevID + T_raw + RH_raw)。
GATT 温度特征实读
PC 端 Windows 配对偶发 SMP_PAIR_FAILED: Repeated Attempts,换到手机 nRF Connect 连板,展开 Temperature 服务:
| Service | 00002234-b38d-4985-720e-0f993a68ee41 | PRIMARY |
| ↳ Characteristic | 00002235-b38d-4985-720e-0f993a68ee41 | READ NOTIFY |
| ↳ CCCD | 00002902-… | 客户端配置 |
Read 一次返回 8 字节 6E 88 CD 41 25 62 CD 41,按 float32 小端拆:
| 6E 88 CD 41 | 25.69 ℃(Read 返回) |
| 25 62 CD 41 | 25.67 ℃(Notify 推送) |
弹窗"实时速度 4 B/s"= 每秒一个 float32,即 Notify 约 1 秒推一次温度。

图2:nRF Connect 服务列表展开 00002234,可见 0x2235 的 READ NOTIFY 属性。
图3:Read 返回弹窗,hex 6E 88 CD 41 25 62 CD 41。
四路对齐
| 空口广播 115 帧均值 | 24.79 ℃ |
| GATT 0x2235 Read | 25.69 ℃ |
| 板载 LCD | 25.86 ℃ |
| MyAmbience Dashboard | 25.8 ℃ |
四条路差 1 ℃ 以内,读的是同一颗 SHT43。不连 GATT 也能从空口直接拿到温湿度——这正是这块板作为"广播式环境节点"最值钱的地方。

我要赚赏金
