Celem tego odcinka cyklu jest nabycie następujących umiejętności:
- korzystanie z monitora portu szeregowego
- konfigurowanie i obsługa prostych wejść i wyjść cyfrowych
- poznanie sposobów sterowania większymi obciążeniami za pomocą wyjść ESP32.
Użycie monitora portu szeregowego
Podczas testowania nawet najprostszego programu często okazuje się, że potrzebujemy jakiegoś sposobu, aby dowiedzieć się, co się w nim dzieje. Bez zaawansowanego interfejsu użytkownika (klawiatury, wyświetlacza) nie jest to łatwe. Środowisko Arduino IDE ułatwia to dzięki wbudowanemu monitorowi portu szeregowego. Zanim jednak zaczniemy korzystać z tego narzędzia, musimy je zainicjować w funkcji setup() w następujący sposób:
void setup() {
Serial.begin(9600); // Inicjalizacja monitora portu szeregowego
}
Zwróciliście chyba uwagę na parametr użyty w wywołaniu funkcji Serial.begin(). Określa on szybkość transmisji szeregowej w bitach na sekundę. Zazwyczaj ustawia się ją na 9600 lub 115200 bitów na sekundę, ale w razie potrzeby można wybrać inne wartości. Opcjonalny drugi argument określa liczbę bitów danych i bitów stopu oraz sposób kontroli parzystości. Domyślnie stosuje się osiem bitów danych, brak bitu parzystości i jeden bit stopu. Takie ustawienie powinno działać poprawnie zarówno z Arduino IDE, jak i z wieloma innymi aplikacjami. W przypadku niektórych urządzeń zewnętrznych może być jednak konieczna zmiana tych ustawień.
Poniższy przykładowy program konfiguruje interfejs szeregowy (UART) do pracy z szybkością 9600 bitów na sekundę, ośmioma bitami danych, bitem parzystości i dwoma bitami stopu:
void setup() {
Serial.begin(9600, SERIAL_8E2); // Inicjalizacja monitora portu szeregowego
}
Aby wysłać komunikat tekstowy do monitora portu szeregowego, można użyć funkcji Serial.print() lub Serial.println(). Jedyna różnica między tymi funkcjami polega na tym, że druga z nich dodaje na końcu komunikatu znak nowego wiersza. Oto przykład:
Serial.print("Wybrany pin = ");
Instrukcja ta spowoduje wyświetlenie ciągu znaków ujętego w cudzysłowy. Element, który wyślemy jako następny, pojawi się bezpośrednio za powyższym ciągiem (za końcową spacją). Jeśli więc chcielibyśmy dopisać tam numer pinu zapisany w zmiennej selectedPin, a następnie przejść do następnego wiersza, użylibyśmy:
Serial.println(selectedPin);
Programy przedstawione na listingach pokazują, w jaki sposób monitor portu szeregowego może zarówno odbierać dane z modułu ESP32, jak i wysyłać do niego dane. W pierwszym przykładzie wykorzystano czujnik Halla wbudowany w ESP32. Pamiętajmy, że po wpisaniu lub pobraniu z Internetu kodu źródłowego należy w menu Tools włączyć monitor portu szeregowego, jak pokazano na rysunku 1, oraz wybrać szybkość transmisji.
Po uruchomieniu programu w oknie monitora pojawi się lista wartości z czujnika, aktualizowana co 500 ms. Są to wartości natężenia pola magnetycznego. Zmieniają się, aczkolwiek są dość małe. Czujnik Halla można przetestować, umieszczając w pobliżu górnej powierzchni modułu ESP32 mały magnes. Gdy magnes zostanie przesunięty w kierunku modułu ESP32, nastąpi wyraźna zmiana zmierzonego natężenia pola. Jeśli kierunek pola zostanie odwrócony, zaobserwujemy zmianę znaku mierzonych wartości.
Listing 2.1. Wykorzystanie monitora szeregowego do wyświetlania danych z magnetycznego czujnika Halla wbudowanego w ESP32
/* Wykorzystanie monitora szeregowego do wyświetlania danych otrzymanych z czujnika pola magnetycznego Halla wbudowanego w ESP32 */
int magField = 0; // Inicjalizacja danych z czujnika
void setup() {
Serial.begin(115200); // Zainicjuj monitor szeregowy
}
void loop() {
// Pętla główna powtarza się w nieskończoność
magField = hallRead(); // Aktualizacja danych
// z czujnika
Serial.println(magField); // Wyświetlanie na monitorze
// szeregowym
delay(500); // Krótkie opóźnienie między odczytami
}
Drugi przykład ilustruje, w jaki sposób przez łącze szeregowe można wysyłać pojedyncze znaki z komputera do modułu. Dane do wysłania (pojedynczy znak, po którym następuje znak nowego wiersza) wprowadza się w polu tekstowym monitora portu szeregowego. Program pozwala przełączać diodę LED na module ESP32 (linia GPIO2) między stanem włączonym a wyłączonym poprzez wysyłanie litery „X” (małej lub wielkiej) wpisanej z klawiatury.