Wstęp
Już jakiś czas temu trafiła do mnie płytka EVW-008 devboard polskiej produkcji, na której znajduje się popularne ESP-8266 oraz trochę peryferiów, które ułatwiają szybkie budowanie projektów. ESP-8266 mogliście zobaczyć w wielu projektach na moim blogu, jako tani, prosty mikrokontroler z łatwą możliwością korzystania z WiFi.
Z pomocą tej i innych płytek postanowiłem przygotować kilka projektów, od prostych korzystających z frameworku Arduino lub gotowego rozwiązania, jakim jest ESPhome, po takie zestawienie jak ESP-NOW z RTOS od Espressif.
Pierwszy projekt z tej serii właśnie prezentuję. To sterowanie przekaźnikami poprzez MQTT, popularny protokół, który też pokazywałem już w kilku projektach. Taki projekt łatwo można wykorzystać do automatyki powiązanej z Node-Redem, Home Assistantem, Domoticzem lub innym własnym rozwiązaniem.
Co potrafi, możecie zobaczyć w minutowym filmie:
Użycie
Skorzystanie z tego projektu stało się jeszcze łatwiejsze, ponieważ ostatnio zacząłem do swoich kodów dorzucać skrypt, który omija potrzebę używania środowiska do wgrywania na płytkę. Wystarczy mieć zainstalowanego Pythona, dostęp do Internetu i można wgrywać program.
Oczywiście trzeba skonfigurować program pod siebie, do tego służy plik config.h w folderze src. Należy tam podać nazwę oraz hasło do naszej sieci WiFi, IP brokera MQTT lub URL, ponieważ broker może być na zewnątrz w sieci. Najczęściej broker MQTT potrzebuje też nazwy użytkownika i hasła, bez tego nie byłoby to bezpieczne rozwiązanie. Identyfikator dla MQTT musi być indywidualny dla każdego urządzenia, z jakim się komunikuje broker, żeby nie zrobić bałaganu. Tematy MQTT, jakie podałem, są przykładowe, można je zmienić na łatwiejsze do zdekodowania, np. z nazwami lamp, które będziemy włączać, czy innych urządzeń.
Home Assistant
Dla przykładu w HA u mnie wygląda to następująco. Korzystam z jednej z nowszych funkcji, jakimi są pomocnicy z typem przełącznik. To rozwiązanie zastąpiło poprzednie, gdzie wszystko było wpisywane do pliku konfiguracyjnego. Na pewno ogranicza to ilość potencjalnych błędów.
HA jest zainstalowany na terminalu, a w nim zainstalowane są Node-RED oraz broker MQTT. Dla niewtajemniczonych przypominam ten materiał:
Pomocników i MQTT łączę właśnie w Node-RED.
Pomiędzy encje (pomocników) a publikacje na MQTT wrzucam jeszcze konwersję na wartości 1/0. Można je zawsze łatwo odwrócić, zależy np. jaki styk przekaźnika używamy.
Tutaj dodatkowo mój stary przykład:
Kod
Całość oczywiście znajdziecie na repozytorium.
Tym razem pominę skrypt do automatycznego wgrywania, opiszę go osobno, ale zachęcam do testowania, może się okaże, że coś jeszcze trzeba poprawić 😉
Większość pracy z MQTT robi za nas biblioteka, łączy się z brokerem, utrzymuje subskrypcje na tematy, dzięki czemu przy przyjściu wiadomości wywołuje się callback.
W tym wypadku, jako że mam 4 przekaźniki do sterowania, postanowiłem skorzystać z mapy, dzięki której w programie cały czas mam powiązanie danego tematu w MQTT i danego pinu. Subskrybuję tylko jeden, można powiedzieć ogólny temat: „EVW-008/+”. Dla przypomnienia:
– „+” – znajduje analogiczne zastosowanie jak w drzewie folderów „*”, nasłuchując wszystkich podtematów na danym poziomie. Na przykład „/urządzenie_1/odczytane_parametry/+” odbierze wiadomości nadane na „/urządzenie_1/odczytane_parametry/temperatura” i „/urządzenie_1/odczytane_parametry/oświetlenie”;
– „#” – używamy, kiedy interesują nas wszystkie kolejne poziomy zagnieżdżenia. Na przykład wykorzystanie „/urządzenie_1/#” skutkuje odczytaniem wiadomości zarówno z „/urządzenie_1/odczytane_parametry/temperatura”, jak i z innych parametrów, np. „/urządzenie_1/diagnostyka”.
Piny do przekaźników nie są wyprowadzone bezpośrednio z ESP, po drodze jest jeszcze ekspander PCF85741 na I2C, który pokazywałem kiedyś tutaj na wideo.
O konfiguracji już wspominałem, ale chciałem zwrócić uwagę dla osób, które tworzą oprogramowanie, że wyciąganie takich stałych do osobnego pliku to dobra praktyka. Łatwo coś znaleźć, zmienić, a praca z repozytorium nie jest kłopotliwa kiedy np. chcemy przetestować nasz kod i nasze hasło, a potem moglibyśmy gdzieś nieopatrznie to opublikować.
Jeśli szukacie podobnego projektu, ale z publikacją danych, np. z czujnika, możecie znaleźć coś takiego tutaj.
Jeśli macie jakieś pytania dotyczące projektu, piszcie śmiało.