Помогите побороть ошибку. Пытаюсь создать правила, что бы при подключении ардуино к малинке в файле не менять каждый раз /dev/ttyUSB*. Создал файл с правилами \etc\udev\rules.d\ Код (Python): SUBSYSTEMS=="usb", ATTRS{idProduct}=="0002", ATTRS{idVendor}=="1d6b" ATTR{serial}=="3f980000.usb",GROUP="dialout", MODE="0666", SYMLINK+="arduino" Устройство появилось Код (Text): lrwxrwxrwx 1 root root 15 Apr 16 23:43 arduino -> bus/usb/001/001 В консоле прописал Код (Text): sudo usermod -a -G tty pi sudo usermod -a -G dialout pi sudo chmod 666 /dev/ttyUSB0 В файле питона поменял /dev/ttyUSB* на /dev/arduino Выскакивает ошибка Код (C++): Traceback (most recent call last): File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 308, in _rec onfigurePort orig_attr = termios.tcgetattr(self.fd) termios.error: (25, 'Inappropriate ioctl for device') During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./first.py", line 6, in <module> ser=serial.Serial("/dev/arduino",9600) File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 261, in __ini t__ self.open() File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 282, in open self._reconfigurePort() File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 311, in _rec onfigurePort raise SerialException("Could not configure port: %s" % msg) serial.serialutil.SerialException: Could not configure port: (25, 'Inappropriate ioctl for device')
Таким образом Вы создаёте symlink к файлу USB устройства, а не к файлу "Serial" устройства. Поэтому питоновская программа и ругается на то, что драйвер не поддерживает IOCTL запрос -- драйвер-то не тот. Нужно отслеживать появление файла устройства /dev/ttyUSB0, затем проверять, что это нужная Ардуино и после успешной проверки к этому файлу создавать symlink /dev/arduino. Но задача проверки не простая.
Подсистема должна быть SUBSYSTEM=="tty". У меня переходники PL2303 и CH341. У обоих атрибут serial "0", попробовал различать их по имени драйвера Код (Bash): cat 99-usb-serial.rules SUBSYSTEM=="tty", DRIVERS=="pl2303", SYMLINK+="arduino", MODE="0666" SUBSYSTEM=="tty", DRIVERS=="ch341-uart", SYMLINK+="modbus", MODE="0666" ls -l /dev/arduino && ls -l /dev/modbus lrwxrwxrwx 1 root root 7 Apr 17 17:44 /dev/arduino -> ttyUSB1 lrwxrwxrwx 1 root root 7 Apr 17 17:43 /dev/modbus -> ttyUSB0
У меня 2 ардуины и различить их не удается. Пока оставил это вопрос до лучших времен. Вышел из ситуации следующим образом: Код (Text): KERNEL=="ttyUSB*", KERNELS=="1-1.3:1.0", GROUP="dialout", MODE="0666", SYMLINK+="devices" KERNEL=="ttyUSB*", KERNELS=="1-1.5:1.0", GROUP="dialout", MODE="0666", SYMLINK+="sensors" В итоге линк идет не на устройство, а на физический порт. Это единственные различия, к которым можно привязать. Но подключать нужно каждое устройство к своему порту
У меня еще вопрос. Скрипты, которые управляют 2-мя ардуинками на малинке практически идентичны, различается только порт и ссылка на Гет запрос php. Могут ли как то 2 порта повлиять на работу друг друга. Я несколько дней настраивал первую плату и сбоев не было, а сегодня подключив другую у первой периодически пропадает отправка в порт. Может ссылки на виртуальные порты или одинаковые переменные в файлах питона как т влияют? Куда копать?
И еще вопрос. Как правильно питать ардуинки. Они подключены по usb к малине и питаются от нее. Не погарят ли usb-порты малины. Может ардуинки запитать от дополнительного источника. Но вроде как usb в приоритете у ардуино по питанию? Что скажете?