Zbuduj własny miernik napięcia i prądu na ESP32 z wyświetlaczem OLED

Zbuduj własny miernik napięcia i prądu na ESP32 z wyświetlaczem OLED
W tym artykule krok po kroku pokażemy, jak zbudować prosty elektroniczny miernik napięcia i prądu oparty na mikrokontrolerze ESP32. W projekcie wykorzystamy dwukierunkowy czujnik prądu INA219, który pozwala mierzyć zarówno napięcie do 26 V, jak i natężenie prądu do ±3,2 A z wysoką precyzją. Dane pomiarowe w tym wyliczona moc pobierana przez obciążenie będą prezentowane na niewielkim ekranie OLED 0,96″ 128×64 px podłączonym do ESP32. Całość komunikuje się za pomocą magistrali I²C, dzięki czemu zarówno czujnik INA219, jak i wyświetlacz korzystają z tych samych dwóch linii komunikacyjnych na ESP32 SDA i SCL.
To idealny projekt dla początkujących, pozwalający zrozumieć działanie magistrali I²C z wieloma urządzeniami oraz zasady pomiaru zużycia energii w obwodach. W dalszej części artykułu przedstawimy listę potrzebnych elementów, schemat połączeń oraz omawiamy kod programu odpowiadający za odczyt danych z czujnika i wyświetlanie wyników na ekranie.

Założenia projektu i jego funkcjonalność
Nasz miernik napięcia i prądu na ESP32 będzie posiadał następujące cechy i funkcje:
- Pomiar napięcia i prądu w szerokim zakresie – Układ INA219 umożliwia pomiar napięć do 26 V oraz prądów do ±3,2 A z dokładnością ±1%. Dzięki 12-bitowemu przetwornikowi ADC nawet niewielkie spadki napięcia na rezystorze pomiarowym są wychwytywane z dużą dokładnością.
- Obliczanie mocy pobieranej przez obciążenie – Czujnik INA219 mierzy jednocześnie spadek napięcia na rezystorze bocznikowym (shunt) oraz napięcie zasilające obciążenie. Na podstawie tych dwóch wartości obliczany jest aktualny pobór prądu wg prawa Ohma oraz moc pobierana przez obciążenie. Dzięki temu nasz miernik może na bieżąco wskazywać, ile watów mocy zużywa badane urządzenie.
- Prezentacja wyników na czytelnym wyświetlaczu OLED – Bieżące wartości napięcia, prądu oraz mocy są wyświetlane na monochromatycznym ekranie OLED 0,96″. Ekran ten komunikuje się z ESP32 przez I²C, co upraszcza okablowanie wymaga jedynie dwóch pinów mikrokontrolera. Aktualizacja odczytów następuje co 2 sekundy, dzięki czemu użytkownik widzi dynamiczne zmiany pomiarów w czasie rzeczywistym.
- Wspólna magistrala I²C dla wielu urządzeń – Projekt demonstruje, jak na jednej magistrali I²C można obsłużyć równocześnie dwa urządzenia: sensor INA219 oraz wyświetlacz OLED. Każde z nich ma własny unikalny adres domyślnie 0x40 dla INA219 i 0x3C dla wyświetlacza OLED, dzięki czemu ESP32 może komunikować się z każdym z osobna, korzystając z tych samych linii sygnałowych SDA i SCL.
- Pomiary na przykładzie wyświetlacza OLED – Aby zobrazować działanie układu, zasilanie wyświetlacza OLED poprowadziliśmy przez czujnik INA219. Oznacza to, że nasz miernik mierzy prąd pobierany przez sam ekran OLED podczas pracy. To praktyczny przykład wykorzystania sensora w podobny sposób możemy mierzyć pobór prądu dowolnego innego modułu lub urządzenia, umieszczając je w obwodzie pomiarowym czujnika.
- Prosty montaż i niski koszt – Wszystkie elementy zmontujemy na typowej płytce stykowej, bez potrzeby lutowania. W projekcie wykorzystujemy ogólnodostępne, niedrogie komponenty. Zasilanie całości może pochodzić z portu USB 5 V i wbudowanego stabilizatora 3,3 V na płytce ESP32, co czyni układ przenośnym i łatwym w użyciu.
Lista potrzebnych elementów
Zanim przystąpimy do budowy układu, przygotujmy następujące komponenty:
Element | Opis |
---|---|
ESP32 DevKit | Popularna płytka rozwojowa z mikrokontrolerem ESP32. Stanowi główny „mózg” układu – odczytuje dane z czujnika INA219 i steruje wyświetlaczem OLED. |
Czujnik INA219 | Dwukierunkowy cyfrowy czujnik prądu i mocy. Umożliwia pomiar napięcia 0–26 V oraz natężenia prądu ±3,2 A z 12-bitową rozdzielczością. Komunikuje się z ESP32 poprzez interfejs I²C. |
Wyświetlacz OLED 0,96″ I2C 128×64 px | Mały, czytelny biały ekran OLED. Pozwala wyświetlać wyniki pomiarów w postaci tekstowej. Obsługiwany przez magistralę I²C – do komunikacji wymaga jedynie dwóch pinów ESP32 SDA i SCL. |
Płytka stykowa x2 | Uniwersalna płytka prototypowa do montażu układu bez lutowania. Ułatwia połączenie wszystkich komponentów zgodnie ze schematem. |
Przewody połączeniowe | Przewody typu męsko-męskie dupont ok. 10 cm do połączenia modułów na płytce stykowej. |
👉 Przygotowaliśmy też gotowy koszyk z wszystkimi elementami wystarczy kliknąć przycisk poniżej i dodać całość do zamówienia.
Schemat połączeń komponentów
W naszym układzie zarówno moduł INA219, jak i wyświetlacz OLED, korzystają z komunikacji I²C z ESP32. Oznacza to, że piny SDA i SCL obu tych urządzeń zostaną podłączone do odpowiednich pinów ESP32 domyślnie GPIO 21 i GPIO 22 dla SDA i SCL. Poniższa tabela przedstawia szczegółowy schemat połączeń wszystkich elementów w projekcie:
Element / moduł | Wyprowadzenie (pin) | Połączenie do | Opis / Uwagi |
---|---|---|---|
Moduł INA219 | VCC | 3,3 V ESP32 | Zasilanie czujnika logika I²C działa na 3,3 V |
Moduł INA219 | GND | GND ESP32 | Masa wspólna połączona z masą ESP32 i OLED |
Moduł INA219 | SDA | GPIO 21 ESP32 | Linia danych I²C do ESP32, wspólna z OLED |
Moduł INA219 | SCL | GPIO 22 ESP32 | Linia zegara I²C do ESP32, wspólna z OLED |
Moduł INA219 | VIN+ | 3,3 V ESP32 | Wejście zasilania obciążenia strona wysokiego potencjału |
Moduł INA219 | VIN- | VCC wyświetlacza OLED | Wyjście zasilania do obciążenia pomiar spadku napięcia na shuncie |
Wyświetlacz OLED | VCC | VIN- modułu INA219 | Zasilanie wyświetlacza 3,3 V podawane poprzez czujnik INA219 |
Wyświetlacz OLED | GND | GND ESP32 | Masa wyświetlacza wspólna z masą układu |
Wyświetlacz OLED | SDA | GPIO 21 ESP32 | Linia danych I²C wspólna z INA219 |
Wyświetlacz OLED | SCL | GPIO 22 ESP32 | Linia zegara I²C wspólna z INA219 |
Najważniejsze elementy schematu to włączenie czujnika INA219 w szereg z zasilaniem wyświetlacza OLED. Pin VIN+ czujnika podłączamy do źródła 3,3 V z ESP32, zaś z pinu VIN- wyprowadzamy zasilanie do wyświetlacza. W ten sposób cały prąd pobierany przez OLED przepływa przez wewnętrzny rezystor bocznikowy INA219, co umożliwia jego pomiar. Sam układ INA219 zasilamy również napięciem 3,3 V pin VCC, a linie komunikacyjne SDA i SCL łączymy równolegle do ESP32 i OLED.

Ponieważ zarówno sensor, jak i wyświetlacz działają na logice 3,3 V, nie ma potrzeby stosowania konwertera poziomów logicznych możemy bezpośrednio podłączyć je do pinów ESP32. Adres I²C czujnika INA219 wynosi domyślnie 0x40 gdy piny adresowe A0 i A1 są podłączone do masy przez pull-down. Wyświetlacz OLED 0,96″ zazwyczaj fabrycznie ustawiony jest na adres 0x3C. Dzięki temu oba urządzenia mają różne adresy i mogą jednocześnie pracować na jednej magistrali I²C bez konfliktów. Jeśli używasz innego modelu wyświetlacza OLED np. o adresie 0x3D lub więcej niż jednego czujnika INA219, pamiętaj że INA219 pozwala zmieniać adres poprzez kombinacje połączeń pinów A0, A1 dostępne są cztery adresy podstawowe, a w niektórych wariantach nawet do 16 adresów.
Po wykonaniu powyższych połączeń otrzymamy kompletny układ pomiarowy. Upewnij się, że wszystkie połączenia są zgodne ze schematem zwłaszcza właściwe podłączenie VIN+ i VIN- czujnika w szereg z obciążeniem zanim podłączysz zasilanie do ESP32.
Kod źródłowy programu
Gdy sprzęt jest już zmontowany, pora na oprogramowanie mikrokontrolera ESP32. Do obsługi naszego czujnika i wyświetlacza skorzystamy z gotowych bibliotek Arduino. W szczególności posłużymy się biblioteką Adafruit INA219 do odczytu pomiarów z czujnika oraz bibliotekami Adafruit SSD1306 i Adafruit GFX do obsługi wyświetlacza OLED. Przed wgraniem programu na ESP32 upewnij się, że zainstalowałeś w Arduino IDE następujące biblioteki przez Menadżer Bibliotek: “Adafruit INA219”, “Adafruit SSD1306” oraz “Adafruit GFX”.
Po przygotowaniu środowiska programistycznego, możemy przystąpić do wgrania kodu. Kompletny kod źródłowy udostępniamy do pobrania:
Kilka słów wyjaśnienia do powyższego kodu: jak widać, program jest dość prosty dzięki użyciu gotowych bibliotek. Cała złożoność odczytu pomiarów została ukryta w funkcjach biblioteki INA219 nie musimy sami przeliczać wartości prądu ani mocy, robi to za nas układ i biblioteka. Naszym zadaniem jest tylko prawidłowe zainicjowanie urządzeń i wyświetlenie danych.
Warto zwrócić uwagę na interpretację parametrów wyświetlanych na OLED. W kontekście naszego projektu gdzie obciążeniem jest sam wyświetlacz OLED zasilany 3,3 V przez czujnik:
- Bus Voltage będzie pokazywać napięcie faktycznie dochodzące do OLED. Powinno być ono bliskie 3,3 V, choć minimalnie niższe różnica wynika ze spadku napięcia na rezystorze bocznikowym. Przy niewielkim poborze prądu przez OLED rzędu kilkunastu mA spadek może wynosić kilka-kilkanaście milivoltów.
- Shunt Voltage to właśnie ten spadek napięcia na rezystorze podawany w mV. Im większy prąd pobiera obciążenie, tym większy będzie ten spadek. Dla małych prądów np. 10 mA spadek będzie bardzo mały przykładowo 10 mA * 0,1 Ω = 1 mV.
- Current to obliczone natężenie prądu płynącego przez obciążenie, tutaj pobór prądu przez OLED. Można oczekiwać wartości rzędu kilkunastu mA dla typowego wyświetlacza 0,96″ dokładna wartość zależy m.in. od liczby zapalonych pikseli stąd wyświetlanie białych treści może pobierać nieco więcej prądu).
- Load Voltage w kodzie zostało obliczone jako suma napięcia na obciążeniu i spadku na shuncie w praktyce powinno wyjść bardzo blisko 3,3 V napięcia zasilania. Można traktować to jako weryfikację pomiaru Load Voltage ≈ 3,3 V oznacza, że pomiar napięcia i dodany spadek dają wartość źródła zasilania.
- Power to moc w miliwatach obliczona przez INA219 lub poprzez mnożenie odczytanego prądu i napięcia. Dla przykładu, jeśli wyświetlacz pobiera 15 mA przy ~3,3 V, moc wyniesie około 49,5 mW. Wartość ta pozwala ocenić łączny pobór energii przez obciążenie.
Po wgraniu i uruchomieniu programu, na ekranie OLED powinny wyświetlać się kolejne wartości. Jeżeli wszystkie połączenia są poprawne, zobaczysz napięcie zbliżone do 3,3 V, bieżący pobór prądu oraz obliczoną moc. Co 2 sekundy dane będą odświeżane.

Testowanie
Gdy układ jest już uruchomiony, warto przeprowadzić kilka testów, aby w pełni zrozumieć jego działanie. Na początek obserwuj wskazania miernika dla wyświetlacza OLED w różnych warunkach:
- Różna jasność pikseli: Spróbuj zmodyfikować kod tak, by na OLED wyświetlać różne wzory (np. wszystkie piksele zapalone vs. wygaszony ekran) i porównaj pobór prądu. Najprawdopodobniej zauważysz, że biały ekran (wszystkie piksele świecą) pobiera więcej prądu niż czarny ekran – miernik INA219 to wychwyci.
- Zmiana częstotliwości odświeżania: Jeśli zmniejszysz opóźnienie w pętli
loop()
(np. do 500 ms), zobaczysz szybciej reagujące wskazania. Pamiętaj jednak, że zbyt częste odczyty mogą nieco obciążać magistralę I²C. Dla większości zastosowań odświeżanie co 1–2 sekundy jest w zupełności wystarczające. - Pomiar innego obciążenia: Możesz podłączyć do czujnika INA219 dowolne inne obciążenie zamiast wyświetlacza – np. diodę LED z rezystorem, mały silnik DC lub moduł czujnika – i zmierzyć jego pobór prądu oraz spadek napięcia. W tym celu zasil dane urządzenie przez piny VIN+ i VIN- czujnika pamiętając o ograniczeniu 26 V/3,2 A. Wyniki natychmiast pojawią się na OLED, co czyni nasz układ uniwersalnym mini-multimetrem do wbudowanych projektów.

rozszerzanie projektu
Dzięki wykorzystaniu ESP32, nasz miernik można łatwo rozbudować o kolejne funkcjonalności. Kilka pomysłów na rozszerzenia:
- Zapisywanie pomiarów – Dodając kartę SD lub moduł pamięci Flash, można zapisywać zmierzone wartości do pliku logowanie danych, aby analizować je później.
- Komunikacja bezprzewodowa – Wbudowane WiFi/Bluetooth w ESP32 pozwala wysyłać dane np. do chmury, aplikacji mobilnej lub innego urządzenia. Możesz wysyłać odczyty np. protokołem MQTT lub HTTP do serwera, tworząc zdalny monitor zużycia prądu.
- Alarmy i sterowanie – Mając odczyt mocy, możesz zaimplementować proste alarmy np. dioda lub buzzer na przekroczenie określonego prądu albo sterować innymi elementami na podstawie pomiaru np. odłączać zasilanie obciążenia przy zbyt dużym poborze.
- Interfejs użytkownika – Obecny wyświetlacz pokazuje surowe dane, ale nic nie stoi na przeszkodzie, aby dodać przyciski do zmiany trybów wyświetlania, resetu pomiaru, zmiany jednostek np. przełączenie na mW -> W, itp. Można też podłączyć większy wyświetlacz np. TFT i prezentować dane w formie wykresów czy wskaźników.
Podsumowanie
Zbudowaliśmy prosty, a jednocześnie bardzo przydatny miernik napięcia i prądu oparty na ESP32, czujniku INA219 oraz wyświetlaczu OLED. Projekt ten pokazuje, jak w praktyce wykorzystać magistralę I²C do obsługi wielu urządzeń jednocześnie oraz jak mierzyć parametry elektryczne w układach zasilanych niskim napięciem. Nasz układ potrafi jednocześnie monitorować napięcie, prąd i moc pobieraną przez obciążenie, prezentując te informacje w czytelnej formie na ekranie.
Dzięki zastosowaniu gotowego układu INA219 znacząco uprościliśmy sobie zadanie – pomiar odbywa się na wysokiej stronie zasilania, więc możemy mierzyć prąd bez przerywania masy obwodu, a wbudowany przetwornik i wzmacniacz czujnika dbają o dokładność odczytów. Wykorzystanie gotowych bibliotek Arduino dodatkowo przyspieszyło stworzenie oprogramowania, eliminując konieczność ręcznej obsługi interfejsu I²C czy kalibracji pomiarów.
Projekt można traktować jako punkt wyjścia do bardziej zaawansowanych mierników i systemów monitorowania energii. Pozwala on zrozumieć, jak działają czujniki shuntowe takie jak INA219 – mierząc drobny spadek napięcia na rezystorze i na tej podstawie wyliczając prąd. Wiedza ta przyda się przy budowie własnych stacji pomiarowych, zasilaczy laboratoryjnych z pomiarem obciążenia, systemów zarządzania energią w projektach IoT i wielu innych zastosowaniach.
Mamy nadzieję, że udało Ci się pomyślnie zrealizować ten projekt i że nasz miernik znajdzie praktyczne zastosowania w Twoim warsztacie. Teraz już wiesz, jak w łatwy sposób zbudować cyfrowy watomierz do swoich projektów na ESP32 – powodzenia w dalszych eksperymentach! ⚡

Prezentowaną w artykule elektronikę znajdziesz oczywiście w naszym sklepie 👉 sklep.msalamon.pl 👈Zapraszamy również na nasze social media, gdzie na bieżąco informujemy o nowych produktach oraz o najciekawszych promocjach 😎👇