问题标签 [pyserial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1441 浏览

python - Pyserial 持久化配置

我有此代码用于将文件大小从 linux 机器发送到嵌入式设备:

问题是当我运行这段代码(它总是在这里退出)时,程序员(通过同一个串行端口将固件加载到设备)退出并出现bad file descriptor错误。重新插入设备(其中没有内部能源)没有帮助,我必须重新启动计算机。Python代码有什么问题?即使重新插入设备(FT2232),错误的设置怎么可能仍然存在?

用cutecom打开端口可以对设备进行编程,但是当我再次关闭它时,错误又回来了。

更新1:使用strace我发现第一个区别在于锁:

成功加载的开始,

关于失败。第二个区别(以及整个错误)可能是加载程序中的错误,所以我在工具链论坛上写了(他们认为read()返回 0 是错误,调用perror(),但没有错误,所以 EBAFD 存储在之前的 errno 中) . 但我对锁很好奇。我在cutecom 或python 脚本(使用strace)中找不到任何参考,但锁受到了某种影响。是否可以将此问题迁移到 Unix 和 Linux 站点?

更新2:正如我之前提到的,问题是read()串口返回0。当我专注于此时,我发现read()应该阻塞或在非阻塞模式下返回EAGAIN。在什么情况下 read() 调用可以返回 0?

更新3:我通过select()调用设备来“解决”加载程序的问题。PySerial 更改端口中的某些内容仍然存在问题。

0 投票
1 回答
12727 浏览

python - 在 Windows XP 上使用 pyserial 模块从串口 (COM3) 读取数据

在进入问题之前,这里有一些硬件/软件信息:

访问设备:Ohaus Scout Pro 数字称重机(产品链接) 使用接口:USB(产品链接) 串口:COM3 操作系统:WinXP Python 版本:Activestate Python 2.7 pyserial 版本:2.5

Python 识别了这个串口并且打开它没有问题。我是 python 和 pyserial 的新手。我不知道如何从串口读取数据。我使用了以下代码:

这不打印任何内容。在这 3 秒超时期间,我将一个物体放在称重机上,它在机器上显示 100 克。但是,此数据未显示在计算机上。如何使用 pyserial 读取这些数据?

0 投票
2 回答
2337 浏览

python - 如何在 Python 中覆盖 PySerial 的“__del__”方法?

我设置了一个简单的 Python 脚本来将字符发送到 COM3 上的设备。(这是在 Windows XP 上运行的)设备可以正常接收字符,但是当脚本结束时,或者我调用

它将串行端口上的 DTR 线设置为高电平,重置我的设备。

对此感到困惑,我在 PySerial 文档(http://pyserial.sourceforge.net/)中四处寻找,发现 Module 有一个方法,该方法在删除 Serial 实例时__del__调用该函数。ser.close()

反正有覆盖这个__del__方法吗?

(我宁愿不必从 DTR 线断开我设备的重置线)

以下是我正在使用的基本代码:

0 投票
3 回答
44995 浏览

python - 在 Python / Win7 上使用串行

我正在尝试与串行 WWAN 调制解调器连接(用于诊断/信号强度测量目的)。这是通过我桌面上的板载 COM1 (115200-8-n-1) 进行的,连接通过 PuTTY 工作。我可以使用 Python 编写 AT 命令脚本,但我很难让它打开串口。

我已经按照说明安装了 Python 2.7.1 和 PySerial。我是我的机器的本地管理员,并且在有和没有管理员权限的情况下运行 Python,但是当我尝试打开端口时得到以下信息:

我的理解是 8-N-1 是默认值,即使我尝试手动设置它们也会引发相同的异常。

任何人都可以提供建议吗?提前致谢。

0 投票
2 回答
23594 浏览

python - Python串口通信

我正在开发一个 Arduino 项目,由于内存限制,我正在将它与 Python 脚本连接。在 Python 端,我有一个二维矩阵,其中包含相应的 x、y 坐标值,在这个列表中是 26000 个坐标对。因此,为了为大家阐明数据结构pathlist[0][0],将返回我列表的第一个坐标的 X 值。在 Python 中对该列表执行不同的操作等不会造成任何问题。然而,我遇到麻烦的地方是以一种有用的方式通过串行方式将这些值发送到 Arduino。

由于串行通信的性质(至少我认为是这种情况),我必须将每个整数作为字符串发送,并且一次只能发送一个数字。因此,像 345 这样的数字将作为 3 个单独的字符发送过来,当然是 3、4,然后是 5。

我正在努力寻找一种在 Arduino 上重建这些整数的方法。

每当我发送一个值时,它都会接收数据并像这样输出:

Arduino代码是:

Python 代码如下所示:

我几乎可以肯定问题不是源于输出方法 ( Serial.print),因为当我声明另一个 int 时,它的输出格式很好,所以我假设问题在于intdata变量的构造方式。

可能有助于诊断此问题的值得注意的一件事是,如果我将结果更改Serial.print(intdata)为,我预计会出现 30 (25+5)。无论输入如何,这个 7 都存在。例如,我可以将 271 写入串行,我的结果如下所示:Serial.print(intdata+5)2ÿÿ57

在我看来,Arduino 将值分成两对并将长度附加到末尾。我不明白为什么会发生这种情况。

在我看来,ÿ在 for 循环中添加了。这意味着它们被添加是因为当前没有发送任何内容。但即使通过添加另一个if(Serial.available()>0)条件来解决这个问题,结果仍然不会被视为整数。

另外,在这里使用Pickle合适吗?我究竟做错了什么?

0 投票
3 回答
4030 浏览

python - 如何将值从 Arduino 发送到 Python,然后使用该值

我正在构建一个使用 Python 远程控制的机器人,以通过一个简单的 GUI 通过 Internet 发送控制消息。

我的部分代码运行良好,GUI 和控制系统,但我被卡住了。我正在尝试使用视差 ping 传感器从Arduino Mega获取到对象的距离信息,并将该值发送到我的 Python 控制脚本以显示在远程 GUI 上。

我遇到的主要问题是如何将使用已经建立的 COM 端口的 Python 代码与 Arduino 集成,并发送一条消息告诉 Arduino 轮询 ping 传感器,然后发送到将接收该值的 Python 程序,然后让我将该值插入到我的 GUI 中。

我已经有了控制 Arduino 的代码,它可以通过我的简单 GUI 工作。

我真正想做的是改进上面的代码并添加一个按钮来单击以告诉 Python 向 Arduino 发送消息以检查 ping 传感器并返回值。我非常熟悉 Arduino 代码,但我在过去两周才开始使用 Python。

0 投票
2 回答
616 浏览

pyserial - __init__ 的 Pyserial 错误

我正在尝试创建一个使用 python 初始化串行端口连接的模块:

当我在 Python 中运行它时,我收到一条 AttributeError 消息,指出 self 没有打开属性。有谁知道上面这段代码有什么问题?任何帮助将不胜感激。

谢谢

0 投票
1 回答
3327 浏览

python - 通过 pyserial 接收多个值并在 Python GUI 中显示

我正在尝试使用 Python 中的串行通信接收数据,我可以这样做,但我需要改进我的代码。

我正在从 Arduino 发送一个“&4,25/n”形式的“数据包”,关键因素是“4”和“25”位置的值。在这个数据包中,我将“&”作为起始字节,将新的换行符“/n”作为终止符。这样我就可以知道何时发送了新数据包并结束了。

如何接收此数据包“&4,24/n”并提取“4,24”位置中的值?值得注意的是,这些值会发生变化,它们会因 Arduino 发送的传感器值而异。

这是我现在拥有的代码,我用来接收一个没有起始字节的单个值,它使用新的换行符来终止数据包。

这与资源文件一起为我提供了一个 GUI,可以通过VNC远程控制我的机器人。此代码从声纳接收一个 ping 值并将其报告给要显示的 GUI。我需要两个不同的 ping 值来显示两个不同的传感器。


更新

<下面的评论者回答。>这是正确的代码。

感谢一个伟大而简单的答案!

0 投票
3 回答
2586 浏览

python - 将 PySerial Readline 从字符串转换为二进制

我正在从 PIC 微控制器发送字节串 0x0F、0x07、0x55、0x55、0x55。

通过 Python 的串行端口,我在 PySerial 中使用 readlines() 命令。我收到:

这确实与我发送的字节串相对应,但它是使用十六进制和 ASCII 字符的奇怪组合进行格式化的。将其格式化回 0x0F, 0x07, 0x55, 0x55, 0x55 的好方法是什么?

0 投票
3 回答
13724 浏览

python - pyserial 枚举端口

我需要列出或枚举现有串行端口,直到现在我一直在使用这种方法enumerate_serial_ports(),但它不适用于 Windows 7。你知道一些替代方法,我如何在 Windows 7 下找到可用的串行端口?

我得到迭代错误 在此处输入图像描述