Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie poprzez ESP-01 (ESP8266)

krzbor 18 Lip 2016 20:39 10647 16
  • 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:
    Sterowanie poprzez ESP-01 (ESP8266)
    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:
    Sterowanie poprzez ESP-01 (ESP8266)
    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:


    Sterowanie poprzez ESP-01 (ESP8266)



    Edytuj

    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:


    Kod: c
    Zaloguj się, aby zobaczyć kod


    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.


    Fajne!
  • Fibaro
  • #2 18 Lip 2016 22:07
    szymon122
    Poziom 36  

    krzbor napisał:
    GPIO0, GPIO1 (Tx0), GPIO2 (Tx1) i GPIO3 (Rx)

    Czyli mamy do dyspozycji dwa oddzielne UART?

    Korzystałeś może z ESP-12? Mam dwie takie sztuki ale leżą nieużywane, ponieważ nie umiem ich zaprogramować, komunikacje udało mi się nawiązać ale na większość komend (np AT+GMR) odpowiada ERROR, na zmianę prędkości baud odpowiada jedynie OK.
    W jakiej kolejności zwierać piny aby wejść w tryb programowania? Czy można w go wejść bez wyłączania zasilania czy trzeba wyłączyć, zewrzeć i włączyć? Po uruchomieniu można od razu programować czy trzeba zrobić reset?

  • #3 18 Lip 2016 22:17
    gosztekseba
    Poziom 31  

    szymon122 napisał:

    W jakiej kolejności zwierać piny aby wejść w tryb programowania? Czy można w go wejść bez wyłączania zasilania czy trzeba wyłączyć, zewrzeć i włączyć? Po uruchomieniu można od razu programować czy trzeba zrobić reset?


    Mój temat w którym masz napisane jak należy podłączyć i rozwiązanie problemu w razie braku flashowania. Ja potrzebowałem zrobić z ESP most Wifi <-> UART do sterowania własnym sterownikiem PLC poprzez Wifi. Sterownik zostanie może pokazany za jakiś czas wraz z opisem komunikacji.

    https://www.elektroda.pl/rtvforum/viewtopic.php?t=3191716&highlight=

  • Fibaro
  • #4 18 Lip 2016 22:26
    krzbor
    Poziom 14  

    Trochę wyjaśnień: ESP dostarczany jest ze swoim oprogramowaniem - zestawem komend AT. W Internecie znajdziesz podstawowe zalecenie - wgrać nowe oprogramowanie - firmware. Ja jednak sugeruję coś innego - zapoznaj się z ARDUINO IDE i po instalacji pobierz moduł do obsługi ESP8266. Dzięki takiemu zestawowi sam zaprogramujesz ESP.
    Wracając do Twojego pytania - ESP posiada jeden pełny UART (Rx0 i Tx0) i jeden niepełny Tx1 (tylko nadawanie) - jest to często używane jako debug (na konsolę).

  • #5 19 Lip 2016 02:04
    piterek-23
    Poziom 30  

    Opis po prostu BOMBA-tego mi brakowało...
    Dziękuję :)

  • #6 19 Lip 2016 06:31
    maly_13
    Poziom 18  

    Jest fajny nowy firmware do esp nazywa się ESPeasy ma wszystko w sobie.

  • Fibaro
  • #7 19 Lip 2016 10:47
    mariomario
    Poziom 18  

    maly_13 napisał:
    Jest fajny nowy firmware do esp nazywa się ESPeasy ma wszystko w sobie.


    A czy mógłbyś coś więcej o tym firmware napisać ? Jak wgrać, w czym jest lepszy itp.

  • #8 19 Lip 2016 11:06
    krzbor
    Poziom 14  

    Standardowy firmware obsługuje komendy AT. Własny firmware umożliwia dowolne sterowanie procesorem. Widzę, że jest sporo pytań odnośnie samego esp. Proponuję wpisać z google trzy wyrazy:
    arduino ide esp8266
    wyświetlą się informacje o rozszerzeniu esp8266 dla Arduino, opisy instalacji i programowania (w tym także po polsku).

  • #9 19 Lip 2016 12:02
    @Kamil
    Poziom 23  

    Jeśli chodzi o programowanie ESP-12 jak i inne na ESP8266 w Arduino IDE to jest to bardzo proste.

  • #10 19 Lip 2016 13:27
    oskar777

    Poziom 24  
  • #11 19 Lip 2016 13:29
    piterek-23
    Poziom 30  

    oskar777 napisał:
    Wie czy to coś działa pod esp07 i jak tym sterować pinami?

    ESP-07 to w sumie ESP-12
    Spróbuj wgrać wszystko jak na ESP-12 i powinno ruszyć.

  • #12 20 Lip 2016 22:40
    electro
    Poziom 17  

    Takie szybkie pytanie, czy na esp8266 można zrobić serwer web który zamiast zapalać led będzie mógł wysyłać określone komendy po uart do innego mikrokontrolera? Tak żeby można było zrobić zdalne sterowanie po wifi?

  • #14 22 Lip 2016 10:56
    gosztekseba
    Poziom 31  

    electro napisał:
    Takie szybkie pytanie, czy na esp8266 można zrobić serwer web który zamiast zapalać led będzie mógł wysyłać określone komendy po uart do innego mikrokontrolera? Tak żeby można było zrobić zdalne sterowanie po wifi?


    Da się zarówno przez www jak i po telnecie.

  • #15 22 Lip 2016 12:32
    krzbor
    Poziom 14  

    Oczywiście, że można. Jest to jedno z podstawowych zastosowań ESP. Tu także niestety trzeba pamiętać o "śmieciach", które ESP wyśle po linii Tx podczas swojego startu.

  • #16 13 Wrz 2016 10:04
    zolwik_rct
    Poziom 10  

    możesz wrzucić oscyloskop po zastosowaniu układu? rozumiem, że udało Ci się całkowicie wyeliminować śmieci, jeśli tak to świetna robota

  • #17 13 Wrz 2016 10:50
    krzbor
    Poziom 14  

    Przebiegi, które pokazałem, są z analizatora stanów logicznych, nie oscyloskopu. Jak jednak pisałem - jeśli T4 nie przewodzi (a dba o to R4), T1 do T3 nie mają jak przewodzić - mają odciętą masę. Ważne, aby na kolektorach T1-T3 panowały napięcia nie mniejsze niż zasilanie ESP-01 (oczywiście dla nieprzewodzącego tranzystora). Jeśli zatem podłączymy tam przekaźnik do zasilania, to ten warunek jest spełniony. Ja akurat podłączałem przekaźniki 12V - stąd bardzo odpowiadał mi układ OC.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME