我需要通过 USB 到 RS-232 转换器与 Python 与设备进行通信。该应用程序minicom
无缝连接,因此如果我可以在非交互模式下运行它,一切都会很棒。
阅读文档有一些有趣的选项,但我没有完全理解其中任何一个:
-t Terminal type. With this flag, you can override the environment
TERM variable.
-S script. Run the named script at startup.
如何在我的应用程序和 之间传输数据minicom
?我应该使用其他东西吗?
答案1
minicom
非常适合交互式使用,但它不是编程 I/O 的正确工具。
您的本地 Python 程序应该简单地打开/dev
串行端口的节点。它的工作原理就像写入文件一样:
fd = os.open('/dev/ttyUSB0', os.O_RDWR)
fd.write(...)
唯一棘手的一点是设置比特率等。为此,请使用Python 的 termios 库:
attr = termios.tcgetattr(fd)
attr[5] = attr[6] = termios.B9600
termios.tcsetattr(fd, termios.TCSANOW, attr)
有关此内容的 Python 文档几乎假设您已从 C 使用此 API,并且只需要转换为 Python 的帮助。所以,如果你走这条路,你应该使用史蒂文斯和拉戈这样的经典Unix 环境中的高级编程。
一个更高级别的库可以让您超越级别termios
并为您提供非 *ix 类型系统的可移植性py串口。
答案2
沃伦·杨(Warren Young)上面的答案是正确的,但是为了懒惰,有一个更好的答案:
cat $file > /dev/ttyUSB0
也有效。至于tc(g|s)etattr
调用,这些是由stty
命令处理的(例如stty -F /dev/ttyUSB0 9600
)!
答案3
使用miniterm.py
!它是包含在 pySerial 模块中沃伦在回答中提到。
输出始终在 stdout 上,因此您可以通过管道传输它、tee 它、grep 它、awk 它、sed 它、打印它、压缩、解压缩它。
使用 pip 为您的用户安装它,并且miniterm.py
应该将其放置在您的 中~/.local/bin
,这样您就可以执行它:
$ pip3 install pySerial
$ miniterm.py /dev/ttyUSB0
--- Miniterm on /dev/ttyUSB0 9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
如果这不起作用,您也可以运行串行模块:
$ python3 -m serial /dev/ttyUSB0
--- Miniterm on /dev/ttyUSB0 9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
记得使用Ctrl
+]
退出!