Как определить, к какому последовательному порту подключен мой Arduino, с помощью сценария оболочки?

Я сейчас пишу небольшой скрипт, который отправляет некоторые данные в Arduino через скрипт оболочки bash. Команда, которая отправляет данные, выглядит следующим образом:

alias led_green="echo -e -n '\x10' > /dev/ttyACM1"

Как видите, я /dev/ttyACM1 жестко запрограммирован в программу. Это проблематично, потому что если я изменю порты USB, значение также изменится, и мой скрипт не будет работать. Интересно, есть ли способ программно определить, к какому порту подключен Arduino, чтобы скрипт всегда работал, пока подключен Arduino.

1 ответ

Я бы предложил переключиться с псевдонима на функцию, которая использует цикл для просмотра списка файлов устройства.

Предполагая, что других устройств нет, вы можете использовать цикл for, чтобы определить, какое устройство существует.

$ for i in $(seq 0 99) ; do                                                    
>    [ -e "/dev/ttyACM$i"  ] && break                                            
> done

Если вы повторяете значение $i после выхода из цикла это будет значение найденного устройства.

Однако, если, например, у вас есть /dev/ttyACM0 а также /dev/ttyACM1 устройства там, и они работают с различной скоростью передачи данных, вы можете пройти через них и проверить stty -a -F /dev/ttyACM$i | grep $BAUD_RATE

Если оба устройства работают с одинаковой скоростью передачи, хорошо.,, Делать особо нечего - приходится пользоваться ручным способом.

Другие вопросы по тегам