Zasada działania UART opiera się na szeregowym wysłaniu ciągu bitów, które następnie składane są w informację. Transmisja rozpoczyna się od bitu startu. Zawsze jest to bit będący logicznym zerem. Następnie, zależnie od konfiguracji, następuje po sobie 7, 8 lub 9 bitów danych, które są wysyłaną informacją. Transmisje zakańcza bit stopu. To bit będący logiczną jedynką, mówi o końcu transmisji. [1]
UART umożliwia komunikację z monitorem portu szeregowego, poprzez wbudowany lub zewnętrzy konwerter USB-UART.
W ESP występują dedykowane zestawy pinów, służące do komunikacji UART. Przez UART może odbywać się programowanie chipu lub komunikacja między urządzeniami.
Działanie UART opiera się o dwie linie:
• TX - służy do wysyłania danych,
• RX - służy do odbierania danych.
Urządzenia komunikujące się muszą pracować w tej samej częstotliwości, najczęściej 9600 lub 115200 b/s.
Można wyróżnić Dwa rodzaje komunikacji.
Pierwszy sposób
Pierwszy przypadek, to debugowanie z wykorzystaniem UART. Użytkownik wysyła komunikat z poziomu monitora portu szeregowego do mikrokontrolera sterującego serwomechanizmem.
Urządzenie sprawdza poprawność danych, po czym wykonuje i potwierdza wykonanie zadania.
Kod programu ESP8266
#include <Servo.h>
Servo myservo;
int pos = 0;
String odebraneDane = ""; //Pusty ciąg odebranych danych
void setup() {
Serial.begin(9600); //Uruchomienie komunikacji
myservo.attach(4);
}
void loop() {
if(Serial.available() > 0) { //Czy Arduino odebrało dane
odebraneDane = Serial.readStringUntil('\n');
pos = odebraneDane.toInt();
if(pos>=0 && pos<=180)
{
Serial.print("ustawiono: ");
Serial.println(pos);
myservo.write(pos);
}
else{
Serial.println("Zła wartość. Podaj od 0 do 180");
}
}
}
Schemat podłączenia
Drugi sposób
Sposób oparto na wzajemnej komunikacji dwóch układów wykorzystujących UART. Urządzenia wysyłają wiadomości za pomocą serial portu.
Schemat podłączenia Arduino Nano + ESP8266 + Serwomechanizm
Kod programu Adruino Nano
Arduino Nano odpowiada za wysyłanie komunikatów sterujących. Komunikaty wysyłane są za pomocą komendy Serial.println(pos).
int pos = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) {
Serial.println(pos);
delay(20);
}
for (pos = 180; pos >= 0; pos -= 1) {
Serial.println(pos);
delay(20);
}
}
Kod programu ESP8266
ESP8266 Odpowiada za sterowanie serwo mechanizmem. Nasłuchuje czy dane są do niego wysyłane za pomocą warunku if(Serial.available() > 0). Jeśli otrzymał komunikat od Arduino wykona odczyt lini za pomocą funkcji Serial.readStringUntil('\n').
#include <Servo.h>
Servo myservo;
int pos = 0;
String odebraneDane = ""; //Pusty ciąg odebranych danych
void setup() {
Serial.begin(9600); //Uruchomienie komunikacji
myservo.attach(4);
}
void loop() {
if(Serial.available() > 0) { //Czy Arduino odebrało dane
odebraneDane = Serial.readStringUntil('\n');
pos = odebraneDane.toInt();
if(pos>=0 && pos<=180)
{
Serial.print("ustawiono: ");
Serial.println(pos);
myservo.write(pos);
}
else{
Serial.println("Zła wartość. Podaj od 0 do 180");
}
}
}
[1] https://forbot.pl/blog/kurs-arduino-uart-komunikacja-z-komputerem-pc-zmienne-id3836