【问题标题】:Bash script to check which serial port is connected用于检查连接了哪个串行端口的 Bash 脚本
【发布时间】:2014-06-20 15:08:32
【问题描述】:

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

【问题讨论】:

    标签: python linux bash serial-port


    【解决方案1】:

    由于您使用 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

    【讨论】:

    • 我已经测试过if [ -f /dev/ttyUSB0 ],但它不适用于开发文件
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多