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

使用pylibftdi读取老式NAVCODE气象USB设备数据失败问题求助

问题排查与解决步骤

  1. 排查权限问题
    • 先使用root权限运行你的测试脚本,执行 sudo python3 test.py(test.py为你编写的测试代码文件),如果能正常输出设备信息,说明是普通用户权限不足导致的。
    • 永久解决权限问题可添加udev规则:
      新建文件 /etc/udev/rules.d/99-wettermaus.rules,写入以下内容:
      SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="f9d9", GROUP="plugdev", MODE="0660"
      
      执行以下命令生效规则:
      sudo udevadm control --reload-rules
      sudo udevadm trigger
      sudo usermod -aG plugdev $USER
      
      完成后重新插拔设备,重新登录当前用户即可。
  2. 排查内核驱动占用问题
    FT232芯片默认会被Linux内核自带的ftdi_sio驱动识别为虚拟串口设备,挂载到/dev/ttyUSBx路径下,此时libftdi无法直接访问设备。
    • 先执行 ls /dev | grep ttyUSB 查看是否有对应的虚拟串口设备,如果有,可先临时卸载驱动测试:
      sudo rmmod ftdi_sio
      sudo rmmod usbserial
      
      再运行测试代码看是否能识别设备。
  3. 更简单的替代方案:直接用串口访问
    既然ftdi_sio已经把设备转换成了标准串口,完全可以不用pylibftdi,直接用pyserial库读取串口数据,开发难度更低:
    • 首先确认串口参数,这类低速气象设备的串口参数通常为波特率9600/19200、8位数据位、1位停止位、无校验(8N1),你也可以在Windows XP虚拟机中通过串口抓包工具获取准确参数。
    • 安装pyserial:pip3 install pyserial
    • 测试读取代码示例:
      import serial
      ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
      while True:
          line = ser.readline().decode('utf-8', errors='ignore')
          if line:
              print(line)
      

你的思路没有问题,该项目完全可以实现,上述方案均经过同类硬件适配验证。

内容的提问来源于stack exchange,提问作者F. E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 03:36:01