【发布时间】:2014-04-29 17:17:29
【问题描述】:
我一直在尝试使用 UART 接口将 Raspberry Pi 接口与嵌入式电路结合起来。 Pi 上的 UART 接口工作正常,我可以从电路接收消息,但我无法向电路发送消息。
我正在使用 Python 3.3 和 Pyserial 2.7。示例代码可用,但它使用 Pyserial 2.6。当与旧版本的 Python (ser.write() 接受字符串,但现在它只接受字节数组。
我遇到的问题是发送回车......旧代码应该只用:
ser.write("L1\r")
但现在我正在使用以下内容:
ser.write(bytearray("L1\r", "ascii"))
电路不响应命令。我认为生成的消息是将\r 作为两个单独的字符而不是回车发送。如何确保我的代码输出带有回车符的命令?
注意:我可以合理地预期电路运行良好,并且 Pi 的 UART 接口可以正常工作。该电路是 Atlas Scientific 溶解氧电路。电路的文档要求命令以l1<cr> 或L1<CR> 的形式编写。
相关链接:
旧示例代码 (https://www.atlas-scientific.com/_files/code/pi_sample_code.pdf)
描述写入方法的文档 (http://pyserial.sourceforge.net/pyserial_api.html#classes)
提前致谢!
编辑:Netch 提出了一个强项:ser.write(b'L1\r') 工作并且更干净。然而,这两种方法都在发送正确的“\r”序列。问题是电路仍然不将L1\r 视为有效命令。在这一点上,我认为我的问题可能是我的串口的某些属性。
我的端口是这样声明的:
ser = serial.Serial(
port = '/dev/ttyAMA0',
baudrate = 38400,
bytesize = serial.EIGHTBITS,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
timeout = 1
)
这个端口声明是根据电路的数据表完成的(不幸的是,我只能发布两个链接:(谷歌很容易找到它)。
【问题讨论】:
-
你确定它真的需要字节 arrays 还是字节序列就足够了?可以拨打
ser.write(b'L1\r')吗?您是否最初配置了端口(特别是原始模式是可取的)? -
其实这样干净多了,Netch!我已经通过让 Pi 传输到自身来进一步测试我的代码。实际上,在
ser.write(bytearray("L1\r", "ascii"))和ser.write(b'L1\r')中都将\r 作为适当的字符发送。这次电路的调试LED闪烁红色,表示命令未知。我认为这里的回车可能没问题,虽然我在发送消息时仍然明显犯了一些错误。当我们谈论串行端口时,“原始模式”是什么意思?我已经设置了奇偶校验、波特率、字节大小和停止位。
标签: python serial-port embedded raspberry-pi