问题标签 [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 回答
2769 浏览

python - 如何用pyserial打开串口?

我正在尝试用 python 打开一个串口。这是在 Ubuntu 上。我导入 openinterface.py 并输入

我收到一条错误消息,提示“-: 'str' 和 'int' 的操作数类型不受支持”我尝试使用单引号而不是双引号进行相同的调用,并且根本没有引号。

我怎样才能解决这个问题?或者是否有替代功能可以使用?我只知道 Python 的基础知识,所以也许我没有注意到它的一些小语​​法?任何帮助将不胜感激,谢谢。

0 投票
4 回答
6368 浏览

python - pySerial 在 Python 解释器中工作正常,但不是独立的

早上好!最近我买了一块 Arduino 板来在我的房间里做某种“灯光控制”。这是我写的固件代码:

之后,我使用 Python 解释器中的 pySerial 来控制引脚,一切正常。这是一段解释器输出:

然后我决定编写一个简单的 Python 脚本来做同样的事情:

但它根本不起作用!Arduino 显示在我启动脚本期间收到了一些东西,但没有任何反应。这是脚本的一段 strace 输出:

看起来一切都应该没问题,所以我不知道问题出在哪里。我会很感激任何帮助,非常感谢提前!

PS 当我在 PDB 下运行程序时,一切正常。一只海森堡。

更新:我让控制器将它收到的数据发回给我,当我运行脚本时它似乎没有收到任何东西,但是当我从解释器发送数据时它收到了所有东西。固件的代码现在如下所示:

0 投票
1 回答
533 浏览

python - 如何使用 pyserial 流式传输机器人传感器?

我正在尝试使用 pyserial 流式传输 iRobot Create 的传感器。我导入 openinterface.py,使用 CreateBot 函数设置 bot 变量,然后调用

bot.stream_sensors(6)

然后我收到这个错误 - “流线程错误!元组索引超出范围” 我用 6 调用函数的唯一原因是因为这就是我正在查看的示例所使用的。我还尝试了 stream_sensors(0)、stream_sensors(1),一直到 6。对于小于 6 的任何数字,我都会收到相同的错误以及“非法传感器 ID!”。参数基于什么?它是我想要流式传输的特定传感器吗(如果是,我如何获得数字)?任何帮助,将不胜感激。

0 投票
2 回答
515 浏览

streaming - iRobot Create 不返回传感器数据

我正在尝试从 iRobot Create 流式传输传感器数据。当我尝试 bot.stream_sensors(somenumber) 和 bot.poll_sensors(somenumbers) 时,出现元组超出范围错误。每当我输入 bot.sensors 时,我都会得到一个空数组 {}。我什至尝试在推入凹凸传感器时发送 bot.sensors,但仍然得到一个空数组。我通过串行端口连接到机器人,身边有一个串行到 USB 转换器。尝试获取传感器数据之前的唯一代码是 import openinterface bot = openinterface.CreateBot(com_port="/dev/ttyUSB0", mode="full")

有谁知道如何解决这个问题?其他地方都只使用 stream_sensors(6) ,它似乎工作正常。

PS我不久前发布了一个类似这个主题的问题,但没有人回应。不是想发送垃圾邮件,但现在我有一个更明确的问题以及明显的问题是什么,所以我想我会再试一次。

0 投票
5 回答
3368 浏览

python - Arduino 和 pySerial 的问题

我有问题。我最近买了一块Arduino Uno板。我试着做一些有趣的事情,比如控制我电脑的输入。我将 Python 与pySerial一起使用,程序如下:

写入值应通过 USB 将值发送到我的板。船上加载的程序是:

我的 LED 工作正常。我尝试使用 Arduino 提供的 Fade 示例,它正在工作..

我检查了程序是否正确发送数据。是的。它返回我之前发送的相同内容。

它应该检索已发送和设置的值analaogWriter(pin, VALUE),但出现错误或无法正常工作。

我该如何解决这个问题?

解决方案

Arduino代码

Python脚本代码:

谢谢大家!!:)

0 投票
2 回答
1872 浏览

python - Python:使用 PySerial 发送状态位和时间戳的最佳方式是什么

我已经进行了相当多的搜索和阅读,但还没有找到一个确切的明确答案。我正在制作 python 应用程序,它将通过串行端口与另一个通信。我一直在使用 PySerial 来实现这一点。我要发送的数据包类型是状态信息和数据读数。我建议将我的数据包形成如下:

虽然我认为我不需要结束字节,因为那里有一个长度。我对么?

我正在考虑为状态信息塑造数据包的“消息”部分,如下所示:

这里的消息ID只是为了区分这是一个状态包而不是数据包。状态信息本身由 16 位组成,代表发送应用程序中多个子系统的状态。对于其中一些子系统,单个位将提供足够的信息(“0”表示子系统关闭/低/假,“1”表示打开/高/真)。其他将需要 2 或 3 位(表示状态等)。对系统进行原型设计,我一直在简单地构建一个字符串,将这些位连接起来形成类似的东西'1001110101101100'并将其发送到串行端口,校验和是状态位的模 256。

我对 Python 和串行通信很陌生,但我知道这可能是对带宽的浪费。我知道 PySerial 必须发送字符串,但将每个位表示为“0”或“1”,就像这样对每个位使用完整的字符串表示。我想知道发送这些位以减少带宽的最佳方法是什么?

例如,我是否会采用每 8 位,将它们转换为十六进制并发送连接的十六进制字节,如下所示:

表示为

还是我应该将它们作为 ASCII 发送?我还看到提到 Struct 模块。我应该走那条路吗?

我想知道的另一件事是如何表示消息的时间戳部分。

任何帮助,您可以给我的建议将不胜感激。

非常感谢 :)

0 投票
2 回答
4723 浏览

python - PySerial 模块中的“字节大小”

我想使用 PySerial 通过串口发送消息。串行构造函数的参数之一是“bytesize”。我一直在尝试 serial.SEVENBITS 和 serial.EIGHTBITS 并没有注意到有什么不同。文档有点模糊,我对 Python 和串行通信都是新手。这只是设置一个字节可以容纳的最大值还是与有符号字节有关?谁能弄清楚为什么我会使用 7 位而不是 8 位?我一直在寻找,但没有找到答案。

谢谢

0 投票
2 回答
3747 浏览

python - PySerial - 无法发送 STX

好的,所以我完全是 pySerial 的菜鸟。我正在尝试与一台实验室设备通信,但在发送 STX(文本开头)命令时遇到了问题。到目前为止,我的基本代码如下所示:

但是,当我查看示波器上的 232 个数据时,我尝试发送的 STX 看起来与在 Hperterminal 中发送的 STX 命令完全不同。

有任何想法吗?我确信这是非常简单的,我只是忽略了一些微不足道的事情。

谢谢!

0 投票
1 回答
3269 浏览

serial-port - pySerial 写入 Arduino Uno 得到缓冲

我有一个 Python 脚本,它使用 pySerial 将短消息写入我的 Arduino Uno 板上的串行端口。有一个循环,根据某些条件,循环内可能发生多次写入,如下所示:

但是,当我的 Arduino 板收到此消息时,它会收到作为 INIT 的第一条消息,但第二条消息被读取为 INITSTOP 或 INITCHECK,第三条消息与之前的消息连接。我的 arduino 程序以这种方式检查特定消息:

有人可以指导我吗?顺便说一句,我认为问题不在于 Arduino,因为当我使用 IDE 提供的串行监视器对其进行测试时,它可以完美运行。

我尝试在每次写入前添加长达 10 秒的睡眠,但这并没有奏效。

0 投票
1 回答
820 浏览

python - 如何使用 ser.readlines 正确地将串行输出分配给值以供进一步使用?

我是新手并编写了一个脚本,该脚本通过串行 USB 端口启动与电能表的通信(“/?!”)并读出传入的电能日志。它从输出中提取不同的值并将它们写入本地 sqlite-db。假设每 15 分钟运行一次 cronjob。一个 php 网站会将 sqlite 存储的能量读数可视化为图表。

目前我无法使用电表,那里非常偏远和寒冷,所以我需要在去那里之前立即获得它。
如果我尝试执行脚本,则会引发错误:ser.readlines(eol='!') = z
SyntaxError: can't assign to function call

我使用串行输出的 ser.readlines 读取并分配给值 z 是否错误?
如果我打开一个包含类似值的日志文件,则脚本(正则表达式和插入数据库)可以工作:例如 with open ("log") as z:..