[英]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.