|

Budowa budzika na ESP32C3 z DS3231 i OLED krok po kroku

Budowa budzika na ESP32C3 z DS3231 i OLED krok po kroku

W tym artykule pokażemy krok po kroku, jak zbudować własny elektroniczny budzik oparty na mikrokontrolerze ESP32C3. Urządzenie wyposażone jest w czytelny wyświetlacz OLED, precyzyjny zegar czasu rzeczywistego DS3231, Buzzer do sygnalizacji, alarm o ustawianej godzinie oraz funkcję drzemki o regulowanej długości. Całość obsługiwana jest za pomocą dwóch przycisków, które pozwalają zarówno na wyciszenie alarmu, jak i wygodne poruszanie się po menu ustawień.

Przejdziemy przez wszystkie etapy budowy urządzenia: od listy potrzebnych elementów, poprzez wykonanie połączeń i instalację bibliotek, aż po wgranie gotowego programu do mikrokontrolera.

Interfejs urządzenia jest celowo bardzo prosty i czytelny. Na ekranie wyświetlana jest aktualna godzina, status alarmu oraz długość drzemki. Dodatkowo dostępne jest menu ustawień, które pozwala zmienić godzinę alarmu oraz czas trwania drzemki bez konieczności modyfikowania kodu programu.

Do odmierzania czasu wykorzystujemy układ RTC DS3231, który jest jednym z popularniejszych modułów zegara czasu rzeczywistego dostępnych na rynku. Dzięki wbudowanemu oscylatorowi kompensowanemu temperaturowo utrzymuje on wysoką stabilność pomiaru czasu, co w przypadku budzika ma ogromne znaczenie.

Założenia projektu i jego funkcjonalność

Nasz budzik oparty na ESP32C3 i DS3231 będzie posiadał następujące funkcje i cechy:

Zegar czasu rzeczywistego – za odmierzanie czasu odpowiada układ DS3231 z wbudowanym kompensowanym temperaturowo oscylatorem. Zapewnia on wysoką dokładność czasu, typowo około ±1 minuty na rok przy temperaturze pokojowej.
Duży czytelny zegar na wyświetlaczu OLED – aktualna godzina prezentowana jest w dużej i wyraźnej formie, dzięki czemu budzik można bez problemu odczytać nawet z większej odległości.
Alarm o ustawianej godzinie – użytkownik może ustawić godzinę i minuty alarmu bezpośrednio z poziomu menu urządzenia, bez potrzeby zmiany programu.
Regulowana funkcja drzemki – budzik posiada funkcję drzemki, która pozwala odłożyć alarm na określoną liczbę minut. Długość drzemki również można zmieniać w menu ustawień.
Proste sterowanie dwoma przyciskami – urządzenie obsługiwane jest tylko za pomocą dwóch przycisków:
DRZEMKA – zmiana wartości w menu oraz odłożenie alarmu
STOP / MENU – zatrzymanie alarmu lub wejście do menu ustawień
Intuicyjne menu ustawień – dłuższe przytrzymanie przycisku STOP uruchamia tryb konfiguracji, w którym można ustawić:
Podczas edycji aktualnie zmieniana wartość mruga na ekranie, dzięki czemu użytkownik od razu widzi, który parametr jest właśnie ustawiany.
Magistrala I2C dla wszystkich modułów – zarówno wyświetlacz OLED, jak i zegar RTC komunikują się przez magistralę I2C, co upraszcza okablowanie projektu i pozwala podłączyć oba urządzenia tylko do dwóch linii danych.

Lista potrzebnych elementów

Do zbudowania naszego budzika na ESP32C3 z wyświetlaczem OLED i modułem RTC DS3231 będziemy potrzebować kilku podstawowych komponentów elektronicznych oraz elementów montażowych. Poniżej przedstawiamy pełną listę elementów wykorzystanych w projekcie wraz z krótkim opisem ich funkcji.

ElementOpis
Płytka ESP32-C3 Super MiniMikrokontroler stanowiący serce całego projektu. Odpowiada za obsługę wyświetlacza OLED, komunikację z zegarem RTC DS3231, obsługę przycisków oraz generowanie sygnału alarmu na buzzerze.
Moduł RTC DS3231Zegar czasu rzeczywistego komunikujący się z mikrokontrolerem przez magistralę I2C. Posiada wbudowany oscylator kompensowany temperaturowo, dzięki czemu utrzymuje wysoką dokładność czasu. Umożliwia także podłączenie baterii podtrzymującej CR2032.
Wyświetlacz OLED 2,42″ 128x64pxNiewielki monochromatyczny wyświetlacz OLED służący do prezentowania aktualnej godziny, statusu alarmu oraz menu ustawień. Dzięki komunikacji I2C wymaga tylko dwóch linii sygnałowych.
Przycisk monostabilny – zielonyPierwszy przycisk sterujący pełniący funkcję DRZEMKA. Służy do odkładania alarmu na określony czas oraz do zmiany wartości podczas konfiguracji ustawień w menu.
Przycisk monostabilny – czerwonyDrugi przycisk sterujący pełniący funkcję STOP / MENU. Pozwala zatrzymać alarm lub wejść do menu ustawień, w którym można skonfigurować godzinę alarmu oraz długość drzemki.
Buzzer aktywny low trigNiewielki element generujący sygnał dźwiękowy alarmu. Sterowany bezpośrednio z pinu mikrokontrolera ESP32C3.
Płytka stykowa 400 pól biała x2Umożliwia szybkie zmontowanie całego układu bez konieczności lutowania. Idealna do budowy prototypu projektu.
Przewody połączeniowe 10cm męsko-męskiePrzewody typu męsko-męskie lub męsko-żeńskie służące do wykonania połączeń pomiędzy wszystkimi elementami układu.
Bateria CR2032Bateria podtrzymująca pracę modułu RTC DS3231 w przypadku odłączenia zasilania. Dzięki niej zegar nadal odmierza czas nawet po wyłączeniu urządzenia.


Przygotowaliśmy również gotowy koszyk z elementami, aby maksymalnie ułatwić kompletowanie wszystkich potrzebnych komponentów do projektu. Należy jednak pamiętać o ręcznym zwiększeniu ilości tych elementów, które występują więcej niż jeden raz, takich jak płytki stykowe

Schemat połączeń

Poniżej przedstawiono sposób podłączenia wszystkich elementów naszego budzika. Należy zachować zgodność ze schematem połączeń, ponieważ nieprawidłowe podłączenie może spowodować brak komunikacji z modułami lub nieprawidłowe działanie urządzenia.

W projekcie wykorzystujemy magistralę I2C, dzięki czemu zarówno wyświetlacz OLED, jak i moduł RTC DS3231 korzystają z tych samych linii komunikacyjnych.

ESP32c3 → Wyświetlacz OLED

Pin wyświetlaczaPin ESP32C3Uwagi
VCC3.3VZasilanie wyświetlacza
GNDGNDMasa
SDAGPIO 8Linia danych magistrali I2C
SCLGPIO 9Linia zegara magistrali I2C

ESP32C3 → RTC DS3231

Pin modułu RTCPin ESP32C3Uwagi
VCC3.3VZasilanie modułu RTC
GNDGNDMasa
SDAGPIO 8Linia danych I2C wspólna z OLED
SCLGPIO 9Linia zegara I2C wspólna z OLED

ESP32C3 → Przyciski sterujące

ElementPin ESP32C3Uwagi
Przycisk DRZEMKAGPIO 7Lewy przycisk – zmiana wartości w menu i odłożenie alarmu
Drugi pin DRZEMKAGNDMasa
Przycisk STOP / MENUGPIO 6Prawy przycisk – zatrzymanie alarmu lub wejście do menu
Drugi pin STOP / MENUGNDMasa

ESP32C3 → Buzzer

ElementPin ESP32C3Uwagi
BuzzerGPIO 10Sygnał alarmu sterowany z mikrokontrolera
Drugi pin buzzeraGNDMasa

Programowanie i konfiguracja

Po wykonaniu wszystkich połączeń możemy przejść do etapu programowania naszego budzika. Oprogramowanie zostało przygotowane dla środowiska Arduino IDE z obsługą płytek ESP32C3. Program odpowiada za komunikację z zegarem czasu rzeczywistego DS3231, obsługę wyświetlacza OLED, przycisków sterujących, buzzera oraz zapis ustawień alarmu i drzemki w pamięci mikrokontrolera.

Aby cały projekt działał poprawnie, przed wgraniem kodu należy przygotować środowisko Arduino IDE i zainstalować wymagane biblioteki.

Instalacja bibliotek w Arduino IDE

Aby program budzika mógł poprawnie współpracować z wyświetlaczem OLED oraz zegarem czasu rzeczywistego DS3231, konieczne jest zainstalowanie kilku bibliotek w środowisku Arduino IDE. Biblioteki te upraszczają komunikację z modułami i pozwalają korzystać z gotowych funkcji do obsługi czasu oraz grafiki na wyświetlaczu.

Cały proces instalacji jest bardzo prosty i zajmuje tylko kilka minut. Najpierw uruchom Arduino IDE. Następnie w górnym menu wybierz Szkic → Dołącz bibliotekę → Zarządzaj bibliotekami. Otworzy się Menedżer bibliotek, który pozwala wyszukiwać i instalować potrzebne pakiety.

W polu wyszukiwania wpisz nazwę pierwszej biblioteki: RTClib. Na liście wyników znajdź bibliotekę RTClib by Adafruit i kliknij przycisk instalacji. Biblioteka ta odpowiada za komunikację z modułem zegara czasu rzeczywistego DS3231 i umożliwia łatwe odczytywanie aktualnego czasu oraz jego ustawianie.

Następnie w tym samym oknie wyszukaj bibliotekę Adafruit GFX. Jest to podstawowa biblioteka graficzna używana przez wiele wyświetlaczy. Zapewnia funkcje do rysowania tekstu, linii oraz prostych elementów graficznych na ekranie.

Kolejnym krokiem jest instalacja biblioteki Adafruit SSD1306. Jest to właściwy sterownik dla wyświetlaczy OLED opartych na kontrolerze SSD1306. Biblioteka ta współpracuje bezpośrednio z Adafruit GFX i odpowiada za komunikację z wyświetlaczem przez magistralę I2C.

W projekcie wykorzystujemy również bibliotekę Preferences, jednak w tym przypadku nie trzeba jej instalować ręcznie. Jest ona częścią pakietu Arduino-ESP32, który instalowany jest razem z obsługą płytek ESP32 w Arduino IDE. Biblioteka ta umożliwia zapisywanie ustawień alarmu oraz długości drzemki w pamięci nieulotnej mikrokontrolera, dzięki czemu ustawienia pozostają zapisane nawet po wyłączeniu zasilania urządzenia.

Po zainstalowaniu wszystkich bibliotek środowisko Arduino IDE jest gotowe do kompilacji i wgrania programu na płytkę ESP32C3.

pobranie gotowego kodu programu

Po przygotowaniu środowiska i zainstalowaniu bibliotek możemy przejść do pobrania gotowego kodu programu. Przygotowaliśmy kompletny szkic Arduino, który obsługuje wszystkie funkcje budzika, czyli wyświetlanie aktualnej godziny, ustawianie alarmu, funkcję drzemki, obsługę przycisków oraz sterowanie buzzerem.

W tym miejscu warto umieścić przycisk lub link do pobrania pliku z kodem.

Po pobraniu pliku należy otworzyć go w Arduino IDE.

Wgrywanie programu do ESP32C3 krok po kroku

Po otwarciu szkicu w Arduino IDE należy upewnić się, że środowisko ma zainstalowaną obsługę płytek ESP32. Jeśli nie została jeszcze dodana, trzeba wejść w Plik → Preferencje, a następnie w polu dodatkowych adresów URL do menedżera płytek dodać adres pakietu dla ESP32. Następnie należy przejść do Narzędzia → Płytka → Menedżer płytek, wyszukać pakiet esp32 i zainstalować go.

Po instalacji wybieramy odpowiednią płytkę z menu Narzędzia → Płytka. W przypadku tego projektu należy wybrać model zgodny z używanym modułem ESP32-C3 Super Mini. Następnie podłączamy płytkę do komputera za pomocą przewodu USB.

Kolejnym krokiem jest wybór właściwego portu COM w menu Narzędzia → Port. Po wybraniu portu można kliknąć przycisk Wgraj. Arduino IDE rozpocznie wtedy kompilację programu i przesyłanie go do pamięci mikrokontrolera.

W niektórych przypadkach płytka ESP32C3 może wymagać przejścia w tryb bootloadera ręcznie. Jeśli program nie zacznie się wgrywać automatycznie, należy przytrzymać przycisk BOOT na płytce, nacisnąć krótko przycisk RESET, a następnie zwolnić przycisk BOOT. Po tej operacji ponownie uruchamiamy wgrywanie programu.

Po poprawnym przesłaniu szkicu urządzenie uruchomi się automatycznie i na wyświetlaczu OLED powinna pojawić się aktualna godzina oraz podstawowe informacje o alarmie.

Obrót wyświetlacza OLED

W zależności od sposobu zamontowania wyświetlacza w obudowie może okazać się konieczne odwrócenie obrazu. W naszym projekcie ekran jest obracany o 180°, aby był poprawnie czytelny po zamontowaniu urządzenia.

Realizujemy to jedną linią kodu:

display.setRotation(2);

Biblioteka Adafruit GFX pozwala ustawić cztery orientacje ekranu. Wartość 0 oznacza obrót o 0°, 1 oznacza 90°, 2 oznacza 180°, a 3 oznacza 270°. W praktyce warto przetestować wszystkie cztery ustawienia, ponieważ różne moduły OLED mogą być montowane w nieco innej orientacji.

Pierwsze uruchomienie i ustawienie czasu RTC

Przy pierwszym uruchomieniu projektu należy pamiętać, że moduł DS3231 musi mieć ustawiony poprawny czas. W kodzie zastosowano klasyczne zabezpieczenie. Jeśli funkcja rtc.lostPower() zwróci wartość prawda, program automatycznie ustawi czas zegara na datę i godzinę kompilacji szkicu, korzystając z wartości __DATE__ oraz __TIME__.

Jest to wygodne rozwiązanie na start, ponieważ pozwala szybko uruchomić budzik bez ręcznego ustawiania czasu w dodatkowym programie. Warto jednak pamiętać, że najbardziej precyzyjne ustawienie czasu można wykonać osobnym szkicem przeznaczonym wyłącznie do konfiguracji DS3231 albo w przyszłości rozbudować projekt o możliwość ustawiania aktualnej godziny bezpośrednio z poziomu menu urządzenia.

Po poprawnym ustawieniu czasu i zapisaniu baterii podtrzymującej CR2032 moduł RTC będzie nadal odmierzał czas nawet po odłączeniu głównego zasilania budzika.

Jak działa gotowy budzik

Po uruchomieniu urządzenia na wyświetlaczu OLED prezentowana jest aktualna godzina, status alarmu oraz ustawiona długość drzemki. Mikrokontroler ESP32C3 cyklicznie odczytuje aktualny czas z układu DS3231 i porównuje go z zapisanym czasem alarmu.

W momencie, gdy bieżąca godzina i minuty zgadzają się z ustawioną godziną alarmu, mikrokontroler uruchamia buzzer, który generuje sygnał dźwiękowy. Użytkownik może wtedy zatrzymać alarm przyciskiem STOP albo odłożyć go na kilka minut przyciskiem DRZEMKA. Czas drzemki jest zapisywany w pamięci urządzenia i może być dowolnie zmieniany w menu ustawień.

Dzięki zastosowaniu zegara czasu rzeczywistego DS3231 urządzenie zachowuje wysoką dokładność odmierzania czasu, a zapis parametrów w pamięci nieulotnej sprawia, że budzik po ponownym uruchomieniu pamięta wcześniejsze ustawienia alarmu i drzemki.

Wejście do menu ustawień budzika

Aby zmienić godzinę alarmu lub długość drzemki, należy wejść do trybu ustawień urządzenia. W tym celu należy przytrzymać przycisk STOP przez około 2 sekundy. Po tym czasie budzik przejdzie z trybu normalnego do trybu konfiguracji.

Na wyświetlaczu pojawi się ekran ustawień z napisem USTAWIANIE, a w dolnej części ekranu widoczne będą instrukcje obsługi. Budzik informuje, że przycisk DRZEMKA służy do zmiany wartości, natomiast przycisk STOP służy do przechodzenia do kolejnych ustawień oraz zapisu konfiguracji.

Aktualnie edytowana wartość jest wyróżniona poprzez miganie cyfr na ekranie, dzięki czemu użytkownik od razu widzi, który parametr jest w danym momencie zmieniany.

Na tym etapie urządzenie przechodzi do pierwszego ustawienia, którym jest godzina alarmu.

Ustawianie godziny i minut alarmu

Pierwszym parametrem, który można zmienić w menu ustawień, jest godzina alarmu. Migające cyfry godzin oznaczają, że aktualnie edytowana jest właśnie ta wartość.

Aby zmienić godzinę alarmu, należy naciskać przycisk DRZEMKA. Każde naciśnięcie zwiększa wartość o jedną godzinę. Po osiągnięciu wartości 23 kolejne naciśnięcie spowoduje powrót do wartości 0.

Jeżeli użytkownik przytrzyma przycisk DRZEMKA dłużej, wartość zacznie zwiększać się automatycznie, co pozwala szybciej ustawić odpowiednią godzinę.

Po ustawieniu właściwej godziny należy nacisnąć przycisk STOP, aby przejść do kolejnego parametru, czyli ustawienia minut alarmu. W tym momencie zaczynają migać cyfry minut.

Zmiana minut odbywa się dokładnie w taki sam sposób jak w przypadku godzin. Każde naciśnięcie przycisku DRZEMKA zwiększa wartość minut o jeden, a po przekroczeniu 59 licznik wraca do wartości 0.

Po ustawieniu odpowiednich minut ponownie naciskamy przycisk STOP, aby przejść do ustawiania czasu drzemki.

Ustawianie długości drzemki i zapis ustawień

Ostatnim parametrem, który można skonfigurować w menu ustawień, jest długość drzemki. Parametr ten określa, o ile minut zostanie odłożony alarm po naciśnięciu przycisku DRZEMKA podczas dzwonienia budzika.

Migające cyfry oznaczają, że aktualnie edytowana jest właśnie długość drzemki. Podobnie jak w poprzednich ustawieniach, zmiana wartości odbywa się za pomocą przycisku DRZEMKA. Każde naciśnięcie zwiększa czas drzemki o jedną minutę. Zakres ustawień wynosi od 1 do 60 minut.

Po ustawieniu odpowiedniej wartości należy nacisnąć przycisk STOP. W tym momencie budzik zapisze wszystkie ustawienia w pamięci mikrokontrolera i automatycznie powróci do głównego ekranu wyświetlającego aktualny czas.

Dzięki zapisowi w pamięci nieulotnej ustawienia alarmu oraz długość drzemki pozostają zachowane nawet po odłączeniu zasilania urządzenia.

Włączanie i wyłączanie alarmu

Budzik został zaprojektowany tak, aby alarm był aktywny każdego dnia o ustawionej godzinie. Oznacza to, że jeżeli nic nie zmienimy w ustawieniach, alarm będzie uruchamiał się codziennie o tej samej porze. Jest to wygodne rozwiązanie w przypadku dni roboczych, kiedy chcemy wstawać o tej samej godzinie.

Czasami jednak chcemy wyłączyć alarm na jeden lub kilka dni, na przykład w weekend. W takiej sytuacji nie trzeba zmieniać godziny alarmu ani wchodzić do menu ustawień.

Aby tymczasowo wyłączyć alarm, wystarczy krótko nacisnąć przycisk STOP w trybie normalnej pracy budzika. Po wykonaniu tej operacji alarm zostanie dezaktywowany i nie uruchomi się o ustawionej godzinie.

Na wyświetlaczu OLED pojawi się informacja o statusie alarmu, dzięki czemu można łatwo sprawdzić, czy jest on aktualnie włączony czy wyłączony. Dzięki temu rozwiązaniu można szybko wyłączyć alarm na przykład na weekend, a następnie ponownie go włączyć jednym przyciskiem.

Aby ponownie aktywować alarm, wystarczy ponownie nacisnąć przycisk STOP. Budzik wróci wtedy do standardowego trybu pracy i alarm będzie uruchamiał się codziennie o zapisanej godzinie.

Takie rozwiązanie pozwala wygodnie zarządzać alarmem bez konieczności każdorazowego zmieniania ustawień godziny w menu konfiguracji.

Najczęstsze problemy przy uruchomieniu

Jeżeli po wgraniu programu wyświetlacz OLED pozostaje pusty, w pierwszej kolejności warto sprawdzić poprawność połączeń linii SDA i SCL oraz napięcie zasilania modułu. W wielu przypadkach problem wynika także z innego adresu I2C wyświetlacza niż założony w programie.

Jeśli moduł DS3231 nie jest wykrywany, należy skontrolować połączenia magistrali I2C oraz upewnić się, że moduł jest zasilany poprawnym napięciem. Warto również sprawdzić, czy bateria CR2032 została poprawnie zamontowana.

W przypadku braku reakcji przycisków najczęstszą przyczyną jest błędne podłączenie do niewłaściwych pinów mikrokontrolera lub brak wspólnej masy. Jeżeli buzzer nie wydaje dźwięku, należy sprawdzić, czy został podłączony do właściwego pinu oraz czy używany jest odpowiedni typ buzzera zgodny z programem.

Jeżeli Arduino IDE nie może wgrać programu do ESP32C3, problem zwykle dotyczy wybranego portu COM, przewodu USB bez linii danych albo konieczności ręcznego uruchomienia trybu bootloadera.

Podsumowanie

Budzik oparty na ESP32C3, DS3231 i wyświetlaczu OLED jest prostym, ale bardzo praktycznym projektem elektronicznym, który pozwala połączyć w jednym urządzeniu kilka popularnych zagadnień wykorzystywanych w projektach DIY. W trakcie jego budowy uczymy się obsługi magistrali I2C, wykorzystania zegara czasu rzeczywistego, sterowania wyświetlaczem OLED, obsługi przycisków oraz zapisu danych w pamięci nieulotnej mikrokontrolera. Projekt można łatwo rozwijać o kolejne funkcje, takie jak synchronizacja czasu przez WiFi, regulacja jasności ekranu, dodatkowe menu ustawień czy estetyczna obudowa drukowana w 3D. Dzięki temu może on być nie tylko prostym budzikiem, ale również bardzo dobrą bazą do nauki i dalszych eksperymentów z mikrokontrolerami ESP32.


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 😎👇


Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *