12-11-2019, 18:46
Tym razem kilka słów o ESPHome https://esphome.io/index.html
który w HA zainstalujemy jako plugin dodając repozytorium:
https://github.com/esphome/hassio
edit1 (listopad 2019): obecnie już ten krok nie jest potrzebny (chyba, że chcemy korzystać z wersji beta lub developerskiej), standardowa wersja ESPHome jest dostępna w Supervisor-> Sklep z dodatkami, w grupie Home Assistant Community Add-ons
edit2 (marzec 2022): wszystko wraca do korzeni, obecnie poprawne repozytorium to:
Ten wątek powstał przez wydzielenie tego tematu z wątku dedykowanego Home Assistant:
http://forum.jdtech.pl/Watek-home-assist...egracji-id
Opis jak to szybko ogarnąć:
https://esphome.io/guides/getting_started_hassio.html
w każdym razie - instalacja bez sprzętu nie ma sensu (więc warunki początkowe to działający HA oraz posiadanie jakiegoś sprzętu, który damy radę sflaszować na firmware ESPHome).
Nie ukrywam to dość świeże wrażenia, bo dopiero niedawno zmusiłem się do lekkiego ruszenia tego tematu, pragnąc uzyskać coś możliwego dla ESP32, konkretnie zamarzyła mi się zdalna bramka BLE (szczegóły po co i dlaczego póki co odpuszczam), więc nadszedł czas aby temat nieco ogarnąć.
Z założenia nie chciałem rozgrzebywać gotowych urządzeń mających ESP na pokładzie (bo nie wiem jeszcze jakie ostatecznie będą miały zastosowanie i czy np. nie zostaną na fabrycznym sofcie), ale się okazało, że jednak miałem w szufladzie płytkę prototypową NodeMCU ESP8266 moduł dokładnie taki jak widać w dokumentacji:
https://esphome.io/devices/nodemcu_esp8266.html
(a właściwie to jego chiński klon obrandowany Amica(!) a dostępny od ręki również w PL choćby w znanych sklepach dla hobbystów, jakkolwiek przynajmniej 2x drożej niż w ChRL) spora lista podobnych płytek prototypowych
http://docs.platformio.org/en/latest/pla...tml#boards
pełna baza płytek rozwojowych dotycząca także innych platform (m.in. ATmel czy STM) https://platformio.org/boards
Główny problem tego sprzętu to brak wbudowanego BT (więc w ten sposób nie osiągnę celu), no ale chciałem się wdrożyć - jak się okazuje to rozwiązanie jest ultra-proste w obsłudze… (i to znacznie bardziej niż się spodziewałem, a właśnie potencjalny poziom trudności mnie wstępnie odstraszał, ale jak się okazuje dokumentacja jest bardzo przystępna).
Doskonały opis pinoutów różnych płytek ESP8266 (mam w szufladzie też klony płytek Ai-Thinker ESP-01S, ale nadają się raczej tylko do ultraprostych projektów)
https://randomnerdtutorials.com/esp8266-...nce-gpios/
chociaż ultra-podstawowy opis można znaleźć nawet na wiki https://en.wikipedia.org/wiki/ESP8266
Do rzeczy - na dobry początek wpiąłem moduł za pomocą kabelka USB do RPi (wbudowany port USB microusb w module załatwia 2 kwestie za 1 zamachem - zasilanie i programowanie "po kabelku", wiadomo, przerabiając jakieś gotowe urządzenia poziom trudności nieco rośnie - trzeba mieć w zanadrzu jakiś konwerter USB->UART np. CP2102 - taki akurat mam fabrycznie zamontowany na płytce w opisanym module, ważne by pracował z napięciem 3,3V by nie spalić procka, albo np. FT232RL, czy CH340G - na 100% każdy kto zdecydował się na grzebanie w sprzęcie tego rodzaju ma coś takiego w szufladzie), potem instalacja (to kilka minut przypuszczalnie znaczenie ma też szybkość łącza do internetu, ale generalnie jeśli ktoś ma już hass.io na RPi, to wie że trzeba poczekać cierpliwie), uruchomienie pluginu ESPHome, kompilacja kodu (nawet takiego, który nie robi nic, no dobra to by było za proste - postanowiłem zmierzyć napięcie zasilania procka akurat w 8266 jest to banalne, ale wyklucza użycie wejścia analogowego) i flashowanie
kroki od kompilacji przez flaszowanie (oprócz pierwszego można to robić później już jako OTA) po uruchomienie układu trwają na RPi3B+ około minuty
No to teraz niech to robi coś użytecznego, przegrzebałem szuflady i znalazłem parę rzeczy, które można wykorzystać do budowy własnych wynalazków.
Na pierwszy ogień poleciało DHT11
https://esphome.io/components/sensor/dht.html
moja konfiguracja jest minimalnie inna (mimo, że użyłem gotowca z rezystorami) - jak się okazuje autodetekcja układu nie działa w przypadku mojego egzemplarza (bądź modelu DHT11 i trzeba go jawnie podać), może to kwestia zasilania 3,3V, które sobie "bezczelnie" podebrałem z płytki 8266
W drugim kroku do układu dorzuciłem ultradźwiękowy czujnik odległości HC-SR04 (chytry plan zakłada wykorzystanie go do szacowania poziomu paliwa w zbiorniku dla pieca na pellet, obawiam się że może być z tym słabo w kwestii trwałości, ale te czujniki są tanie jak barszcz, czas pokaże… a najpierw muszę zrobić jakąś sensowną konstrukcję do pracy w piwnicy)
https://esphome.io/components/sensor/ultrasonic.html
oczywiście nie obyło się bez trudności - przegapiłem w dokumentacji napięcie zasilania 5V i usiłowałem zasilić go z 3,3V (akurat tylko 3,3V podebrałem sobie na cały breadboard, na którym to złożyłem w kilka minut, ale można też z płytki zabrać 5V z pinu Vin), co ciekawe objawy były dość dziwne do zdiagnozowania - wskazywał odległość rzędu kilku cm (a tego typu rozwiązanie daje w miarę dokładne wyniki w zakresie od 20cm, w/g botland chodzi o 2cm, do koło 2-3m, przy czym w typowej konfiguracji jest timeout bodajże przy odległości 2m), po odłączeniu pinu zwracającego sygnał echa dostawałem timeout (czyli niby wszystko w porządku, a jednak nie )
Planowałem cel edukacyjny, a będzie chyba realne zastosowanie (do budowy takiego czujnika zabierałem się chyba z pół roku, pewnie mozna by to ogarnąć na prostszym sprzęcie, ale WiFi + możliwość dorzucenia do kompletu jeszcze kilku czujników chyba zrobi robotę…).
poniższy kod zawiera tylko sekcję poświęconą sensorom, ale oczywiście musi być kompletny (resztę mamy przecież już gotową)
no i na bis w ramach ułatwienia sobie życia dołożyłem tez sekcję umożliwiająca reboot (mimo połączenia WiFi to zaledwie maksymalnie koło 15sek. przy konfiguracji ze statycznym IP ten czas spada do paru sekund) lub zatrzymanie systemu na tym prototypie (w sumie nie wiem po co, bo to konstrukcja odporna na zaniki zasilania, ale może się przyda w dalszych eksperymentach? bo to naprawdę tryb deep-sleep, ale bez możliwości wybudzenia, przynajmniej podobno, ale skoro tak twierdzi developer…).
w interfejsie HA wygląda to teraz tak:
[attachment=3231]
A teraz sprawca całego zamieszania - LYWSD02, czyli zegarek z wyświetlaczem e-papier + czujnikami temperatury i wilgotności
https://esphome.io/components/sensor/xia...wsd02.html
Jak się okazało w miejscu montażu nie sięga BT wbudowany w RPi… (którym ogarniam sobie kwiatki z czujnikiem miflora, co ciekawe z nimi nie było problemu związanego z zasięgiem?),
ale na bis: HA póki co nie ma bezpośredniej biblioteki do obsługi czujników tego zegarka (a dodatkowo nie ukrywam - jestem "za cienki w uszach" by sobie samemu to naskrobać, mimo że w sieci jest już co nieco na ten temat… ale to i tak by sprawy nie załatwiło przez brak zasięgu), a…
ESPHome dla ESP32 załatwia ten temat niemal od ręki, bo ten moduł ma wbudowany BT można więc za jego pomocą stworzyć sobie bramkę dla urządzeń BLE
https://esphome.io/components/esp32_ble_tracker.html
https://esphome.io/components/binary_sen...sence.html
(a ponieważ kupiłem za około 20zł moduł ESP32-CAM - cos takiego:
https://randomnerdtutorials.com/esp32-ca...duino-ide/
i czekam na jego przybycie, to sobie chyba jakoś nim to ogarnę, kamera przecież nie jest obowiązkowa szczególnie, że to raczej zabawka), konstrukcja jest dość nietypowa jak na ESP32 (ze względu na dodatkowe 4MB pamięci PSRAM specjalnie dla obróbki obrazu, oprócz wbudowanych w ESP32 320kB), ale jeśli się nie uda, no cóż majątku w tym nie utopiłem - można po prostu sprzęt wykorzystać jako dodatkową kamerę (o raczej kiepskich możliwościach, ale np. do podglądu w mniej istotnym miejscu?)
https://randomnerdtutorials.com/esp32-ca...assistant/
najwyżej pomyślę o ESP32 w bardziej typowym wykonaniu, a wybór płytek jest również spory:
http://docs.platformio.org/en/latest/pla...tml#boards
Oprócz tego ESPhome zawiera też biblioteki obsługujące np. takie rzeczy zawierające BLE jak:
Okrągły termometr LCD z czujnikiem wilgotności LYWSDCGQ
https://esphome.io/components/sensor/xia...sdcgq.html
czy czujniki MiFlora HHCCJCY01
https://esphome.io/components/sensor/xia...jcy01.html
który w HA zainstalujemy jako plugin dodając repozytorium:
edit1 (listopad 2019): obecnie już ten krok nie jest potrzebny (chyba, że chcemy korzystać z wersji beta lub developerskiej), standardowa wersja ESPHome jest dostępna w Supervisor-> Sklep z dodatkami, w grupie Home Assistant Community Add-ons
edit2 (marzec 2022): wszystko wraca do korzeni, obecnie poprawne repozytorium to:
Kod:
https://github.com/esphome/home-assistant-addon
Ten wątek powstał przez wydzielenie tego tematu z wątku dedykowanego Home Assistant:
http://forum.jdtech.pl/Watek-home-assist...egracji-id
Opis jak to szybko ogarnąć:
https://esphome.io/guides/getting_started_hassio.html
w każdym razie - instalacja bez sprzętu nie ma sensu (więc warunki początkowe to działający HA oraz posiadanie jakiegoś sprzętu, który damy radę sflaszować na firmware ESPHome).
Nie ukrywam to dość świeże wrażenia, bo dopiero niedawno zmusiłem się do lekkiego ruszenia tego tematu, pragnąc uzyskać coś możliwego dla ESP32, konkretnie zamarzyła mi się zdalna bramka BLE (szczegóły po co i dlaczego póki co odpuszczam), więc nadszedł czas aby temat nieco ogarnąć.
Z założenia nie chciałem rozgrzebywać gotowych urządzeń mających ESP na pokładzie (bo nie wiem jeszcze jakie ostatecznie będą miały zastosowanie i czy np. nie zostaną na fabrycznym sofcie), ale się okazało, że jednak miałem w szufladzie płytkę prototypową NodeMCU ESP8266 moduł dokładnie taki jak widać w dokumentacji:
https://esphome.io/devices/nodemcu_esp8266.html
(a właściwie to jego chiński klon obrandowany Amica(!) a dostępny od ręki również w PL choćby w znanych sklepach dla hobbystów, jakkolwiek przynajmniej 2x drożej niż w ChRL) spora lista podobnych płytek prototypowych
http://docs.platformio.org/en/latest/pla...tml#boards
pełna baza płytek rozwojowych dotycząca także innych platform (m.in. ATmel czy STM) https://platformio.org/boards
Główny problem tego sprzętu to brak wbudowanego BT (więc w ten sposób nie osiągnę celu), no ale chciałem się wdrożyć - jak się okazuje to rozwiązanie jest ultra-proste w obsłudze… (i to znacznie bardziej niż się spodziewałem, a właśnie potencjalny poziom trudności mnie wstępnie odstraszał, ale jak się okazuje dokumentacja jest bardzo przystępna).
Doskonały opis pinoutów różnych płytek ESP8266 (mam w szufladzie też klony płytek Ai-Thinker ESP-01S, ale nadają się raczej tylko do ultraprostych projektów)
https://randomnerdtutorials.com/esp8266-...nce-gpios/
chociaż ultra-podstawowy opis można znaleźć nawet na wiki https://en.wikipedia.org/wiki/ESP8266
Do rzeczy - na dobry początek wpiąłem moduł za pomocą kabelka USB do RPi (wbudowany port USB microusb w module załatwia 2 kwestie za 1 zamachem - zasilanie i programowanie "po kabelku", wiadomo, przerabiając jakieś gotowe urządzenia poziom trudności nieco rośnie - trzeba mieć w zanadrzu jakiś konwerter USB->UART np. CP2102 - taki akurat mam fabrycznie zamontowany na płytce w opisanym module, ważne by pracował z napięciem 3,3V by nie spalić procka, albo np. FT232RL, czy CH340G - na 100% każdy kto zdecydował się na grzebanie w sprzęcie tego rodzaju ma coś takiego w szufladzie), potem instalacja (to kilka minut przypuszczalnie znaczenie ma też szybkość łącza do internetu, ale generalnie jeśli ktoś ma już hass.io na RPi, to wie że trzeba poczekać cierpliwie), uruchomienie pluginu ESPHome, kompilacja kodu (nawet takiego, który nie robi nic, no dobra to by było za proste - postanowiłem zmierzyć napięcie zasilania procka akurat w 8266 jest to banalne, ale wyklucza użycie wejścia analogowego) i flashowanie
kroki od kompilacji przez flaszowanie (oprócz pierwszego można to robić później już jako OTA) po uruchomienie układu trwają na RPi3B+ około minuty
Kod:
esphome:
name: nodemcu8266_test
platform: ESP8266
board: nodemcuv2
wifi:
ssid: "SSID_sieci"
password: "klucz_do_sieci"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "tu_8266_nie_mam_sieci"
password: "klucz_do_fallback_AP"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
sensor:
- platform: adc
pin: VCC
name: "VCC Voltage"
No to teraz niech to robi coś użytecznego, przegrzebałem szuflady i znalazłem parę rzeczy, które można wykorzystać do budowy własnych wynalazków.
Na pierwszy ogień poleciało DHT11
https://esphome.io/components/sensor/dht.html
moja konfiguracja jest minimalnie inna (mimo, że użyłem gotowca z rezystorami) - jak się okazuje autodetekcja układu nie działa w przypadku mojego egzemplarza (bądź modelu DHT11 i trzeba go jawnie podać), może to kwestia zasilania 3,3V, które sobie "bezczelnie" podebrałem z płytki 8266
W drugim kroku do układu dorzuciłem ultradźwiękowy czujnik odległości HC-SR04 (chytry plan zakłada wykorzystanie go do szacowania poziomu paliwa w zbiorniku dla pieca na pellet, obawiam się że może być z tym słabo w kwestii trwałości, ale te czujniki są tanie jak barszcz, czas pokaże… a najpierw muszę zrobić jakąś sensowną konstrukcję do pracy w piwnicy)
https://esphome.io/components/sensor/ultrasonic.html
oczywiście nie obyło się bez trudności - przegapiłem w dokumentacji napięcie zasilania 5V i usiłowałem zasilić go z 3,3V (akurat tylko 3,3V podebrałem sobie na cały breadboard, na którym to złożyłem w kilka minut, ale można też z płytki zabrać 5V z pinu Vin), co ciekawe objawy były dość dziwne do zdiagnozowania - wskazywał odległość rzędu kilku cm (a tego typu rozwiązanie daje w miarę dokładne wyniki w zakresie od 20cm, w/g botland chodzi o 2cm, do koło 2-3m, przy czym w typowej konfiguracji jest timeout bodajże przy odległości 2m), po odłączeniu pinu zwracającego sygnał echa dostawałem timeout (czyli niby wszystko w porządku, a jednak nie )
Planowałem cel edukacyjny, a będzie chyba realne zastosowanie (do budowy takiego czujnika zabierałem się chyba z pół roku, pewnie mozna by to ogarnąć na prostszym sprzęcie, ale WiFi + możliwość dorzucenia do kompletu jeszcze kilku czujników chyba zrobi robotę…).
poniższy kod zawiera tylko sekcję poświęconą sensorom, ale oczywiście musi być kompletny (resztę mamy przecież już gotową)
Kod:
sensor:
- platform: adc
pin: VCC
name: "Napięcie VCC"
- platform: dht
model: DHT11
pin: D7
temperature:
name: "Biurko Temperatura"
humidity:
name: "Biurko Wilgotność względna"
update_interval: 60s
- platform: ultrasonic
trigger_pin: D1
echo_pin: D2
name: "Sensor ultradźwiękowy"
no i na bis w ramach ułatwienia sobie życia dołożyłem tez sekcję umożliwiająca reboot (mimo połączenia WiFi to zaledwie maksymalnie koło 15sek. przy konfiguracji ze statycznym IP ten czas spada do paru sekund) lub zatrzymanie systemu na tym prototypie (w sumie nie wiem po co, bo to konstrukcja odporna na zaniki zasilania, ale może się przyda w dalszych eksperymentach? bo to naprawdę tryb deep-sleep, ale bez możliwości wybudzenia, przynajmniej podobno, ale skoro tak twierdzi developer…).
Kod:
switch:
- platform: restart
name: "Biurko Test Restart"
- platform: shutdown
name: "Biurko Test Shutdown"
[attachment=3231]
A teraz sprawca całego zamieszania - LYWSD02, czyli zegarek z wyświetlaczem e-papier + czujnikami temperatury i wilgotności
https://esphome.io/components/sensor/xia...wsd02.html
Jak się okazało w miejscu montażu nie sięga BT wbudowany w RPi… (którym ogarniam sobie kwiatki z czujnikiem miflora, co ciekawe z nimi nie było problemu związanego z zasięgiem?),
ale na bis: HA póki co nie ma bezpośredniej biblioteki do obsługi czujników tego zegarka (a dodatkowo nie ukrywam - jestem "za cienki w uszach" by sobie samemu to naskrobać, mimo że w sieci jest już co nieco na ten temat… ale to i tak by sprawy nie załatwiło przez brak zasięgu), a…
ESPHome dla ESP32 załatwia ten temat niemal od ręki, bo ten moduł ma wbudowany BT można więc za jego pomocą stworzyć sobie bramkę dla urządzeń BLE
https://esphome.io/components/esp32_ble_tracker.html
https://esphome.io/components/binary_sen...sence.html
(a ponieważ kupiłem za około 20zł moduł ESP32-CAM - cos takiego:
https://randomnerdtutorials.com/esp32-ca...duino-ide/
i czekam na jego przybycie, to sobie chyba jakoś nim to ogarnę, kamera przecież nie jest obowiązkowa szczególnie, że to raczej zabawka), konstrukcja jest dość nietypowa jak na ESP32 (ze względu na dodatkowe 4MB pamięci PSRAM specjalnie dla obróbki obrazu, oprócz wbudowanych w ESP32 320kB), ale jeśli się nie uda, no cóż majątku w tym nie utopiłem - można po prostu sprzęt wykorzystać jako dodatkową kamerę (o raczej kiepskich możliwościach, ale np. do podglądu w mniej istotnym miejscu?)
https://randomnerdtutorials.com/esp32-ca...assistant/
najwyżej pomyślę o ESP32 w bardziej typowym wykonaniu, a wybór płytek jest również spory:
http://docs.platformio.org/en/latest/pla...tml#boards
Oprócz tego ESPhome zawiera też biblioteki obsługujące np. takie rzeczy zawierające BLE jak:
Okrągły termometr LCD z czujnikiem wilgotności LYWSDCGQ
https://esphome.io/components/sensor/xia...sdcgq.html
czy czujniki MiFlora HHCCJCY01
https://esphome.io/components/sensor/xia...jcy01.html