Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterowanie poprzez ESP-01 (ESP8266)

krzbor 18 Jul 2016 20:39 19407 22
Nazwa.pl
  • 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)



    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
    Log in, to see the code


    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
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    krzbor
    Level 25  
    Offline 
    krzbor wrote 1062 posts with rating 568, helped 21 times. Been with us since 2004 year.
  • Nazwa.pl
  • #2
    szymon122
    Level 38  
    krzbor wrote:
    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
    gosztekseba
    Level 31  
    szymon122 wrote:

    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/topic3191716.html
  • #4
    krzbor
    Level 25  
    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ę).
  • Nazwa.pl
  • #6
    maly_13
    Level 19  
    Jest fajny nowy firmware do esp nazywa się ESPeasy ma wszystko w sobie.
  • #7
    mariomario
    Level 18  
    maly_13 wrote:
    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
    krzbor
    Level 25  
    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).
  • #11
    piterek-23
    Level 33  
    oskar777 wrote:
    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
    electro
    Level 18  
    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?
  • #13
    oskar777

    Level 26  
    Tak, pod arduino na esp mam bardzo prosty webserwer i wysyłam dane po serialu, wprawdzie testowo by różne parametry sprawdzać ale da się spokojnie.
  • #14
    gosztekseba
    Level 31  
    electro wrote:
    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
    krzbor
    Level 25  
    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
    zolwik_rct
    Level 11  
    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
    krzbor
    Level 25  
    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.
  • #18
    MaxKleiner
    Level 12  
    Próbował ktoś zrobic uklad z 4ch pod esp8266-01s ?
  • #19
    krzbor
    Level 25  
    Lepiej użyć ESP-12. Niewielka różnica ceny. Jeśli zależy CI na rastrze 2,54 wystarczy adapter - zdjęcie w moim innym poście: Link
  • #20
    MaxKleiner
    Level 12  
    Właśnie mi zależy na tym esp01 bo mam ich więcej niż esp12f.
  • #21
    krzbor
    Level 25  
    Ja zostawiłem sobie ESP01 do sterowania 1-2 urządzeniami lub do komunikacji po UART. Obecnie staram się unikać tych układów - czytałem, że potrafią siać zakłócenia (brak ekranu). Czytałem też o tym, że niektóre flash w ESP01 są bardzo niskiej jakości.
  • #22
    MaxKleiner
    Level 12  
    Do sterowania swiatlem te zakłócenia nie przeszkadzają, mam tych esp01/01s kilka dziesiąt i nie trafiłem na zła jakość czy wadę.
  • #23
    krzbor
    Level 25  
    Jeśli ma to być sterowanie światłem, to krótki błysk przy restarcie nie przeszkadza (takie restarty się raczej nie zdarzają). Nie testowałem, ale powinno zadziałać - sterujemy bazą tranzystora poprzez rezystor i diodę LED. Wiem, że to trochę nietypowe, ale czerwone diody LED w bezbarwnej obudowie (zwłaszcza tzw. "jasne") świecą dobrze już przy prądzie 1-2mA. Taki prąd należy ustawić dobierając rezystor ograniczający prąd (powinno to być ok. 1k). Taka dioda ma dwie funkcje - służy jako sygnalizacja załączenia, ale jej głównym zadaniem jest podniesienie napięcia na wejściu ESP. Napięcie to powinno być wówczas 1,4(dioda) + 0,6 (złącze BE)=2V. Będzie to rozpoznane jako logiczne "1" przy starcie. Zamiast LED można dać 2-3 diody 1N4148 połączone szeregowo. Można wówczas zwiększyć wartość rezystora np. do 3,3k.
    Zapomniałem dodać - w ten sposób wysterujemy 4 urządzenia, a nie 3.