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

时间:2014-06-20 15:08:32

标签: python linux bash serial-port

我有一个用串口连接的设备。我有一个与之对话的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。这就是我知道它连接到USB1的方式。 python程序有一行ser=serial.Serial('/dev/ttyUSB1',115200, timeout=1),一旦我知道哪个是正确的串口,我就会手动更改。

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

2 个答案:

答案 0 :(得分:0)

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

举个例子:

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

这里的里程可能会有所不同,很不错。您可能还想使用

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

答案 1 :(得分:0)

您可以使用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