1. 项目概述​

pyshimmer是一个非官方的Python API库,专为Shimmer可穿戴传感器设备开发,提供三种核心接口:

  • ​蓝牙API​:通过RFCOMM协议与LogAndStream固件通信
  • ​底座API​:通过USB串口与Dock连接的设备交互
  • ​数据读取API​:解析Shimmer设备生成的二进制数据文件

📌 ​兼容性提示​:仅支持Linux平台,推荐使用Firmware v0.15.4及以上版本

​2. 快速安装​

# 通过pip安装稳定版
pip install pyshimmer

# 从源码安装(含测试套件)
git clone https://github.com/seemoo-lab/pyshimmer.git
cd pyshimmer
pip install .[test]
pytest  # 运行单元测试

​3. 硬件准备​

​3.1 蓝牙连接配置​

# 扫描设备MAC地址(末尾数字对应设备背面ID)
hcitool scan
> Scanning...
> 00:12:6F:XX:XX:XX Shimmer3-XXXX

# 建立RFCOMM绑定(需root权限)
sudo rfcomm bind 42 00:12:6F:XX:XX:XX

此时会生成设备节点:/dev/rfcomm42

​3.2 多设备UDEV规则(可选)​​

创建/etc/udev/rules.d/10-shimmer.rules:

# 示例:区分ECG和PPG设备
SUBSYSTEM=="tty" ATTRS{idVendor}=="0403" ATTRS{serial}=="A12345" SYMLINK+="ttyECGdev"
SUBSYSTEM=="tty" ATTRS{idVendor}=="0403" ATTRS{serial}=="B67890" SYMLINK+="ttyPPGdev"

生效规则:sudo udevadm control --reload

​4. 核心API使用示例​

​4.1 蓝牙实时数据流​

from pyshimmer import ShimmerBluetooth, DataPacket, EChannelType

def data_handler(pkt: DataPacket):
    gsr = pkt[EChannelType.GSR]  # 获取皮肤电数据
    print(f"GSR值: {gsr:.2f} μS")

# 建立蓝牙连接
dev = ShimmerBluetooth("/dev/rfcomm42")
dev.initialize()
dev.add_stream_callback(data_handler)

# 开始采集(5秒后停止)
dev.start_streaming()
import time; time.sleep(5)
dev.stop_streaming()

​4.2 底座模式设备控制​

from pyshimmer import ShimmerDock

with ShimmerDock("/dev/ttyECGdev") as dock:
    mac = dock.get_mac_address()  # 获取设备MAC地址
    batt = dock.get_battery_level()  # 读取电量
    print(f"设备 {mac} 当前电量: {batt}%")

​4.3 离线数据分析​

from pyshimmer import ShimmerReader

reader = ShimmerReader.open("ecg_data.bin")
print(f"采样率: {reader.sample_rate}Hz")
print(f"可用通道: {reader.channels}")

# 提取ECG数据(24位精度)
timestamps = reader[EChannelType.TIMESTAMP]
ecg_signal = reader[EChannelType.EXG_ADS1292R_1_CH1_24BIT]

​5. 高级功能​

​5.1 多设备同步​

# 主设备设置同步信号
master_dev.set_as_master()

# 从设备启用同步
slave_dev.enable_synchronization()

​5.2 传感器配置​

# 配置GSR采样率(128Hz)
dev.set_sample_rate(EChannelType.GSR, 128)

# 启用加速度计(±8g量程)
dev.enable_sensor(
    EChannelType.ACCEL_LN_X,
    range_code=0x02  # 对应±8g
)

​6. 常见问题解决​

问题现象可能原因解决方案
连接超时固件版本过低升级至v0.15.4+
数据包丢失蓝牙带宽不足降低采样率或关闭冗余通道
解码错误SD卡文件损坏使用ShimmerReader的校验模式

​7. 典型应用场景​

  1. ​情绪研究​:GSR+ECG多模态分析
  2. ​运动捕捉​:9轴IMU数据融合
  3. ​远程医疗​:蓝牙传输生命体征数据

🚀 ​性能数据​:在Raspberry Pi 4上实测支持6台设备同时连接(采样率50Hz)

​关键词: Shimmer3, pyshimmer, 生物信号采集, Python API, 可穿戴设备

更多推荐