Python USB串口连接
Python USB Serial ports connection
我正在 运行ning 一个 python 代码,它插入了两个串口,一个华为加密狗和一个 zigbee。我知道为了找出加密狗正在使用的端口,我必须使用 gammu。而 zigbee 一直在使用 dev/ttyUSB0。但是,如果我要在启动时自动 运行 Python 脚本,raspberry pi 应该如何知道哪个端口连接到哪个 USB?
有没有一种方法可以直接 运行 短信代码而无需使用 gammu 找出端口?
如果您要问,"how can I tell if /dev/ttyUSB0 is the huawei dongle or the zigbee",那么您可以为每个设备执行以下操作:
udevadm info --name /dev/ttyUSB0 --query property --export
比如我有一个ftdi串口,命令的输出是:
DEVLINKS='/dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-port0'
DEVNAME='/dev/ttyUSB0'
DEVPATH='/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0'
ID_BUS='usb'
ID_MODEL='USB__-__Serial'
ID_MODEL_ENC='USB\x20\x3c-\x3e\x20Serial'
ID_MODEL_FROM_DATABASE='FT232 USB-Serial (UART) IC'
ID_MODEL_ID='6001'
ID_PATH='platform-bcm2708_usb-usb-0:1.2:1.0'
ID_PATH_TAG='platform-bcm2708_usb-usb-0_1_2_1_0'
ID_REVISION='0400'
ID_SERIAL='FTDI_USB__-__Serial'
ID_TYPE='generic'
ID_USB_DRIVER='ftdi_sio'
ID_USB_INTERFACES=':ffffff:'
ID_USB_INTERFACE_NUM='00'
ID_VENDOR='FTDI'
ID_VENDOR_ENC='FTDI'
ID_VENDOR_FROM_DATABASE='Future Technology Devices International, Ltd'
ID_VENDOR_ID='0403'
MAJOR='188'
MINOR='0'
SUBSYSTEM='tty'
UDEV_LOG='3'
USEC_INITIALIZED='2247071814106'
您的两个设备的输出应该有足够的差异,以便能够决定哪个是哪个,例如本例中 FTDI 的 ID_VENDOR。 0403和6001的ID_VENDOR_ID和ID_MODEL_ID对应的可以看到:
$ lsusb
...
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
如果您的设备可以通过 ID_SERIAL 来区分,您可以在 /dev/serial/by-id/
中找到它们作为适当 ttyUSB* 的符号 link,例如对于我的 ftdi:
/dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 -> ../../ttyUSB0
如果您每次都将设备插入同一个 USB 端口,您可以在 /dev/serial/by-path/
下找到合适的 ttyUSB 作为符号 link,例如:
/dev/serial/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-port0 -> ../../ttyUSB0
我正在 运行ning 一个 python 代码,它插入了两个串口,一个华为加密狗和一个 zigbee。我知道为了找出加密狗正在使用的端口,我必须使用 gammu。而 zigbee 一直在使用 dev/ttyUSB0。但是,如果我要在启动时自动 运行 Python 脚本,raspberry pi 应该如何知道哪个端口连接到哪个 USB? 有没有一种方法可以直接 运行 短信代码而无需使用 gammu 找出端口?
如果您要问,"how can I tell if /dev/ttyUSB0 is the huawei dongle or the zigbee",那么您可以为每个设备执行以下操作:
udevadm info --name /dev/ttyUSB0 --query property --export
比如我有一个ftdi串口,命令的输出是:
DEVLINKS='/dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-port0'
DEVNAME='/dev/ttyUSB0'
DEVPATH='/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0'
ID_BUS='usb'
ID_MODEL='USB__-__Serial'
ID_MODEL_ENC='USB\x20\x3c-\x3e\x20Serial'
ID_MODEL_FROM_DATABASE='FT232 USB-Serial (UART) IC'
ID_MODEL_ID='6001'
ID_PATH='platform-bcm2708_usb-usb-0:1.2:1.0'
ID_PATH_TAG='platform-bcm2708_usb-usb-0_1_2_1_0'
ID_REVISION='0400'
ID_SERIAL='FTDI_USB__-__Serial'
ID_TYPE='generic'
ID_USB_DRIVER='ftdi_sio'
ID_USB_INTERFACES=':ffffff:'
ID_USB_INTERFACE_NUM='00'
ID_VENDOR='FTDI'
ID_VENDOR_ENC='FTDI'
ID_VENDOR_FROM_DATABASE='Future Technology Devices International, Ltd'
ID_VENDOR_ID='0403'
MAJOR='188'
MINOR='0'
SUBSYSTEM='tty'
UDEV_LOG='3'
USEC_INITIALIZED='2247071814106'
您的两个设备的输出应该有足够的差异,以便能够决定哪个是哪个,例如本例中 FTDI 的 ID_VENDOR。 0403和6001的ID_VENDOR_ID和ID_MODEL_ID对应的可以看到:
$ lsusb
...
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
如果您的设备可以通过 ID_SERIAL 来区分,您可以在 /dev/serial/by-id/
中找到它们作为适当 ttyUSB* 的符号 link,例如对于我的 ftdi:
/dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 -> ../../ttyUSB0
如果您每次都将设备插入同一个 USB 端口,您可以在 /dev/serial/by-path/
下找到合适的 ttyUSB 作为符号 link,例如:
/dev/serial/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-port0 -> ../../ttyUSB0