在OSX或Linux中以编程方式与串行端口对话

2024-06-02 06:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个ProliteLED的标志,我喜欢设置来显示来自ApacheLogs的滚动搜索查询和其他有趣的统计数据。问题是,我的G5没有串行端口,所以我必须使用usb到串行加密狗。它显示为/dev/cu.usbserial和/dev/tty.usbserial。

当我这么做的时候,所有的事情看起来都很愚蠢:

stty -f /dev/cu.usbserial
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb

当我使用serial port tool与之交谈时,一切都会起作用。

如果我在上面提到的串行端口工具的同时运行这段代码,所有的东西都可以工作。但一旦我断开工具,连接就会丢失。

#!/usr/bin/python

import serial

ser = serial.Serial('/dev/cu.usbserial', 9600, timeout=10) 
ser.write("<ID01><PA> \r\n") 
read_chars = ser.read(20)
print read_chars

ser.close()

所以问题是,在没有串行端口工具的情况下,我需要执行什么魔法才能开始与串行端口对话?这是权限问题吗?另外,/dev/cu.usbserial和/dev/tty.usbserial有什么区别?


不,没有序列号。问题是,即使sudo运行python脚本,问题仍然存在,而且如果我在前面提到的gui工具中打开连接,唯一能解决问题的就是这个问题。


Tags: 工具端口devread标志serialser统计数据
2条回答

/dev/cu.xxxxx是“callout”设备,它是在建立到串行设备的连接并开始与之对话时使用的设备。/dev/tty.xxxxx是“拨号”设备,用于监视端口(例如传真侦听器)的来电。

你有没有试过观察GUI和串行端口之间的通信量,看看是否有某种特殊的命令被发送过来?同样奇怪的是,Python发送的是ASCII而不是UTF-8或其他什么东西,对吧?我问的原因是因为我注意到字符串和某些语言的引号发生了变化,这实际上是ASCII和UTF-8之间的区别。

相关问题 更多 >