Prosty włącznik (np. światła) na ESP01 / ESP01s

W tym artykule przedstawię, jak przygotować najprostszy moduł - włącznik. Może to być na przykład włącznik światła.
Taki powiedzmy DYI odpowiednik Zamel Supla ROW-xx

Co chcemy uzyskać? Sterowanie włącz-wyłącz jakimś odbiornikiem energii - np oświetleniem. Z systemu/aplikacji Supla oraz (później jak się uda) lokalnie (czyli klasycznie - np. włącznikiem przy module) - tak by włączanie lokalne było widoczne w aplikacji

Czego potrzebujemy, by stworzyć włącznik w systemie supla? Jakiegoś modułu z przekaźnikiem, i fajnie jakby miał też wejście na przycisk/przełącznik.
Przykładowo, z gotowych modułów - które wręcz są do tego przewidziane - idealnie nadają się na przykład:

  • itead sonoff mini
  • itead sonoff basic
  • loratap SC500W itp wynalazki chińskie
  • albo nasza "goła" płytka z ESP - powiedzmy bardzo prosta i tania ESP01, wraz z płytką przekaźnika.

Pierwszy przykład będzie oparty o tą ostatnią opcję - bo jest najprostsza do uruchomienia i pracuje na bezpiecznych napięciach.

sprzęt

Organizujemy od chińczyka:

  1. ESP01s ~2$ (lub ~1$ plus 1$ przesyłka) - np tutaj
    esp01s

różnica między ESP01 a ESP01s jest w zasadzie pomijalna, ale jeśli tylko możemy - bierzemy wersję S

  • wersja ESP01S jest trochę nowsza, i zawiera tylko 1 niebieską diodkę LED (idealnie nadającą się do sygnalizowania stanu Config). oraz posiada dodatkowe wbudowane rezystory pullup na liniach Reset (RST) i Enable (En) - nie musimy ich dodawać po swojej stronie.
  • wersja ESP01 ma dwie diodki LED - podłączone do linii RX i TX - ich miganie pomaga stwierdzić poprawną transmisję UART. Aby moduł pracował prawidłowo - musi mieć z zewnątrz linie RST i En podciągane do 3.3v opornikami.

2 .moduł przekaźnika do powyższego (~1$) - lub kupujemy w komplecie wraz z ESP01s (~2.5$)
esp01_relay

  1. programator USB-UART od razu do płytek ESP01 przygotowany ~3$ (przyda się później do programowania wszystkiego innego na ESP, tylko dodając kabelki) - przykładowo tutaj
    esp01progammer1

  2. Zasilanie 5V.
    Jeśli nie masz jakiegoś zasilacza laboratoryjnego - to najprostszym sposobem jest użycie jakiegoś starego kabelka USB, może od jakiegoś starego telefonu z mini/micro USB którego już nie używasz - i obcięcie wtyczki.
    usb5v
    Po obraniu kabelków zostawiamy tylko czerwony (+5v) i czarny (masa, GND) i gotowe - mamy testowe zasilanie 5v z jakiegoś powerbanku, ładowarki USB itp.

Generowanie pliku firmware

Musimy wygenerować sobie pliczek .bin, który wgramy do modułu.
Wchodzimy na stronę https://gui-generic-builder.supla.io/ i wybieramy podstawowe opcje, jak na obrazku poniżej:
esp01gg
Załączamy Przekaźniki, oraz na przyszłość Przyciski.
Pozostałe wszystkie opcje - na czerwono, wyłączone, teraz nie będą nam potrzebne.
Naciskamy Generuj, i po około 30sekundach wyskakuje nam okienko z możliwością pobrania pliku .bin
gotowe

Podłączenie i programowanie

Ogólnie wgrywanie oprogramowania jest opisane tutaj, więc nie rozwodząc się nad instalacją sterowników USB, wyborem programu do programowania...

  1. Wtykamy naszą płytkę ESP01s do programatora, tak jak na zdjęciu (nie odwrotnie!)
    esp01_with_programmer
  2. w programatorze przełączamy przełącznik PROG<>UART na pozycję PROG (zwiera to linię GPIO0 naszego modułu do masy, by po włączeniu wystartował w trybie wgrywania programowania)
  3. wtykamy taki zestaw do portu USB komputera
  4. w programie do flashowania ustawiamy odpowiedni port COM (zakładając że sterowniki USB<>COM do programatora mamy zainstalowane), ustawiamy opcje jak na obrazku:
    phyflasher
    Wybieramy ściągnięty wcześniej plik .bin i naciskamy Flash NodeMCU
    phyflasher1
    Po krótkiej chwili powinniśmy dostać w okienku komunikat:
    phyflasher2

Czyli układ zaprogramowany. Sukces. Możemy przechodzić do Pierwszego uruchomienia

Jeśli mamy coś takiego - jakby morsem .....____..... i nie idzie dalej - znaczy że albo nie podłączyliśmy układu ESP, albo nie przełączyliśmy przelącznika PROG (jest w pozycji UART), albo moduł jest uszkodzony.
phyflasher_failed

Pierwsze uruchomienie

(W tym czasie powinniśmy się też zalogować do https://cloud.supla.org i włączyć na górze rejestrację nowych urządzeń)

Po pierwszym uruchomieniu (np restarcie przez wyjęcie, przełączenie przełącznika PROG<>UART w pozycję UART, i włożenie programatora do USB ponownie - nasz moduł zaczyna rozglaszać sieć WIFI o nazwie SUPLA-ESP8266-xxxxxxxxx (końcówka - zależy od adresu MAC naszego modułu - było go widać w okienku programatora, rozdzielony dwukropkami - w naszym przykładzie to E8:DB:84:98:8E:5D więc znajdziemy sieć WiFi o SSID SUPLA-ESP-8266-E8DB84988E5D

Jeśli równocześnie, w tym samym czasie - mając nadal podłączony "programator usb-uart" (ale z przełącznikiem w pozycji UART) - włączymy jakiś program typu Terminal, i połączymy się z prędkością 74880bps - to ujżymy w terminalu ciekawy LOG:

Config read
Key: 0 Value: —x)eKŃĐ뮤Ϡ”1í
Key: 1 Value: •ÇâŞ8ţn.k¶BőŐ­
Key: 2 Value:
Key: 3 Value:
Key: 4 Value: admin
Key: 5 Value: pass
Key: 6 Value: GUI Generic
Key: 7 Value: svrX.supla.org
Key: 8 Value: email@address.com
Key: 9 Value: 1
Key: 10 Value: 1
Key: 11 Value:
(... tu wszystkie key 11 - 81)
Key: 82 Value:
Key: 83 Value:
Save key: 0 Value: —x)eKŃĐ뮤Ϡ”1í
Save key: 1 Value: •ÇâŞ8ţn.k¶BőŐ­
Save key: 4 Value: admin
Save key: 5 Value: pass
Save key: 6 Value: GUI Generic
Save key: 7 Value: svrX.supla.org
Save key: 8 Value: email@address.com
Save key: 9 Value: 1
Save key: 10 Value: 1
Save key: 24 Value: ,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Save key: 58 Value: 1
Save key: 59 Value: 0
Save key: 75 Value: 0.45
Save key: 80 Value: 0
Config Mode started: 3
WiFi: establishing connection with SSID: ""
Supla - starting initialization
Storage initialization
readStorage: 8; Read: [3 0 0 0 0 0 0 0 ]
Storage: missing Supla tag. Rewriting...
Wrote 8 bytes to storage at 0
Commit
Validating storage state section with current device configuration
Storage state section validation completed. Loading elements state...
Initializing network layer
WiFi: establishing connection with SSID: ""
Using Supla protocol version 16
Current status: [5] SuplaDevice initialized
WiFi: establishing connection with SSID: ""
Config Mode started: 3
AP started IP: 192.168.4.1
Current status: [8] No connection to network
Connection fail counter overflow. Trying to setup network interface again

(Możemy go zostawić włączony - będziemy widzieć co robi moduł podczas konfigurowania go z poziomu smarfona. )

Łączymy się z siecią WiFi SUPLA i otwieramy http://192.168.4.1/
Screenshot_20220911_151925_com.duckduckgo.mobile.android
Ustawiamy parametry sieci wifi, konta Supla, i naciskamy przycisk ZAPISZ.
Następnie - RESTART
W logu pojawia się taki ładny zapis:

Save key: 0 Value: —x)eKŃĐ뮤Ϡ”1í
Save key: 1 Value: •ÇâŞ8ţn.k¶BőŐ­
Save key: 2 Value: SSIDmojejSieciWIFI
Save key: 3 Value: HASLOdoMojejSIECI
Save key: 4 Value: admin
Save key: 5 Value: pass
Save key: 6 Value: GUI Generic
Save key: 7 Value: svr32.supla.org
Save key: 8 Value: adresmail@gmai.com
Save key: 9 Value: 1
Save key: 10 Value: 1
Save key: 21 Value: 0
Save key: 24 Value: ,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Save key: 58 Value: 1
Save key: 59 Value: 0
Save key: 75 Value: 0.45
Save key: 80 Value: 0

Gdzie widać co najważniejsze - jaką wpisaliśmy nazwę sieci, hasło (czy aby na pewno dobrą: bez zbędnych spacji, niewłaściwych dużych i małych liter) oraz parametry srvNN.supla.org (adres lub nr naszego serwera supli) i adresmail@ przypisany do konta.
Gdy klikniemy Restart - w logu pojawi się nowy jak powyższy log startu, ale co najważniejsze - na końcu log z łączenia się:

Supla - starting initialization
Storage initialization
readStorage: 8; Read: [3 0 0 0 0 0 0 0 ]
Storage: missing Supla tag. Rewriting...
Wrote 8 bytes to storage at 0
Commit
Validating storage state section with current device configuration
Storage state section validation completed. Loading elements state...
Initializing network layer
WiFi: establishing connection with SSID: "SSIDmojejSieciWIFI"
Using Supla protocol version 16
Current status: [5] SuplaDevice initialized
WiFi: establishing connection with SSID: "SSIDmojejSieciWIFI"
Config Mode started: 3
AP started IP: 192.168.4.1
Current status: [8] No connection to network
local IP: 192.168.1.250
SubnetMask: 255.255.255.0
gatewayIP: 192.168.1.1
Signal strength (RSSI): -33 dBm
IMPROVäIMPROVhttp://192.168.1.250Establishing unsecured connection with: svr32.supla.org (port: 2015)
Connected to Supla Server
Current status: [10] Register in progress
Device registered (activity timeout 120 s, server version: 18, server min version: 1)
Current status: [17] Registered and ready
Changing activity timeout to 30
Activity timeout set to 30 s
Wrote 7 bytes to storage at 0
Commit

Widać tu przyznanie adresu IP w sieci lokalnej (na przykładzie - 192.168.1.250 ) oraz prawidłową rejestrację w Supla Cloud.
W Supla Cloud zobaczymy nowe urządzenie dodane na liście urządzeń (UWAGA WIDOK MUSI BYĆ NA URZĄDZENIA, a nie na KANAŁY - bo nasze urządzenie nie ma jeszcze żadnego kanału!)
registration

konfiguracja działającego modułu

Dalszą konfigurację modułu możemy prowadzić już z poziomu komputera, przez adres WWW GUI w sieci lokalnej. Dla naszego przykładu http://192.168.1.250/
Screenshot_20220911_152315_com.duckduckgo.mobile.android

(jeśli nie zmienialiśmy - to domyślnie użytkownik i hasło to admin pass do otwarcia tej strony, o ile przy pierwszym otwarciu w trybie Config nie będzie o to pytał - to później zacznie)

Po pierwsze wchodzimy w konfigurację Ustawienia Urządzenia > Konfiguracja
config
Dla modułu ESP01(s) z tą płytką przekaźnika - jest bardzo ważne, by skasować ustawienie Przycisk na GPIO0 - ma być WYŁĄCZ
Możemy też zmienić ustawienie LED na GPIO2 - będzie nam diodka sygnalizowała stan pracy układu i rejestracji do sieci WiFi i Supla Cloud.

Nie zapominajmy o naciśnięciu przycisku ZAPISZ !

Wybieramy Ustawienia Urządzeniai Przekaźniki
Screenshot_20220911_152315_com.duckduckgo.mobile.android
W konfiguracji przekaźników - już jest jeden włączony (i tak możemy zostawić) - ale nie ma przypisanego nr portu GPIO!
Moduł ESP01 ma tylko 4 wyprowadzone GPIO:
esp01gpio

  • GPIO0 (na którym jest przekaźnik sterowany)
  • GPIO1 (serial TX UART)
  • GPIO2 (wyprowadzony, a równocześnie pod tym pinem jest niebieska diodka na płytce, koło anteny wifi)
  • GPIO3 (serial RX UART)

Dla modułu przekaźnikowego z tego przykładu - ustawiamy tu GPIO0 i klikamy ZAPISZ
Screenshot_20220911_152320_com.duckduckgo.mobile.android

Podczas (re)startu modułu linia GPIO0 przez chwilę zmienia swój stan, co daje niekontrolowane kliknięcie przekaźnikiem.
Jeśli ci to przeszkadza - trzeba płytkę zmodyfikować, przecinając ścieżkę idącą do GPIO0, i podłączyć ją kabelkiem do pinu GPIO3 - to jedyny pin w tym module, który nie zmienia stanu podczas bootowania ESP !
relay

Gdy zapiszemy ustawienia, i zrestartujemy moduł - teraz w naszym Supla Cloud (oraz aplikacji na smarfonie!) pojawi się nowe urządzenie:
registration2

uruchomienie prawdziwego włącznika

W tym momencie możemy przełożyć nasz moduł ESP01 do płytki z przekaźnikiem, podłączyć do 2pinowej zielonej kostki 5V (Vcc 5v czerwony, GND - masa czarny) i go zasilić - powinna niebieska diodka koło antenki pomigać i zgasnąć
esp01_relay2

jeśli chcemy, by diodka statusu - w stanie normalnym - świeciła się światłem ciągłym, a nie gasła - wystarczy że na stronie WWW GUI > Konfiguracja, tam gdzie ustawialiśmy GPIO diody LED - wybierzemy "Załączany stanem: HIGH" zamiast LOW.

Nasz moduł jest gotowy, działa, powinien przełączać przekaźnik (i odpowiednio zwierać i rozwierać styki na 3pinowej kostce zielonej).

Aby nie mieć bałaganu w Supla Cloud - proponuje przez WWW Gui urządzenia zmienić jego nazwę Nazwa modułu z domyślnej Gui Generic - na coś opisującego czym ten moduł jest na prawdę, np "włącznik lampki na biurku" czy coś w tym stylu ;)

Oczywiście ten moduł - w tym wykonaniu, potrzebującym 5V z jakiegoś USB - ma ograniczone zastosowanie - ale już możemy czymś sterować!