Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Połączenia fizyczne
- Krok 2: Jak korzystać z biblioteki
- Krok 3: Prześlij podstawowe dane
- Krok 4: Odbierz podstawowe dane
- Krok 5: Testowanie
Wideo: Komunikacja szeregowa Arduino: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Wiele projektów Arduino polega na przesyłaniu danych między kilkoma Arduino.
Niezależnie od tego, czy jesteś hobbystą, który buduje samochód RC, samolot RC, czy projektuje stację pogodową ze zdalnym wyświetlaczem, musisz wiedzieć, jak niezawodnie przesyłać dane szeregowe z jednego Arduino do drugiego. Niestety, hobbystom trudno jest uruchomić komunikację danych szeregowych we własnych projektach. Dzieje się tak, ponieważ dane szeregowe są przesyłane jako strumień bajtów.
Bez jakiegokolwiek kontekstu w strumieniu bajtów interpretacja danych jest prawie niemożliwa. Bez możliwości interpretacji danych Twoje Arduino nie będą w stanie komunikować się niezawodnie. Kluczem jest dodanie tych danych kontekstowych do strumienia bajtów przy użyciu standardowego projektu pakietu szeregowego.
Szeregowe projektowanie pakietów, wypychanie pakietów i parsowanie pakietów jest złożone i trudne do osiągnięcia. Na szczęście dla użytkowników Arduino dostępne są biblioteki, które mogą wykonywać całą tę złożoną logikę za kulisami, dzięki czemu możesz skupić się na uruchomieniu projektu bez dodatkowego wysiłku. Ten Instruktaż użyje biblioteki SerialTransfer.h do przetwarzania pakietów szeregowych.
W skrócie: ten Instruktaż omówi, w jaki sposób można łatwo zaimplementować solidne dane szeregowe w dowolnym projekcie przy użyciu biblioteki SerialTransfer.h. Jeśli chcesz dowiedzieć się więcej o teorii niskiego poziomu dotyczącej niezawodnej komunikacji szeregowej, zapoznaj się z tym samouczkiem.
Kieszonkowe dzieci
-
2 Arduino
Gorąco zachęcamy do korzystania z Arduino, które ma wiele sprzętowych UARTów (np. Arduino Mega)
- Podłączyć przewód
-
Zainstaluj SerialTransfer.h
Dostępne za pośrednictwem Menedżera bibliotek Arduino IDE
Krok 1: Połączenia fizyczne
Korzystając z komunikacji szeregowej, należy pamiętać o kilku punktach okablowania:
- Upewnij się, że wszystkie uziemienia są podłączone!
- Pin Arduino TX (Transmit) musi być podłączony do drugiego pinu Arduino RX (Receive)
Krok 2: Jak korzystać z biblioteki
SerialTransfer.h umożliwia łatwe wysyłanie dużych ilości danych przy użyciu niestandardowego protokołu pakietowego. Poniżej znajduje się opis wszystkich funkcji biblioteki - z wielu z nich skorzystamy w dalszej części tego samouczka:
SerialTransfer.txt
Jest to tablica bajtów, w której wszystkie dane ładunku, które mają być wysłane przez port szeregowy, są buforowane przed transmisją. Możesz wypełnić ten bufor bajtami danych do wysłania do innego Arduino.
SerialTransfer.rxBuff
Jest to tablica bajtów, w której buforowane są wszystkie dane ładunku otrzymane z drugiego Arduino.
SerialTransfer.bytesRead
Liczba bajtów ładunku odebranych przez inne Arduino i przechowywanych w SerialTransfer.rxBuff
SerialTransfer.begin(strumień i_port)
Inicjuje wystąpienie klasy biblioteki. Jako parametr możesz przekazać dowolny obiekt klasy "Serial" - nawet obiekty klasy "SoftwareSerial"!
SerialTransfer.sendData(const uint16_t &messageLen)
To sprawia, że Arduino wysyła "messageLen" liczbę bajtów w buforze transmisji do drugiego Arduino. Na przykład, jeśli „messageLen” wynosi 4, pierwsze 4 bajty SerialTransfer.txBuff zostaną wysłane przez port szeregowy do drugiego Arduino.
SerialTransfer.dostępny()
To sprawia, że Arduino analizuje wszystkie odebrane dane szeregowe z innego Arduino. Jeśli ta funkcja zwraca wartość logiczną „prawda”, oznacza to, że nowy pakiet został pomyślnie przeanalizowany, a dane nowo otrzymanego pakietu są przechowywane/dostępne w SerialTransfer.rxBuff.
SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Wstawia "len" liczbę bajtów dowolnego obiektu (byte, int, float, double, struct, itd.) do bufora transmisji, zaczynając od indeksu określonego przez argument "index".
SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)
Odczytuje "len" liczbę bajtów z bufora odbierania (rxBuff) zaczynając od indeksu określonego przez argument "index" do dowolnego obiektu (byte, int, float, double, struct, itp.).
NOTATKA:
Najłatwiejszym sposobem przesyłania danych jest najpierw zdefiniowanie struktury zawierającej wszystkie dane, które chcesz wysłać. Arduino na końcu odbiorczym powinno mieć zdefiniowaną identyczną strukturę.
Krok 3: Prześlij podstawowe dane
Poniższy szkic przesyła zarówno wartość ADC analogRead (0), jak i wartość analogRead (0) przekonwertowaną na napięcie do Arduino #2.
Prześlij następujący szkic do Arduino #1:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT { uint16_t adcVal; napięcie pływaka; } dane; void setup() { Serial.begin(115200); Serial1.początek (115200); myTransfer.begin(Serial1); } void loop() { data.adcVal = analogRead(0); dane.napięcie = (dane.adcVal * 5,0) / 1023,0; myTransfer.txObj(dane, sizeof(dane)); myTransfer.sendData(sizeof(data)); opóźnienie (100); }
Krok 4: Odbierz podstawowe dane
Poniższy kod drukuje wartości ADC i napięcia otrzymane z Arduino #1.
Prześlij następujący kod do Arduino #2:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT { uint16_t adcVal; napięcie pływaka; } dane; void setup() { Serial.begin(115200); Serial1.początek (115200); myTransfer.begin(Serial1); } void loop() { if(mojTransfer.available()) { mojTransfer.rxObj(dane, sizeof(dane)); Serial.print(data.adcVal); Serial.print(' '); Serial.println(dane.napięcie); Serial.println(); } else if(mojTransfer.status < 0) { Serial.print("BŁĄD:"); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); else if(myTransfer.status == -2) Serial.println(F("PAYLOAD_ERROR")); else if(myTransfer.status == -3) Serial.println(F("STOP_BYTE_ERROR")); } }
Krok 5: Testowanie
Po przesłaniu obu szkiców do odpowiednich Arduino, możesz użyć monitora szeregowego na Arduino #2, aby sprawdzić, czy otrzymujesz dane z Arduino #1!
Zalecana:
Szeregowa bramka UDP/IP dla Arduino oparta na ESP8266 Shield: 8 kroków
Szeregowa bramka UDP/IP dla Arduino oparta na ESP8266 Shield: już opublikowałem w 2016 roku instrukcję „Jak stworzyć własną bramę Wi-Fi, aby połączyć Arduino z siecią IP”. Odkąd zrobiłem kilka ulepszeń w kodzie i nadal używam tego rozwiązania.Niemniej jednak jest teraz kilka nakładek ESP8266 t
Komunikacja szeregowa PIC MCU i Python: 5 kroków
Komunikacja szeregowa PIC MCU i Python: Witam, chłopaki! W tym projekcie postaram się wyjaśnić moje eksperymenty dotyczące komunikacji szeregowej PIC MCU i Pythona. W Internecie dostępnych jest wiele samouczków i filmów wideo na temat komunikacji z PIC MCU przez wirtualny terminal, co jest bardzo przydatne. Jednak
Komunikacja szeregowa Arduino i Python - wyświetlanie klawiatury: 4 kroki
Komunikacja szeregowa Arduino i Python - wyświetlacz klawiatury: ten projekt jest przeznaczony dla użytkowników komputerów Mac, ale można go również zaimplementować w systemach Linux i Windows, jedynym krokiem, który powinien być inny, jest instalacja
Bezprzewodowa komunikacja szeregowa za pomocą Bluefruit: 4 kroki
Bezprzewodowa komunikacja szeregowa przy użyciu Bluefruit: Oto prosty przewodnik krok po kroku, jak wymienić przewody na połączenie Bluetooth o niskim zużyciu energii: zajęło mi trochę czasu, aby to zrozumieć, ponieważ nie ma prawie żadnej dokumentacji na ten temat za pomocą nowoczesnej technologii Bluetooth o niskim zużyciu energii. jak Bluefrui
Komunikacja szeregowa przy użyciu ARM Cortex-M4: 4 kroki
Komunikacja szeregowa przy użyciu ARM Cortex-M4: Jest to projekt oparty na płytce prototypowej, który wykorzystuje ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) do komunikacji szeregowej przy użyciu wirtualnego terminala. Wyjście można uzyskać na ekranie LCD 16x2, a wejście do komunikacji szeregowej można podać w