繁体   English   中英

用于检查连接的串行端口的Bash脚本

[英]Bash script to check which serial port is connected

我有一个用串口连接的设备。 我有一个与之对话的python程序。 但这必须通过bash脚本启动,该脚本将首先检查它连接到哪个串口,并提供必要的权限。 然后它将启动python脚本,它应该有一个机制来了解它连接到哪个端口(就像通过bash脚本传递给它的参数)。

目前我的bash脚本是

#script
sudo chmod 666 /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB1
sudo chmod 666 /dev/ttyUSB2

如果设备连接到ttyUSB1,我得到错误chmod: cannot access '/dev/ttyUSB0': No such file or directory第一行chmod: cannot access '/dev/ttyUSB0': No such file or directory 这就是我知道它连接到USB1的方式。 python程序有一行ser=serial.Serial('/dev/ttyUSB1',115200, timeout=1) ,一旦我知道哪个是正确的串口,我就会手动更改。

如何检查设备连接到哪个端口,并通知python程序?

由于您使用chmod,您可以使用$检查退出代码? 并包含一个if语句来打破脚本并加载python。

举个例子:

#!bash
sudo chmod 666 /dev/ttyUSB0
if [$? = 0]
   then 
    pythonscript /dev/ttyUSB0

里程可能会有所不同,非常hacky。 您可能也想要使用

if [ -f /dev/ttyUSB0 ]

假设文件仅在连接设备时存在。 我没有具体的经验,因此我不会推测轮询作为文件的长期可行性。 我遇到了未附加设备和/ dev /中现有条目的问题,所以要密切注意这一点。

参考进一步阅读:

http://www.tldp.org/LDP/abs/html/exit-status.html

http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

您可以使用AWK解析dmesg输出,并通过参数将结果传递给Python脚本。

例如,此命令将端口名称传递给脚本print_argument.py

dmesg | awk '$0 ~ "attached to ttyUSB.+$" { dev[$NF] = 1 } $0 ~ "disconnected from ttyUSB.+$" { delete dev[$NF] } END { for(i in dev) print i }' | xargs python print_argument.py

所以,如果您的dmesg输出如下所示:

[ 5847.898803] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 5847.898835] ftdi_sio 1-5.1:1.0: device disconnected
[ 5979.369955] usb 1-1: new full-speed USB device number 21 using xhci_hcd
[ 5979.512177] usb 1-1: New USB device found, idVendor=0403, idProduct=6001
[ 5979.512184] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5979.512187] usb 1-1: Product: FT232R USB UART
[ 5979.512191] usb 1-1: Manufacturer: FTDI
[ 5979.512194] usb 1-1: SerialNumber: A901E5L7
[ 5979.514985] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
[ 5979.515064] usb 1-1: Detected FT232RL
[ 5979.515574] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1

print_argument.py包含:

import sys
print ('/dev/' + sys.argv[1])

上面命令的Python脚本输出将是:

/dev/ttyUSB1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM