2015-01-05 16 views
5

Czy można użyć portu COM na urządzeniu Linux, aby odczytać wartość przełącznika? Myślę, że powinno to być możliwe z ioctl(), ale trochę się zmagałem, aby znaleźć porównywalny przykład. Potrzebuję tylko jednego wejścia i potrzebuję tylko odczytu w wartości HIGH/LOW. Pomyślałem, że mogę po prostu użyć ioctl, aby ustawić jeden z pinów wysoko, i podłączyć przełącznik między tym i innym pinem, ponownie za pomocą ioctl, aby odczytać wartość drugiego pin()Można użyć portu szeregowego 9-pinowego jako "GPIO" używając ioctl()?

Uzasadnieniem jest to, że mam wierny stary serwer działający w garażu, chciałbym zrobić coś, co mogłoby się wydać i powiedzieć, czy drzwi garażu są otwarte. Ponieważ serwer stoi obok drzwi, pomyślałem, że łatwo byłoby po prostu podłączyć przełącznik na tył port COM (który jest obecnie nieużywany)

Przyznam, że mógłbym wydać kilka funtów, oszczędzić sobie bólu głowy i użyć Earduino lub ESP8266, ale to mnie teraz zainteresowało!

+0

Loved swoje praktyczne zastosowanie, +1 ... –

+0

To pytanie wydaje się być nie na temat, ponieważ jest o „Zastanawiam się, czy” zamiast konkretnego problemu programowania. – abelenky

+0

Lekko przeredagowałem, mam oryginalne pytanie programowe. – phatmanace

Odpowiedz

4

Tak, na pewno możesz to zrobić. Istnieje kilka linii na porcie szeregowym, które mogą być używane jako GPIO. Jednym z nich (na pin9 chyba) jest RING, który jest używany w starych trybach szeregowych do sygnalizowania połączeń przychodzących.

Można go odczytać tak:

unsigned mask = TIOCM_RNG; 
unsigned status; 
int fd; // your serial port file descriptor. 

/* Get current status of the control lines in mask */ 
if (ioctl(fd, TIOCMGET, &status) == -1) { 
    perror("ioctl(TIOCMGET)"); 
} 

/* now evaluate status */ 

Należy również generować napięcie, które można zastosować do linii pierścieniowej. Jednym z tanich sposobów na to jest przekazanie pewnego strumienia przemiennych bitów. Na przykład. wyślij 0x55 przy dowolnej prędkości transmisji.

Następnie można dotknąć napięcie z kołka TX. Podziel napięcia dodatnie i ujemne za pomocą dwóch diod i buforuj je za pomocą dwóch kondensatorów. To da ci dodatnie i ujemne napięcia zgodne z linią pierścienia.

Oto schemat, który powinien działać. Dostosuj diody i kondensatory do smaku, ale nie zwariuj z kondensatorem. 10μF powinno być maksymalne.

Generating signal voltages from UART tx-pin

+1

Dzięki, że wygląda bardzo obiecująco, spróbuję przez następny dzień i zaakceptuję odpowiedź, jeśli zadziała, aw międzyczasie awansowałem – phatmanace

+0

większość portów szeregowych będzie traktować wszystko poniżej 1V jako niskie, jeśli kable są krótkie, nie ma potrzeby występowania ujemnych napięć. – Jasen

Powiązane problemy