BTHome Sensor – od mikroamperów do słońca ☀️

By | Październik 9, 2025
Przez ostatnie tygodnie dłubałem, mierzyłem, liczyłem i lutowałem. Temat, który na początku wydawał się prosty: “zrób czujnik na ESP32-C3, który działa pół roku na baterii” a zamienił się w małą inżynieryjną epopeję. Ale wiecie co? Warto było.

Skąd startowaliśmy

Zaczęło się niewinnie: „zrób czujnik BLE na ESP32-C3, który wytrzyma na baterii jak najdłużej”.
Power Profiler szybko sprowadził mnie na ziemię – zamiast mikroamperów w uśpieniu, pierwsze prototypy potrafiły ciągnąć całkiem zdrowe miliampery.
I tak zaczęło się polowanie na złodziei prądu.

Sensor temperatury, wilgotności, ćsiśnienia i natężenia oświetlenia.

Power Profiler robi robotę

Zaczęło się od entuzjazmu i założeń, że „ESP32-C3 to przecież układ low power, więc się uda”. Podłączyłem baterię, wgrałem kod, BLE nadaje, dane lecą – wyglądało świetnie. Dopiero gdy wpiąłem Power Profiler Kit II, zobaczyłem brutalną prawdę: zamiast mikroamperów w uśpieniu, układ ciągnął całkiem zdrowe miliampery.

Od tego momentu zaczęło się prawdziwe polowanie na złodziei prądu. Pierwszy winowajca – LED zasilania. Banalny element, ale potrafił zjadać kilkadziesiąt mikroamperów cały czas. Zniknął z płytki w pierwszej kolejności. Kolejny problem – dzielnik napięcia baterii. W teorii niewinny, w praktyce stale obciążał akumulator. Proste rozwiązanie: zasilać go tylko na czas pomiaru, przez GPIO. Pomiar, odczyt, GPIO w stan wysokiej impedancji – i dzielnik znika z poboru prądu.

Potem przyszła kolej na czujnik DS18B20. Zasilany na stałe też swoje brał, więc zrobiłem mu zasilanie sterowane. Włączam tylko wtedy, gdy trzeba wykonać pomiar, potem odcinam zasilanie. Wykres z Power Profilera natychmiast się uspokoił.

Najwięcej emocji wzbudziły jednak moduły radiowe. BLE jest energooszczędne, ale tylko jeśli nie nadużywasz go. W pierwszych testach reklamy szły co kilka sekund – prąd skakał jak szalony. Po ustawieniu interwału na jedną minutę pobór spadł radykalnie, a w Home Assistant nadal wszystko aktualizuje się płynnie. Wi-Fi z projektu odpadło całkowicie – każde nawiązanie połączenia to kilkaset miliamperów przez kilka sekund, czyli koniec marzeń o długiej pracy na baterii.

Po tych wszystkich poprawkach wykres prądu w końcu zaczął wyglądać tak, jak chciałem – długie, płaskie odcinki ciszy i krótkie impulsy co minutę. Średni pobór spadł z około 0,4 mA do 0,162 mA. To oznaczało, że z około 200 dni pracy zrobiło się ponad 480 dni. I to na tym samym ogniwie 18650.

Power Profiler okazał się jednym z najlepszych zakupów do warsztatu. Pokazuje rzeczy, których żadne “czucie” ani miernik uniwersalny nie pokażą. Dzięki niemu widzisz dokładnie, gdzie znika każdy mikroamper i możesz to poprawić, zamiast zgadywać.

Kalkulatory w Pythonie, rzeczywistość bez ściemy

Kiedy udało się ujarzmić pobór prądu, pojawiło się kolejne pytanie: jak to wszystko przekłada się na realny czas pracy? Bo co innego „czuć”, że działa długo, a co innego wiedzieć, dlaczego działa długo. I tu wjechały kalkulatory w Pythonie.

Napisałem kilka prostych skryptów, które liczą wszystko, od średniego prądu w cyklu, przez straty na stabilizatorze, po bilans energii w ciągu dnia z panelu PV. Prosty input: pojemność akumulatora, prąd spoczynkowy, czas aktywności, wydajność panelu, ilość „ciemnych dni”, i masz czarno na białym, czy układ ma szansę przetrwać zimowy tydzień bez słońca.

Prosty kalkulator w pythonie przeliczajacy zuzycie energii urządzenia.

To uczy pokory. Wystarczy trochę założeń „na oko”, żeby kalkulator pokazał wynik z kosmosu. Dlatego przyjąłem zasadę: liczyć pesymistycznie. Zawsze zakładam najgorszy przypadek: panel działa z 30% nominalnej mocy, słońce świeci krócej, akumulator ma niższą sprawność, a LDO traci więcej niż by się chciało. Lepiej potem się miło zaskoczyć niż zdziwić, że czujnik padł po trzech dniach chmur.

Przy PV trzeba pamiętać, że liczby z katalogu to bajka na równiku. W praktyce wpływ ma wszystko: kąt panelu, temperatura, zacienienie, wilgoć, nawet to, że słońce zimą w Polsce ledwo się wlecze po niebie. Kalkulator pomaga to zobaczyć w liczbach i dobrać pojemność ogniwa tak, żeby system faktycznie był autonomiczny, a nie działał „na życzenie pogody”.

Troszkę bardziej zaawansowany kalkulator, przeliczający bilans energetyczny urządzenia. Uwzględnia wiele parametrów które mozna modyfikować by sprawdzic każdy scenariusz.

Oszczędzanie energii to nie magia i nie tabelka z datasheeta. To matematyka, czas, prąd i setki małych decyzji, które sumują się w realny wynik. A kiedy wszystko policzysz sam, przestajesz wierzyć w marketing i zaczynasz rozumieć, jak naprawdę działa Twój układ.

Oszczędzanie energii, to nie tylko noty katalogowe

Kiedy już człowiek zacznie grzebać głębiej, okazuje się, że wszystko ma znaczenie. W notach katalogowych wygląda pięknie: stabilizator pobiera kilka mikroamperów, czujnik w deep sleepie praktycznie nic, a mikrokontroler śpi jak kamień. W praktyce? Każdy z tych elementów ma swoje „ale”.

Weźmy stabilizatory. Na papierze MCP1700-3002E ma śmiesznie niski prąd spoczynkowy (250nA) i bardzo mały dropout, ale tylko wtedy, gdy naprawdę dobrze go obciążysz i dasz mu czyste warunki pracy. Przy źle dobranych kondensatorach albo przy zbyt dużej różnicy napięć potrafi dodać kilka mikroamperów „z powietrza”. A przy projektach, gdzie liczysz każdy mikroamper, to już robi różnicę. Co ciekawe stockowo instalowane LDO na układach ESP32C3 pobierają około 60uA a procesor w deep slipie pojedyńcze uA. Dlatego zasilam peryferia bezpośrednio z procesora i usuwam wszystkie inne regulatory z układu.

To samo z peryferiami – nawet jeśli są „uśpione”, niektóre linie I²C czy 1-Wire potrafią mieć delikatne prądy upływu, szczególnie przy długich przewodach albo braku rezystorów podciągających dobranych pod konkretne napięcie. Każdy taki detal to nie ładny wykres z PDF-a, tylko realne straty na baterii.

Ścieżki na PCB, rezystory pull-up, wybór pinów – wszystko to wpływa na końcowy bilans energii. Niektóre piny ESP32-C3 w deep sleepie ciągną uA więcej od innych, bo są podpięte do modułów wewnętrznych. Warto przetestować to samemu zamiast ufać ogólnym tabelom.

No i komunikacja: 1-Wire, I²C, UART. W teorii szybkie i lekkie, w praktyce każde odpytywanie czujnika to nie tylko aktywność magistrali, ale też wybudzenie zegara systemowego i podbicie napięcia wewnętrznego regulatora. Te ułamki sekund robią różnicę.

Wniosek? Oszczędzanie energii to nie „dobra lista części”, tylko zrozumienie, jak te części zachowują się razem. Układ może mieć świetne parametry osobno, a po złożeniu całości wyjdzie, że coś się żre po cichu w tle.

Gotowe zmontowane sensory.

Niuanse protokołu BTHome

BTHome to bardzo fajny, lekki protokół, prosty w implementacji i w pełni zgodny z Home Assistantem. Idealny do urządzeń bateryjnych, gdzie liczy się każdy mikroamper. Ale jak to zwykle bywa, prostota ma swoją cenę.

Największym ograniczeniem jest długość ramki BLE. BTHome pozwala przesłać tylko określoną liczbę bajtów, więc pełny zestaw danych z kilku czujników zwyczajnie się nie mieści. Jeśli próbujesz upchnąć wszystko naraz: ramka zostanie przycięta, a część informacji przepadnie. Dlatego zamiast wysyłać jeden „pełen pakiet”, rozdzielam dane na kilka cykli. W jednym cyklu idzie temperatura i wilgotność, w kolejnym ciśnienie, potem światło, napięcie baterii itd. Dzięki temu każda ramka pozostaje krótka, radio działa tylko przez ułamek sekundy, a zużycie energii pozostaje minimalne.

To rozwiązanie ma jeszcze jedną zaletę, dane rozłożone w czasie pozwalają lepiej analizować trendy i rozdzielczość zmian. W smart home każda wartość ma znaczenie. Temperatura, wilgotność, ciśnienie czy poziom światła mogą być podstawą do różnych automatyzacji: sterowania ogrzewaniem, wentylacją, roletami czy zarządzania energią z paneli PV. Dlatego staram się nie rezygnować z żadnych pomiarów, po prostu wysyłam je sprytniej.

Aktualnie testuję kilka wariantów czujników. DS18B20 to solidny klasyk do pomiaru temperatury, AHT10 jest szybki i energooszczędny, BME280 dodaje pomiar ciśnienia, a GY-30 (BH1750) monitoruje natężenie światła i jest idealny do testów paneli PV i inteligentnych automatyzacji świetlnych. Każdy z nich wnosi coś innego, a razem tworzą kompletny obraz otoczenia, który można w pełni wykorzystać w systemie smart home.

Nowy etap: akumulator + małe panele PV + MPPT

Kiedy udało się zejść z poborem prądu do setnych miliampera, naturalnym krokiem było sprawdzenie, czy da się to zasilić ze słońca. Dołożyłem więc małe panele fotowoltaiczne i miniaturowe regulatory MPPT, które pilnują ładowania akumulatora w optymalny sposób. Dzięki temu czujniki zaczęły działać w pełni autonomicznie, w dzień ładują akumulator, w nocy pobierają energię z bufora.

W praktyce okazało się, że każdy czujnik ma swój własny „charakter energetyczny”. Różne czujniki mają różne cykle pracy, różne czasy pomiaru i inne obciążenie radia. Z tego powodu każdy węzeł ma swój indywidualny profil energetyczny i inną długość cyklu uśpienia, inną moc nadajnika BLE i inne priorytety wysyłania danych. Niektóre czujniki raportują częściej (np. światło, gdy zmienia się dynamicznie), inne rzadziej (np. ciśnienie).

Raportowanie napięcia akumulatora przez BTHome okazało się bardzo przydatne. Widać na wykresach, jak zmienia się kondycja ogniwa w zależności od pory roku, pogody i długości dnia. Przy słabszym słońcu napięcie delikatnie spada, a po słonecznym dniu wraca do pełna, idealna wizualizacja sezonowości energii.

Przeprowadziłem też kilka symulacji „ciemnych dni”, żeby sprawdzić, jak długo czujnik przetrwa bez ładowania. To pozwoliło dobrać pojemność akumulatora i ustawić limity mocy nadajnika tak, by urządzenie nie wyczerpało się całkowicie w czasie kilku pochmurnych dni z rzędu. Dodatkowo, gdy napięcie spada poniżej określonego progu, urządzenie samo wydłuża interwał pomiarów (* w planie do implementacji) to prosty, ale skuteczny sposób na utrzymanie działania nawet w trudnych warunkach.

W efekcie powstał system, który w praktyce jest samowystarczalny, w dzień czerpie energię ze słońca, w nocy pracuje z zapasu, a całość sama dba o swój bilans energetyczny.

Wykres zuzycia energii i ładowania akumulatora.

PCB i… czas na obudowy

Wersja 2.0 płytki z MCP1700-3002E i przemyślanym zasilaniem czujników sprawdziła się w praktyce. Układ jest stabilny, pobór prądu przewidywalny, a montaż bezproblemowy. Teraz całość wchodzi w etap dopracowania mechanicznego, czyli obudów.

Podzieliłem projekt na dwie linie: indoor i outdoor.

Wersje indoor mam już praktycznie dopięte. To kompaktowe, estetyczne obudowy do montażu naściennego, wyglądają dobrze zarówno w mieszkaniu, jak i w biurze. Mają wygodny dostęp do płytki i akumulatora, więc serwis i aktualizacje firmware to kwestia kilku minut. Przy projektowaniu zależało mi, żeby obudowa nie wyglądała „technicznie”, tylko neutralnie i czysto, jak typowy element smart home. Dodatkowo zachowałem dobrą konwekcję powietrza, żeby czujniki temperatury i wilgotności nie przekłamywały pomiarów.

ramka montażowa z elektroniką i zasilaniem.

Gotowy zamontowany czujnik.

Druga linia, outdoor, jest w fazie projektowania i testów. Tutaj priorytety są inne: odporność na deszcz, promieniowanie UV i skoki temperatury. Obudowy mają osłonę radiacyjną dla czujników T/RH, kanały wentylacyjne oraz uchwyty do montażu małego panelu PV. Zależy mi też na estetyce, przewody prowadzone są schludnie, a obudowa wygląda jak gotowy produkt, a nie eksperyment z garażu.

Druk 3D daje tu ogromną swobodę. Można kształtować przepływ powietrza, dodawać daszki, zatrzaski czy modułowe płyty montażowe, które pozwalają łatwo wymieniać czujniki lub testować nowe warianty bez projektowania wszystkiego od zera. Każda iteracja to kolejne drobne usprawnienie to lepsze spasowanie, łatwiejszy montaż, mniejsza liczba śrubek. Takie rzeczy najbardziej cieszą, bo widać, jak projekt z prototypu zamienia się w gotowe, dopracowane urządzenie.

Inżynieryjna zabawa (i o to chodzi)

Ten projekt od początku miał być czymś więcej niż tylko „tanim termometrem”. To mała szkoła cierpliwości, dokładności i szacunku do fizyki. Każdy mikroamper, każda ścieżka, każda linia kodu ma tu znaczenie. To właśnie w takich projektach widać, że elektronika nie kończy się na zlutowaniu kilku elementów, to gra między sprzętem, oprogramowaniem i rzeczywistością.

Po drodze było wszystko: projektowanie PCB, testy zasilania, optymalizacja firmware, analiza ramek BLE, pomiary z Power Profilerem, druk 3D, montaż SMD i testy w realnych warunkach. Każdy etap czegoś uczył, czasem pokory, czasem cierpliwości, a czasem po prostu radości z tego, że coś działa tak, jak miało.

Najlepsze w tym wszystkim jest to, że efekt końcowy to działający, autonomiczny i elastyczny system czujników, który sam dba o energię i komunikuje się z siecią. Ale jeszcze lepsze jest to, że po drodze można było się pobawić, pomierzyć, przemyśleć i ulepszyć. To właśnie ta inżynieryjna zabawa jest sednem całego projektu i powodem, dla którego chce się dłubać dalej.