Właściwości konwertera szeregowego USB nie mają nic wspólnego ze sprzętem systemu hosta, ale tylko z samym układem szeregowym USB i stosem oprogramowania systemu hosta.
Pi powinien używać standardowych sterowników szeregowych Linux USB.
Dlatego możesz włączyć / wyłączyć powiązanie DTR z portem otwierającym / zamykającym za pomocą zwykłej metody czyszczenia systemu Linux hupcl
zgodnie z dokumentacją na stronie Arduino i gdzie indziej:
stty -F /dev/ttyUSB0 -hupcl
Lub zastąpienie / dev / ttyUSB0 plikiem, który faktycznie odpowiada portowi szeregowemu USB (na przykład pierwsze podłączone Uno to prawdopodobnie / dev / ttyACM0)
Nawet w przypadku własnego natywnego portu szeregowego PI, to zachowanie DTR jest ostatecznie kontrolowane przez oprogramowanie - każdy, kto twierdzi inaczej, ignoruje fakt, że jest to tylko sterownik Linux, a nie sprzęt, który ma jakąkolwiek wiedzę na temat tego portu otwarte lub zamknięte. Rzeczywisty sprzęt portu może jedynie stwierdzić, że jest odczytywany, zapisywany lub ponownie konfigurowany, z których żaden nie jest właściwie równoznaczny z otwarciem urządzenia szeregowego.
@ChrisStrattons post opisuje, jak używać,
stty -F /dev/ttyUSB0
aby uniknąć zawieszenia, które powoduje reset. Oto fragment do zrobienia tego w Pythonie:Zauważ, że dokładna liczba może przy ponownym podłączeniu kabla USB, więc ścieżkę wykrywam przez globbing:
źródło
termios
, powiedzmyos.system("stty -F /dev/ttyUSB0 -hupcl")
,? Poza tym zauważyłem, że nie zapobiega to resetowaniu Arduino przy pierwszym połączeniu z nim po włączeniu systemu hosta; zapobiega resetowaniu przy kolejnych połączeniach. Co jest lepsze niż nic. Ale chciałbym wymyślić, jak powstrzymać to przed przełączaniem DTR.termios
zapisuje widelec / exec (wywołanie) do zewnętrznego programu (stty
). Nie jestem pewien, co zrobić z DTR, myślę, że właśnie zaakceptowałem tę „funkcję” i dodałem trochę logiki (niestandardowy uścisk dłoni przez pisanie / czytanie), aby wykryć, czy Arduino i aplikacja na Pi zsynchronizowały się.Możesz dodać rezystor 120Ohm (lub kombinację, aby uzyskać 120Ohm) między
RESET
i5V
To całkowicie uniemożliwi reset. Jest to najmniej inwazyjne, ponieważ inne rozwiązania wymagają usunięcia rezystora lub kondensatora z płyty, komplikuje przesyłanie. Nie trzymaj rezystora, jeśli programujesz. Usunąć to.Tablice Leonardo nie resetują się, nawet jeśli
DTR
zostaną wyzwolone, ale problem zaczyna się, gdy trzeba je zresetować zdalnie, ponieważ czasami traci połączenie z Raspberry i trzeba go fizycznie zresetować.źródło
Jeśli korzystasz z biblioteki Seria i pySerial, możesz użyć:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
źródło
Możesz użyć PySerial. Oto przykład kodu w języku Python:
aby uzyskać więcej opcji, sprawdź Pyserial.
źródło
stty -F /dev/ttyUSB0 -cdtrdsr
zgłaszainvalid argument: -cdtrdsr
.