Arduino to taki framework, normalnie jak masz AVR mikrokontroler, to musisz np. dla komunikacji UART, ustawić baut rate ustawiając w specjalnym rejestrze, różne ustawienia, które wyczytujesz z dokumentacji mikrokontrolera.
A arduino robisz tylko Serial.begin(baut_rate)
i gotowe masz teraz tylko Serial.read()
i Serial.write()
, a także Serial.isAvailable()
do sprawdzania czy coś jest, można doczytać na stronie arduino dokumentację do tych metod, widać że tutaj już nie musisz siedzieć z nosem w datasheets.
ESP8266 jest trochę lepsze od arduino, można po wifi lub UART komunikację robić.
Z poziomu PC, w pythonie masz PySerial, z poziomu shella robisz konfigurację baut rate, bity stopu itp. i potem zwyczajnie jak do zwykłego pliku czytasz i piszesz do /dev/ttyUSB1
Trzeci sposób to Iterujesz po PCI -> potem po USB bus, -> potem po urządzeniach na danym busie USB, szukasz twojego urządzania.
Zwykle są 3 podstawowe komunikacje usb_control_msg, usb_interrupt, usb_isochronous, usb_bulk.
Adapter typu USB-UART działa w ten sposób, że jest urządzenie typu np. mikrokontroler AVR, wewnątrz ma bufor/kolejkę, za pomocą usb_control_msg ustawiasz tam wewnątrz parametry komunikacji tego kontrolera, za pomocą usb_bulka wypełniasz lub odbierasz dane z buforów in/out, a wewnątrz mikrokontroler wybiera te bajty z tej kolejki i wysyła je po UART do innego urządzenia, w tym do głównego mikrokontrolera.
Tutaj prosty przykład jak komunikację w shellu spreparować, bautrate 9600:
Kopiuj
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
exec 5>/dev/ttyACM0
echo -ne "send data\n" > /dev/ttyACM0
cat /dev/ttyACM0
exec 5>&-
Przykład w Pythonie:
Kopiuj
with serial.Serial('/dev/ttyACM0', 9600, timeout=1) as con:
con.write(bytearray('dupa', 'ascii')
print(con.read(255).decode())
A na Arduino frameworku
Kopiuj
Serial.Begin(9600);
Serial.println('dupa');
String str = Serial.readString();