我有一个用串口连接的设备。我有一个与之对话的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程序?
答案 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