Python SerialException:设备报告已准备好读取但未返回任何数据

2024-02-14

我正在使用 Arduino Nano(以前是 UNO)从传感器收集数据,然后通过供电集线器通过 USB 连接将数据发送回运行 Jessie 4.1.19+ 2016 年 3 月 15 日和 Python 2.7 的 Raspberry Pi model B 。 python代码使用pyserial readline来获取数据。

一般来说,它工作正常,但偶尔(通常是一天几次)它会失败并显示上述消息。解决这个问题的唯一方法似乎是拔掉 USB 连接,重新连接并重新启动程序。我更改了代码以捕获异常,但它不会重新打开连接,并给出错误:

serial.serialutil.SerialException:无法打开端口 /dev/ttyUSB0:[Errno 2] 没有这样的文件或目录:'/dev/ttyUSB0'

UNO(位于 /dev/ttyAMA0)和 NANO(位于 /dev/ttyUSB0)都会出现此问题。

就在最近,我发现出现此故障后,Nano 已移至 /dev/ttyUSB1。然后,Python 代码将针对 /dev/ttyUSB1 成功运行,但当问题再次发生时,它会切换回 /dev/ttyUSB0。

因此,我更改了代码以拦截异常并打开替代设备并继续。到目前为止,这工作正常,但显然不正确。

谁能建议问题可能出在哪里以及我如何诊断它?我技术不高!另外,我已经看到了有关此主题的其他几篇文章,但在这种情况下恢复到以前的内核级别并不实际。

更新为包括下面的日志输出。有两个设备:NANO (1a86:7523) 和 OWL 功率监视器 (0fde:ca05)。

$ dmesg -T
[2017 年 2 月 11 日星期六 14:53:02] USB 1-1.3-port2:被集线器禁用(EMI?),重新启用...
[2017 年 2 月 11 日星期六 14:53:02] USB 1-1.3.2:USB 断开连接,设备编号 71
[2017 年 2 月 11 日星期六 14:53:03] dwc_otg_hcd_handle_hc_fsm:173 个回​​调被抑制
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1649 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1650 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] ch341-uart ttyUSB1:usb_serial_generic_read_bulk_callback - urb 停止:-32
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1651 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1652 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1653 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] ch341-uart ttyUSB1:usb_serial_generic_read_bulk_callback - urb 停止:-32
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1654 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1655 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1656 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1657 失败 - FIQ 报告 NYET。数据可能已丢失。
[2017 年 2 月 11 日星期六 14:53:03] 传输到设备 72 端点 0x1 帧 1658 失败 - FIQ 报告 NYET。数据可能已丢失。
[Sat Feb 11 14:53:03 2017] usb 1-1.3.2:使用 dwc_otg 的新全速 USB 设备编号 73
[2017 年 2 月 11 日星期六 14:53:03] usb 1-1.3.2:找到新 USB 设备,idVendor=0fde,idProduct=ca05
[2017 年 2 月 11 日星期六 14:53:03] usb 1-1.3.2:新 USB 设备字符串:Mfr=1、Product=2、SerialNumber=3
[Sat Feb 11 14:53:03 2017] USB 1-1.3.2:产品:OWL 无线电力监测器 USB 版本已连接
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.2:制造商:Silicon Labs
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.2:序列号:001A3C26
[2017 年 2 月 11 日星期六 14:53:03] cp210x 1-1.3.2:1.0:检测到 cp210x 转换器
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.2:cp210x 转换器现已连接到 ttyUSB0
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3-port3:被集线器禁用(EMI?),重新启用...
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.3:USB 断开连接,设备编号 72
[Sat Feb 11 14:53:03 2017] ch341-uart ttyUSB1:ch341-uart 转换器现已与 ttyUSB1 断开连接
[2017 年 2 月 11 日星期六 14:53:03] ch341 1-1.3.3:1.0:设备已断开连接
[Sat Feb 11 14:53:03 2017] USB 1-1.3.3:使用 dwc_otg 的新全速 USB 设备编号 74
[2017 年 2 月 11 日星期六 14:53:03] usb 1-1.3.3:找到新 USB 设备,idVendor=1a86,idProduct=7523
[2017 年 2 月 11 日星期六 14:53:03] usb 1-1.3.3:新 USB 设备字符串:Mfr=0、Product=2、SerialNumber=0
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.3:产品:USB2.0-串行
[2017 年 2 月 11 日星期六 14:53:03] ch341 1-1.3.3:1.0:检测到 ch341-uart 转换器
[2017 年 2 月 11 日星期六 14:53:03] USB 1-1.3.3:ch341-uart 转换器现已连接到 ttyUSB2
[Sat Feb 11 14:53:05 2017] cp210x ttyUSB0:cp210x 转换器现已与 ttyUSB0 断开连接
[2017 年 2 月 11 日星期六 14:53:05] cp210x 1-1.3.2:1.0:设备已断开连接


我知道这是一个旧线程,但我最近遇到了这个问题树莓派 3 B 型修订版 1.2运行 Debian 内核 5.4.0-3-arm64,同时连接3018 CNC Pro控制板。当我lsusb,董事会显示为

Bus 001 Device 011: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

每当我打开串口时,USB 设备就会重置。我进行了广泛的搜索,应用了来自不同论坛的一堆配置参数,但是事实证明这个问题与我的电源有关.

虽然 3018 CNC Pro 板具有独立电源,但板上的 USB 串行芯片是总线供电的(在lsusb -v)。我的 Raspberry Pi 有充足的可用电源,但我通过金属夹并沿着金属通道运行 1m USB 电缆,该金属通道必须有足够的电感来抵抗通过 USB 电缆所需的电源浪涌。取下夹子就解决了这个问题。

希望这篇笔记对某人有所帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python SerialException:设备报告已准备好读取但未返回任何数据 的相关文章

  • 相同的命令在不同的设备上输出不同的值

    我有两个树莓派 3 当我做 tfenv pi raspberrypi pip install opencv python 在第一个 Raspberry Pi 上 我得到 Collecting opencv python Could not
  • 在裸机 RPI 集群上使用 Metallb 的 LoadBalancer 安装后无法工作

    我正在摆弄我设置的 RPI 集群Kubeadm我想让 LoadBalancers 能够在集群上工作 节点的 IP 是静态的 并且设置为192 168 1 100 192 168 1 103对于主节点和工作节点 我已经使用官方网站文档安装了
  • 终止导致设备或资源繁忙的进程:“/dev/ttyUSB0”?

    我使用以下 Python 代码连接到我的 Arduino 板 device glob glob dev ttyUSB 0 time sleep 1 arduino serial Serial device 115200 timeout 5
  • 如何跨架构使用 python-poetry?

    我的主要开发机器是x86 64虽然我的一些部署环境是arm7vl 树莓派 对于大多数 Python 开发来说 这不是问题 但某些 Python 库只能在PyPI https pypi org for x86 64 or piwheels h
  • 如何使用“serial.tools.list_ports”python 模块获取可用串行端口的列表?

    我是 python 新手 我需要一个可用串行端口列表来在程序中选择其中一个 根据This https pyserial readthedocs io en latest tools html module serial tools list
  • Python io 模块的 TextIOWrapper 或 BuffereRWPair 函数与 pySerial 不能很好地配合

    我正在为一些科学硬件编写一个串行适配器 其命令集 http www sutter com SOFTWARE USBv3 pdf使用 UTF 8 字符编码 来自硬件的所有响应均以回车符 u r 终止 我希望能够使用 pySerialreadl
  • 无法在 Raspberry Pi 上安装 PyQt5 [重复]

    这个问题在这里已经有答案了 我正在尝试在我的 Raspberry Pi 机器上安装 PyQt5 我努力了 pip3 install pyqt5 pip3 install upgrade pip pip3 install pyqt5 5 14
  • 我可以使用 SocketCAN 读取 CRC 和 ACK 位吗?

    我正在寻找一种方法 通过 PiCan2 将消息从一个 Raspberry Pi 发送到另一个 并接收回来以读取 CRC 和 ACK 位 我搜索了文档但找不到这样的选项 我可能错过了什么吗 你不直接处理CRC and ACK 但当此类事件发生
  • 使用 /dev/tty* 进行 9 位 uart 仿真

    我有一个不常见的协议 它需要 9600 波特率 9 位和 1 个停止位 我找不到任何可以实现此发送 接收的驱动程序 我可以寄东西到 dev tty 用于模拟这些查询 我应该发送什么 如何模拟 9600 波特率 您可以使用粘性奇偶校验 也称为
  • 需要使用Python进行每日日志轮换(0utc)

    我是公认的 Python 菜鸟 我编写了一个小记录器 它从串行端口获取数据并将其写入日志文件 我有一个小程序 可以打开文件进行追加 写入 然后关闭 我怀疑这可能不是最好的方法 但这是我到目前为止所想到的 我希望能够让它在 00 UTC 自动
  • Raspberry Pi 4 上的 .Net Core 和 Raspbian?

    是否可以安装 Net Core树莓派4 with Raspbian 我发现了一些关于 Raspberry Pi 3 上的 Net Core 的说明 例如 https github com dotnet core blob master sa
  • 如何将timestamp_t转换为实际时间?

    我见过很多使用 time t 的例子 但 timestamp t 让我感到困惑 我正在做一个作业 我们需要打印出 GPS 数据 并且 GPS 设备返回一个类型 timestamp t 来表示它的时间戳和纪元时间 我尝试过使用 gmtime
  • Linux 上共享串口

    我正在使用 Raspberry Pi 进行一个项目 该项目需要能够写入和读取串行端口 但来自不同的程序 程序 A 需要能够从外围设备 A 正在发送数据的串行端口读取数据 程序B需要向串口写入数据 外设B正在监听串口 供参考 本例中程序A是G
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • 树莓派蓝牙4.0连接

    我正在尝试使用 CoreBluetooth 蓝牙 4 0 通过 iPhone 连接到 Raspberry Pi 我已经发现了该设备并使用以下代码发出连接请求 if peripheral self foundPeripheral NSLog
  • 如何提高 PySerial 读取速度

    我目前正在构建一台使用 Arduino Mega2560 作为主控制器的机器 Arduino 通过串口连接 获取命令 执行它并每 1ms 吐出一堆测量数据 我有一个运行 Python 的 Raspberry Pi 为用户提供一个漂亮的 GU
  • 树莓派和 GitLab

    有什么办法可以运行 GitLab http gitlab org gitlab ce http gitlab org gitlab ce 和 GitLab CI http gitlab org gitlab ci http gitlab o
  • 如何在 Arduino 中将 char 变量作为数字打印到串行端口?

    我正在使用 Arduino Uno 我正在从 EEPROM 读取一个字节值并将该值存储在类型变量中char 1 字节 我想将变量的值作为数字 而不是相应的 ASCII 代码 打印到串行监视器 例如考虑char val 5 我想查看串行监视器
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • 树莓派的设备树驱动内核

    我想用设备树驱动的 Linux 内核启动树莓派 有什么特别的事情要做吗 谁能指出为树莓派设置基于设备树的内核启动需要什么 我可能需要有树莓派内核源代码 其中设备驱动程序应与设备树兼容 如果是这样 我在哪里可以找到 Raspberry Pi

随机推荐