以编程方式与 OS X 或 Linux 中的串行端口通信

Posted

技术标签:

【中文标题】以编程方式与 OS X 或 Linux 中的串行端口通信【英文标题】:Programmatically talking to a Serial Port in OS X or Linux 【发布时间】:2010-09-05 11:04:45 【问题描述】:

我有一个 Prolite LED 标志,我喜欢设置它来显示来自 apache 日志和其他有趣统计数据的滚动搜索查询。问题是,我的 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 工具中打开连接,唯一可以解决的问题。

【问题讨论】:

你不会碰巧在它们后面看到任何序列号吧?如: /dev/cu.usbserial-xxxxxxxxA /dev/tty.usbserial-xxxxxxxxA /dev/cu.usbserial-xxxxxxxxB /dev/tty.usbserial-xxxxxxxxB 我的另一个通过可能是python与串行端口。你知道你的 python 实例在哪个用户下运行吗?也许它有什么作用? 就在上周,我编写了一个小型 Python 实用程序,通过读取 USB-Serial 加密狗的调试信息来帮助我调试嵌入式 C 应用程序,所以我想我对 PySerial 非常了解。一些附加信息可能有助于诊断问题: * 您使用的是什么 USB 串行驱动程序? * 在尝试从 Python 打开串行连接之前,您确定您已正确配置了所有串行选项(波特率、流量控制、奇偶校验、停止位等)吗? * 你使用的是什么版本的 PySerial? 【参考方案1】:

您是否尝试过观察 GUI 和串行端口之间的流量以查看是否有某种特殊命令正在发送?也只是好奇,Python 发送的是 ASCII 而不是 UTF-8 或其他东西,对吗?我问的原因是因为我注意到您对字符串和某些语言的引号更改实际上是 ASCII 和 UTF-8 之间的区别。

【讨论】:

【参考方案2】:

/dev/cu.xxxxx 是“标注”设备,当您建立与串行设备的连接并开始与它交谈时,您会使用它。 /dev/tty.xxxxx 是“拨号”设备,用于监控端口的来电,例如一个传真监听器。

【讨论】:

这只是惯例,还是它们之间有一些明显的区别?

以上是关于以编程方式与 OS X 或 Linux 中的串行端口通信的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式检查 OS X 上的请勿打扰状态

如何以编程方式修改 OS X 照片库?

如何以编程方式将 OS X“标签”添加到文件中?

如何以编程方式在 mac os x 中禁用/断开以太网适配器?

在 SWIFT OS X 中以编程方式添加和删除 NSTextField

以编程方式在 Mac OS X 上创建 L2TP ***