W Internecie spotkałem wiele opisów i przykładów sterowania urządzeniami poprzez ESP-01. Ten najmniejszy z modułów zawierających ESP8266 posiada cztery uniwersalne wejścia/wyjścia. Świadomie piszę cztery, gdyż na wielu forach o tym układzie pisze się, że posiada piny Rx,Tx,GPIO0 i GPIO2. W rzeczywistości mapy:
GPIO0, GPIO1 (Tx0), GPIO2 (Tx1) i GPIO3 (Rx).
Chciałbym przedstawić część sterującą przekaźnikami (lub innymi odbiornikami) z wykorzystaniem tego układu. Wiele osób się zdziwi – po co osobny temat na sterowanie przekaźnikiem przez GPIO? Otóż sterowanie urządzeniami z ESP-01 wcale nie jest takie proste z dwóch powodów:
1) piny GPIO0 i GPIO2 muszą być na poziomie wysokim podczas startu procesora (spotkałem także informacje, że dotyczy to także GPIO1 (Tx0)),
2) na wielu liniach procesor wyrzuca „śmieci” podczas restartu.
Przykładowe układy prezentowane w Internecie sterują diodą LED. Takie sterowanie jest proste zarówno w przypadku, gdy podłączymy diodę do „plusa” czy „minusa” ze względu na duży spadek napięcia na LED – układ rozpoznaje stan wysoki dzięki wbudowanemu rezystorowi podciągającemu. Podłączenie tranzystora już nie jest takie proste: 0,55V spadku napięcia zostanie wykryte jako „0”. Można zastosować duży rezystor w bazie tranzystora, jednak to ogranicza możliwości sterowania – zmniejsza prąd kolektora. Wszystko to jednak jest do opanowania. Znacznie gorszym problemem są „śmieci” na wyprowadzeniach układu podczas restartu. Można próbować rozwiązywać problem poprzez opóźnienie układu wykonawczego przy podłączeniu zasilania - nie rozwiązuje to jednak problemu przypadkowego restartu podczas pracy.
Oto co wysyła ESP-01 podczas swojego startu:
Cztery wykresy – od góry Rx (GPIO3), GPIO0, Tx(GPIO1) i GPIO2 pokazują co się dzieje na liniach podczas restartu układu jeszcze przed rozpoczęciem programu!
Na liniach GPIO1 i GPIO2 widać przebiegi:
ESP nadaje informacje statusowe z prędkością ok. 57 kbit/s. Nie wiem po co nadaje to samo na obu liniach. Dziwny jest także sygnał na GPIO0 – nie wiem skąd się wziął – ma częstotliwość akustyczną (ok. 3kHz). Jak widać jedyną „spokojną” linią jest GPIO3 (Rx), która jest jednak wewnętrznie podciągana do „+” (orientacyjnie 47k-100k).
Nie wspomniałem jeszcze, dlaczego eliminacja „śmieci” jest taka ważna – otóż przy sterowaniu lampki zwykle nie będzie nam przeszkadzało mignięcie podczas startu. Jeśli jednak przekaźnik będzie sterował bramą – to taki impuls otworzy lub zamknie nam bramę!
Poniżej znajduje się schemat części sterującej:

Edit
Dzięki rezystorowi R4, napięcie na bazie T4 jest bardzo małe (jak już wspomniałem przy starcie Rx jest podciągane do „+”) – tranzystor nie przewodzi. Blokuje to także działanie tranzystorów sterujących odbiornikami T1-T3 – „śmieci” nie spowodują wysterowania przekaźników podłączonych do P1-P3. Dodatkowo nieprzewodzące tranzystory T1-T3 nie zmieniają poziomów GPIO0 i GPIO2 co jak pisałem jest istotne podczas startu procesora.
Nasz program (proponuję wykorzystanie ARDUINO IDE z rozszerzeniem do ESP8266) może schematycznie wyglądać tak:
Jak widać najpierw ustawiamy typy portów, ich poziom, a na samym końcu uruchamiamy T4 (digitalWrite(STEROWANIE,HIGH)). Później możemy już sterować poszczególnymi tranzystorami i przekaźnikami. Tranzystory sterujące mogą być w zasadzie dowolne, należy jednak pamiętać, że przez T4 płynie prąd łączny pozostałych tranzystorów. Ja użyłem tranzystory BC337-25, które mają prąd kolektora 0.8A, co wystarczy na wysterowanie całej serii przekaźników w przypadku wyboru np. układu ESP-12.
Jak już wspomniałem, do pracy z układami ESP polecam ARDUINO IDE z rozszerzeniem do ESP8266. Razem z biblioteką zainstaluje nam się cała masa przykładów w tym istotne przy sterowaniu – klient WiFi i Serwer WWW.
Budowa serwera WWW do sterowania to raczej ciekawostka – nadaje się do sterowania pojedynczego układu (wymagane jest stałe i znane IP wewnętrzne modułu, problematyczne przekierowanie na routerze każdego ESP przy dostępie z zewnątrz, kwestie bezpieczeństwa). Dla realizacji inteligentnego domu z wieloma modułami ESP sugeruję budowę standardowego serwera typu PC z Linuxem (bądź raspberry pi), który będzie „sercem”, a moduły ESP jako klienci odpytują się co określony czas np. co 0.5s czy jest coś do zrobienia.
Mam nadzieję, że schemat się przyda wszystkim, którzy myślą o sterowaniu urządzeniami poprzez WiFi.
Dodano 07.11.2016
Wybudowałem kolejny układ, tym razem na ESP-12 i muszę potwierdzić, że Tx0 (GPIO1) nie może być podczas startu na niskim poziomie. Dla osób, które borykają się z problemem "śmieci" na Tx0 podłączonego do innego UARTa polecam moduł ESP-12. Dzięki dodatkowym wyprowadzeniom można na nim użyć instrukcji Serial.swap(); która "przerzuca" Rx0 i Tx0 na inne piny - GPIO13 i GPIO15. Standardowe piny Rx0 i Tx0 możemy używać do programowania układu, a do komunikacji z innymi modułami wystarczy przerzucenie UARTa na GPIO13 i GPIO15.
GPIO0, GPIO1 (Tx0), GPIO2 (Tx1) i GPIO3 (Rx).
Chciałbym przedstawić część sterującą przekaźnikami (lub innymi odbiornikami) z wykorzystaniem tego układu. Wiele osób się zdziwi – po co osobny temat na sterowanie przekaźnikiem przez GPIO? Otóż sterowanie urządzeniami z ESP-01 wcale nie jest takie proste z dwóch powodów:
1) piny GPIO0 i GPIO2 muszą być na poziomie wysokim podczas startu procesora (spotkałem także informacje, że dotyczy to także GPIO1 (Tx0)),
2) na wielu liniach procesor wyrzuca „śmieci” podczas restartu.
Przykładowe układy prezentowane w Internecie sterują diodą LED. Takie sterowanie jest proste zarówno w przypadku, gdy podłączymy diodę do „plusa” czy „minusa” ze względu na duży spadek napięcia na LED – układ rozpoznaje stan wysoki dzięki wbudowanemu rezystorowi podciągającemu. Podłączenie tranzystora już nie jest takie proste: 0,55V spadku napięcia zostanie wykryte jako „0”. Można zastosować duży rezystor w bazie tranzystora, jednak to ogranicza możliwości sterowania – zmniejsza prąd kolektora. Wszystko to jednak jest do opanowania. Znacznie gorszym problemem są „śmieci” na wyprowadzeniach układu podczas restartu. Można próbować rozwiązywać problem poprzez opóźnienie układu wykonawczego przy podłączeniu zasilania - nie rozwiązuje to jednak problemu przypadkowego restartu podczas pracy.
Oto co wysyła ESP-01 podczas swojego startu:

Cztery wykresy – od góry Rx (GPIO3), GPIO0, Tx(GPIO1) i GPIO2 pokazują co się dzieje na liniach podczas restartu układu jeszcze przed rozpoczęciem programu!
Na liniach GPIO1 i GPIO2 widać przebiegi:

ESP nadaje informacje statusowe z prędkością ok. 57 kbit/s. Nie wiem po co nadaje to samo na obu liniach. Dziwny jest także sygnał na GPIO0 – nie wiem skąd się wziął – ma częstotliwość akustyczną (ok. 3kHz). Jak widać jedyną „spokojną” linią jest GPIO3 (Rx), która jest jednak wewnętrznie podciągana do „+” (orientacyjnie 47k-100k).
Nie wspomniałem jeszcze, dlaczego eliminacja „śmieci” jest taka ważna – otóż przy sterowaniu lampki zwykle nie będzie nam przeszkadzało mignięcie podczas startu. Jeśli jednak przekaźnik będzie sterował bramą – to taki impuls otworzy lub zamknie nam bramę!
Poniżej znajduje się schemat części sterującej:

Edit
Dzięki rezystorowi R4, napięcie na bazie T4 jest bardzo małe (jak już wspomniałem przy starcie Rx jest podciągane do „+”) – tranzystor nie przewodzi. Blokuje to także działanie tranzystorów sterujących odbiornikami T1-T3 – „śmieci” nie spowodują wysterowania przekaźników podłączonych do P1-P3. Dodatkowo nieprzewodzące tranzystory T1-T3 nie zmieniają poziomów GPIO0 i GPIO2 co jak pisałem jest istotne podczas startu procesora.
Nasz program (proponuję wykorzystanie ARDUINO IDE z rozszerzeniem do ESP8266) może schematycznie wyglądać tak:
Code: c
Jak widać najpierw ustawiamy typy portów, ich poziom, a na samym końcu uruchamiamy T4 (digitalWrite(STEROWANIE,HIGH)). Później możemy już sterować poszczególnymi tranzystorami i przekaźnikami. Tranzystory sterujące mogą być w zasadzie dowolne, należy jednak pamiętać, że przez T4 płynie prąd łączny pozostałych tranzystorów. Ja użyłem tranzystory BC337-25, które mają prąd kolektora 0.8A, co wystarczy na wysterowanie całej serii przekaźników w przypadku wyboru np. układu ESP-12.
Jak już wspomniałem, do pracy z układami ESP polecam ARDUINO IDE z rozszerzeniem do ESP8266. Razem z biblioteką zainstaluje nam się cała masa przykładów w tym istotne przy sterowaniu – klient WiFi i Serwer WWW.
Budowa serwera WWW do sterowania to raczej ciekawostka – nadaje się do sterowania pojedynczego układu (wymagane jest stałe i znane IP wewnętrzne modułu, problematyczne przekierowanie na routerze każdego ESP przy dostępie z zewnątrz, kwestie bezpieczeństwa). Dla realizacji inteligentnego domu z wieloma modułami ESP sugeruję budowę standardowego serwera typu PC z Linuxem (bądź raspberry pi), który będzie „sercem”, a moduły ESP jako klienci odpytują się co określony czas np. co 0.5s czy jest coś do zrobienia.
Mam nadzieję, że schemat się przyda wszystkim, którzy myślą o sterowaniu urządzeniami poprzez WiFi.
Dodano 07.11.2016
Wybudowałem kolejny układ, tym razem na ESP-12 i muszę potwierdzić, że Tx0 (GPIO1) nie może być podczas startu na niskim poziomie. Dla osób, które borykają się z problemem "śmieci" na Tx0 podłączonego do innego UARTa polecam moduł ESP-12. Dzięki dodatkowym wyprowadzeniom można na nim użyć instrukcji Serial.swap(); która "przerzuca" Rx0 i Tx0 na inne piny - GPIO13 i GPIO15. Standardowe piny Rx0 i Tx0 możemy używać do programowania układu, a do komunikacji z innymi modułami wystarczy przerzucenie UARTa na GPIO13 i GPIO15.
Cool? Ranking DIY