You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下读取TEMPerHUM USB温湿度设备数据的技术求助

Windows 11下读取TEMPerHUM USB温湿度设备数据的技术求助

我看到你在Windows 11下折腾TEMPerHUM USB温湿度设备时碰了不少钉子——Linux下能正常读取,但Windows上试了pyusb、wmi、libusb都没搞定,还碰到了「no backend available」的报错,虽然用WMI能定位到设备,但不知道怎么实际读出温湿度数据。我来给你分享几个实操方向和代码例子,应该能帮你解决问题:

一、先解决pyusb的「no backend available」问题

这个报错本质是pyusb找不到能和Windows USB栈交互的后端驱动,因为Windows默认给这类设备装的驱动不被libusb兼容,得先换驱动:

  1. 下载并打开Zadig工具,在设备列表里找到你的TEMPerHUM设备(可以通过VID_10C4&PID_3553来识别,也就是你代码里判断的ID)
  2. 选择「libusb-win32」作为目标驱动,点击「Install Driver」完成替换
  3. 重新安装pyusb确保环境正常:pip install pyusb

搞定驱动后,用下面的pyusb代码就能尝试读取数据了:

import usb.core
import usb.util

# TEMPerHUM的固定VID和PID
VID = 0x10C4
PID = 0x3553

# 定位设备
dev = usb.core.find(idVendor=VID, idProduct=PID)
if not dev:
    raise ValueError("设备没找到!先检查驱动是否装对")

# 解除Windows内核对设备的占用(如果有的话)
if dev.is_kernel_driver_active(0):
    try:
        dev.detach_kernel_driver(0)
    except usb.core.USBError as e:
        print(f"没法解除内核驱动占用:{str(e)}")
        exit()

# 激活设备配置
dev.set_configuration()

# 找到数据输入端点(TEMPerHUM的输入端点一般是0x81)
cfg = dev.get_active_configuration()
intf = cfg[(0, 0)]
ep = usb.util.find_descriptor(
    intf,
    custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN
)

if not ep:
    raise ValueError("找不到数据输入端点")

# 读取并解析数据
try:
    data = ep.read(8)  # TEMPerHUM通常一次返回8字节数据
    # 按照设备协议解析温湿度
    temperature = (data[2] << 8 | data[3]) / 10.0
    humidity = (data[4] << 8 | data[5]) / 10.0
    print(f"当前温度:{temperature}°C")
    print(f"当前湿度:{humidity}%")
except usb.core.USBError as e:
    print(f"读取数据失败:{str(e)}")

二、试试更适合Windows的pywinusb库

如果pyusb还是有问题,可以试试pywinusb,它专门针对Windows的HID类设备做了优化,TEMPerHUM大多属于这类设备:

  1. 先安装库:pip install pywinusb
  2. 用下面的代码读取数据:
import pywinusb.hid as hid

VID = 0x10C4
PID = 0x3553

# 定义数据回调函数,收到数据就解析打印
def handle_hid_data(data):
    if len(data) >= 6:
        temperature = (data[2] << 8 | data[3]) / 10.0
        humidity = (data[4] << 8 | data[5]) / 10.0
        print(f"温度:{temperature}°C | 湿度:{humidity}%")

# 查找设备
target_devices = hid.find_all_hid_devices(vendor_id=VID, product_id=PID)
if not target_devices:
    print("没找到TEMPerHUM设备")
    exit()

device = target_devices[0]
try:
    device.open()
    # 设置数据处理回调
    device.set_raw_data_handler(handle_hid_data)
    print("正在实时读取数据,按Ctrl+C停止...")
    # 保持程序运行
    while True:
        pass
except Exception as e:
    print(f"运行出错:{str(e)}")
finally:
    device.close()

三、关于你用的WMI代码

WMI只能帮你枚举和确认USB设备的存在,没法直接读取设备的温湿度数据——它的作用是帮你验证设备是否被Windows识别,就像你代码里做的那样,但真正的通信还是得靠pyusb、pywinusb这类USB/HID通信库。

注意事项

  • 运行这些Python脚本时必须用管理员权限,否则Windows会阻止程序访问USB设备
  • 用Zadig换驱动时,别选错设备,不然可能影响其他USB设备的正常使用
  • 如果解析出来的温湿度不对,可能是设备的协议细节有差异,可以搜一下你这款TEMPerHUM的具体数据格式调整解析逻辑

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:50:31