Celem tego odcinka jest przekazanie czytelnikowi wiedzy z zakresu:
- konfigurowanie i obsługa prostych wejść/wyjść analogowych
- dołączanie czujników analogowych do systemu
- posługiwanie się systemami liczbowymi: dwójkowym, ósemkowym i szesnastkowym oraz kodem ASCII.
Wejścia analogowe ESP32
ESP32 zawiera dwa 12-bitowe przetworniki analogowo-cyfrowe (ADC), obsługujące łącznie 18 kanałów analogowych, jednak w danej wersji płytki rozwojowej nie wszystkie mogą być wyprowadzone. Na przykład płytka 30-pinowa, której używamy w większości naszych projektów praktycznych, dysponuje zaledwie sześcioma kanałami przetwornika ADC1 i dziewięcioma ADC2. Kolejnym ograniczeniem jest to, że ADC2 nie można używać podczas korzystania z Wi-Fi. Jeśli Wi-Fi nie potrzebujemy, nie stanowi to oczywiście problemu. W przeciwnym przypadku, gdy chcemy używać wielu kanałów analogowych, mamy kłopot.
Przetwornik analogowo-cyfrowy (ADC) w układzie ESP32 wykorzystuje metodę „kolejnych przybliżeń”. Polega ona na tym, że analogowy sygnał wejściowy jest w komparatorze porównywany z sygnałem wyjściowym przetwornika cyfrowo-analogowego. Sygnał cyfrowy na wejściu DAC-a (wartość 12-bitowa) pochodzi ze specjalnego rejestru kolejnych przybliżeń (SAR). W rejestrze tym tworzony jest ciąg wartości, które szybko przybliżają się do wartości odpowiadającej sygnałowi analogowemu. Cały proces kończy się, gdy dane w rejestrze SAR zostaną przez DAC przekształcone na taką wartość analogową, którą komparator uzna za identyczną z sygnałem wejściowym.
Odczyt napięć analogowych
W zeszłym odcinku do odczytywania cyfrowych pinów wejściowych modułu ESP32 używaliśmy funkcji digitalRead(). Wynikiem był stan HIGH lub LOW. Odpowiednikiem tej funkcji dla wejść analogowych jest analogRead().
Jak można się spodziewać, funkcja analogRead() wymaga podania jako argumentu numeru pinu wejścia/wyjścia. Pamiętajmy, że pin przypisujemy zazwyczaj przed główną częścią programu, używając instrukcji w rodzaju: