Close

Finding the same device consistently

A project log for USB connected Laser particle detector for IAQ

Measure air particulate density levels for PM1 PM2.5 and PM10 on Raspberry Pi and OSx

carboncycleCarbonCycle 10/07/2018 at 04:090 Comments

When you plug a USB device in it can be enumerated to different device names by the operating system.  To fix this problem for this sensor on linux, I changed attributes that make the connection unique.

First - find the VID and PID for the USB device:

pi@GUIdev:~ $ lsusb
Bus 001 Device 008: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

In this case the Vendor ID is 10c4   The Product ID is ea60

Since I changed the serial number field - this will be unique.

pi@GUIdev:~ $ udevadm info --name=/dev/ttyUSB0 --attribute-walk  | grep serial
    SUBSYSTEMS=="usb-serial"
    ATTRS{serial}=="ZH03B180904"
    ATTRS{serial}=="3f980000.usb"



Now I have an attribute to tell udev what to do.  I create a file in /etc/udev/rules.d with a name like "99-dustsensor.rules".  In that file I tell udev what device name to create when it sees this device plugged in:

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="ZH03B180904" SYMLINK+="dust-sensor"

To test the new rule:

pi@GUIdev:/dev $  sudo udevadm trigger

pi@GUIdev:/dev $ ls -al dust-sensor

lrwxrwxrwx 1 root root 7 Oct  6 21:04 dust-sensor -> ttyUSB0

Now, every time I plug in my dust sensor, it shows up at

/dev/dust-sensor

Discussions