Свойства последовательного USB-конвертера не имеют ничего общего с аппаратным обеспечением хост-системы, а только с самим последовательным чипом USB и программным стеком хост-системы.
Пи должен использовать стандартные драйверы USB для Linux.
Следовательно, вы можете включить / отключить привязку DTR к открытию / закрытию порта с помощью обычного Linux-метода очистки hupcl
настроек, как описано на сайте Arduino и в других местах:
stty -F /dev/ttyUSB0 -hupcl
Или замените / dev / ttyUSB0 тем файлом устройства, который соответствует вашему последовательному порту USB (например, первый подключенный Uno, вероятно, будет / dev / ttyACM0)
Даже в отношении собственного собственного последовательного порта PI это поведение DTR в конечном счете находится под контролем программного обеспечения - любой, кто утверждает иначе, игнорирует тот факт, что это всего лишь драйвер Linux, а не аппаратное обеспечение, которое знает какие-либо порты. открыт или закрыт. Фактическое аппаратное обеспечение порта может только сказать, что оно читается или записывается или реконфигурируется, ни одно из которых фактически не является синонимом открытия последовательного устройства.
Пост @ChrisStrattons описывает, как использовать,
stty -F /dev/ttyUSB0
чтобы избежать зависания, которое приводит к сбросу. Вот фрагмент, чтобы сделать это в Python:Обратите внимание, что точное число может быть при повторном подключении USB-кабеля, поэтому я определяю путь с помощью перетаскивания:
источник
termios
, скажемos.system("stty -F /dev/ttyUSB0 -hupcl")
,? Кроме того, кстати, я заметил, что это не мешает сбросу Arduino при первом подключении к нему после включения хост-системы; это предотвращает его сброс при последующих подключениях. Что лучше, чем ничего. Но я бы хотел понять, как остановить переключение DTR.termios
сохраняет форк / exec (вызов) во внешнюю программу (stty
). Не уверен, что делать с DTR, думаю, я просто принял эту «особенность» и добавил некоторую логику (собственное рукопожатие при записи / чтении), чтобы определить, синхронизировались ли Arduino и приложение на Pi.Вы можете добавить резистор 120 Ом (или комбинацию, чтобы сделать резистор 120 Ом) между
RESET
и5V
Это предотвратит полный сброс. Это наименее инвазивное решение, так как другие решения требуют удаления резистора или конденсатора с платы, что усложняет загрузку. Не держите резистор, если вы программируете. Убери это.Платы Leonardo не сбрасываются, даже если
DTR
сработал, но проблема возникает, когда вам нужно сбросить его удаленно, так как иногда он теряет соединение с Raspberry и вам необходимо физически сбросить его.источник
Если вы используете библиотеку Seria и pySerial, вы можете использовать:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
источник
Вы можете использовать PySerial. Вот пример кода Python:
для дополнительных опций проверьте Pyserial.
источник
stty -F /dev/ttyUSB0 -cdtrdsr
отчетыinvalid argument: -cdtrdsr
.