Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

wtorek, 22 marca 2011

ESP8266 WiFi: Wstęp


Autor: tmf
Redakcja: Dondu



ESP8266 - Moduł WiFi do mikrokontrolerów i nie tylko (AVR, ARM, XMega, Pic, STM, itp.)


Artykuł jest częścią cyklu: Moduły WiFi

Do niedawna każda rozmowa o wykorzystaniu WiFi i mikrokontrolera kończyła się tak:

WiFi i mikrokontroler? Hmm, to musi być drogie i skomplikowane!


Ale Chińczycy przekonali nas, że wcale tak być nie musi. Jakiś czas temu wypuścili tani moduł ESP8266 pełniący rolę łącznika z siecią bezprzewodową. Jest to kompletny moduł, który wymaga tylko podłączenia do mikrokontrolera przy pomocy interfejsu RS232-TTL lub SPI i już możemy korzystać z dostępu do sieci WiFi!

Ile ta przyjemność kosztuje?  2$ - 3$ w  zależności od wersji modułu.

Prostota podłączenia, niska cena, to wszystko powoduje, że WiFi stało się dostępne dla hobbystów i możemy je szeroko wykorzystywać w naszych projektach. Warto się więc nieco bliżej przypatrzeć temu modułowi.

Gdzie go kupić w dobrej cenie?

Jesteś wstępnie zainteresowany WiFi, tylko nie wiesz, gdzie go kupić? Obecnie jest on dostępny w wielu sklepach internetowych, a jego popularność stale rośnie, niewykluczone więc, że będzie także w twoim ulubionym „sklepie za rogiem”™.

W Polce można go kupić za około 25 zł (+koszty wysyłki). Jest to sporo, ale jeśli zależy ci na czasie, to jest to jedyna możliwość szybkiego zakupu. Niestety podatki i koszty prowadzenia działalności w Polsce nie ułatwiają życia hobbystom, stąd wysokie ceny.

Inna opcja to zakup na AliExpress lub eBay-u. Tu ceny są niskie (na poziomie 2-3$), lecz musimy się liczyć z czasem dostawy rzędu od 7 do 30 dni. Ale za to dostawa jest gratis!

W praktyce może nas spotkać przykra niespodzianka w postaci dodatkowych kosztów związanych z cłem i VATem, lecz jeśli zakup nie jest duży, najczęściej tego typu problemy nas ominą. Przytoczę więc informacje celne:

Z zastrzeżeniem art. 24 zwolnione z należności celnych przywozowych są przesyłki zawierające towary o niewielkiej wartości wysyłane bezpośrednio z państwa trzeciego do odbiorcy znajdującego się we Wspólnocie.

Do celów ust. 1 „towary o niewielkiej wartości” oznaczają towary, których rzeczywista wartość nie przekracza 150 EUR na przesyłkę.

oraz podatkowe dot. VAT:

Zwalnia się od podatku import towarów umieszczonych w przesyłkach wysyłanych z terytorium państwa trzeciego bezpośrednio do odbiorcy przebywającego na terytorium kraju, pod warunkiem że łączna wartość towarów w przesyłce nie przekracza kwoty wyrażonej w złotych odpowiadającej równowartości 22 euro.

Jeżeli zamawiasz towary w jednej przesyłce o znacznej wartości sprawdź aktualnie obowiązujące kwoty zwolnień.

Na zachętę dodam, że zazwyczaj czas dostawy jest znacznie krótszy i zdarzyło mi się otrzymać przesyłki wysłane z Chin już po paru dniach. Warto przed zakupem poczytać opinie o sprzedającym i sprawdzić ile układów sprzedał. Czasami warto dopłacić parę centów, ale kupić u pewnego sprzedawcy (co najmniej kilkaset pozytywnych komentarzy i wysokie oceny powyżej 95%) niż ryzykować.





Typy modułów

Przed zakupem musimy sobie odpowiedzieć na kilka ważnych pytań dotyczących typu modułu, który kupimy. Warto pamiętać, że niezależnie od oznaczeń, wszystkie moduły ESP8266 zawierają dokładnie ten sam chipset, lecz różnią się wielkością, typem wyprowadzeń, ich ilością i innymi szczegółami. Warto przed zakupem przemyśleć czego oczekujemy, żeby uniknąć sytuacji, gdy kupimy moduł z anteną PCB, a potem okaże się, że jego zasięg jest niewystarczający.

Moduł do podłączenia do PC


Moduł w wersji DIL – wszystkie sygnały wyprowadzone są w postaci goldpinów, o rozstawie pasującym do płytki stykowej. Do tego na module dostępny jest konwerter RS232-TTL-USB, dzięki czemu moduł możemy podłączyć bezpośrednio do komputera. Jest to wygodne, jeśli moduł wykorzystujemy jako wypasiony mikrokontroler z opcją WiFi i chcemy pisać programy dla niego bezpośrednio. Moduł taki nie nadaje się do podłączenia do mikrokontrolera. Cena wynosi ok. $9.



ESP8266 - Moduł z konwerterem USB-RS232TTL
Moduł z konwerterem USB-RS232TTL

Gdy rozmiar jest ważny


Dla osób chcących kupić gotowy moduł zawierający wszystko, co potrzebne do pracy, godne polecenia są moduły z antena drukowaną, umieszczoną na PCB. Rozwiązanie to gwarantuje małe wymiary modułu, jednocześnie moduł zawiera wszystko, co potrzebne, aby nawiązać połączenie bezprzewodowe. Oczywiście jak zawsze coś za coś. Anteny na PCB są małe, ale co gorsze, w pobliżu mogą się znajdować inne elementy jeszcze bardziej pogarszające nadawanie i odbiór.


ESP8266 - Moduł z anteną na PCB
Moduł z anteną na PCB
Pamiętajmy, że wykorzystując tego typu moduły musimy zapewnić, aby w pobliżu anteny nie było dużych pól masy, ekranów, większych elementów elektronicznych, które mogą tłumić sygnał. Tego typu moduły nie mogą być umieszczone w metalowych obudowach. Musimy pamiętać, że nawet, jeśli spełnimy te wszystkie wymagania to zasięg modułu nie będzie duży.

Moduł z gniazdem antenowym i mikro anteną


Dla użytkowników, dla których ważny jest zasięg WiFi niezwykle ważne jest posiadanie na module gniazda dla anteny. Warto pamiętać, że anteny w postaci nadruku na PCB nie umożliwiają uzyskania dużego zasięgu i to z kilku powodów. Po pierwsze sprawność takiej anteny nie jest duża, po drugie – moduł zwykle lutujemy do płytki, umieszczamy w obudowie, co pogarsza warunki pracy anteny.

Jeśli na module mamy gniazdko do anteny zewnętrznej, to zawsze możemy wykorzystać lepszą antenę, wyprowadzić ją na zewnątrz, z dala od ekranów i elementów mogących zakłócić jej pracę.

Dlaczego po prostu samemu nie można kupić gniazdka i je wlutować? Pamiętajmy, że WiFi działa w paśmie 2,4 GHz, przy tej częstotliwości niezwykle ważne są efekty falowe, a każde połączenie to duża strata sygnału. Stąd też lepiej, jeśli producent umieścił gniazdo antenowe, zazwyczaj umieścił także inne elementy umożliwiające dopasowanie torów wyjściowych modułu do właściwości falowych gniazda i ścieżek łączących moduł z antena.


ESP8266 - Moduł z gniazdem antenowym oraz mikro anteną Rainsun AN9520
Moduł z gniazdem antenowym oraz mikro anteną Rainsun 

Mikro antena zastosowana w module to AN9520 o następujących parametrach:


Mikro antena Rainsun AN9520 - parametry.

Mikro antena: AN9520 (kopia)

Na module mogą znajdować się różne wersje gniazda antenowego. Zazwyczaj nie jest to gniazdo SMA (SubMiniature version A) ze względu na ograniczoną dostępność miejsca. Stąd też często wykorzystywane jest złącze MMCX (micro-miniature coaxial), a do modułu dodawany jest kabelek-przejściówka na zwykłe złącze SMA.


Konwerter na gniazdo SMA
Konwerter na gniazdo SMA


Goldpiny, czy pola lutownicze?


Kolejny istotny wybór, jakiego musimy dokonać przy zakupie to decyzja o typie wyprowadzeń modułu. Do dyspozycji mamy dwa rozwiązania – goldpiny lub pola lutownicze. Goldpiny (listwy kołkowe) (zazwyczaj) umożliwiają łatwe łączenie modułu z płytką stykową, ewentualnie możemy je wykorzystać do przylutowania modułu we własnym układzie.

Jest to nieco mniej wygodne rozwiązanie, ale z „dziwnych” powodów część początkujących elektroników uwielbia elementy przewlekane, twierdząc, że łatwiej się je lutuje. Nie jest to prawdą, ale nie będziemy tego tu roztrząsać. Goldpiny mogą być wyprowadzone po obu stronach modułu (wtedy łatwo jest je wsunąć w płytkę stykową) lub po jednej stronie, najczęściej w postaci listwy dwurzędowej – w takiej sytuacji o wciśnięciu modułu w płytkę stykową możemy zapomnieć.


ESP8266 - Moduł ze złączem DIL
Moduł ze złączem DIL


Drugą opcją jest moduł z polami do lutowania. Moduł taki „nakłada” się na płytkę PCB, do której go chcemy przylutować, a na płytce-matce musimy umieścić odpowiednie pola lutownicze. Podstawową zaletą takiego połączenia jest to, że goldpiny nie zajmują dodatkowego miejsca na płytce, w efekcie całość wychodzi po prostu mniejsza.


ESP8266 - Moduł z polami lutowniczymi
Moduł z polami lutowniczymi

Jest jeszcze jedna istotna zaleta wykorzystania pól lutowniczych – te wersje modułu mają wyprowadzone zazwyczaj wszystkie sygnały IO (linie GPIO i ADC), natomiast moduły z goldpinami, często mają wyprowadzone tylko sygnały RS232-TTL, zasilanie i dwie linie GPIO.

Nie zawsze jest to przeszkodą, ale kupując moduł zawsze warto sprawdzić jakie sygnały mamy do dyspozycji.



Podłączenie modułu i zasilanie

Ok, mamy już moduł, czas zacząć przygodę. Moduł możemy wykorzystać na dwa sposoby:

  • połączyć go z mikrokontrolerem i wykorzystać jako zwykły moduł bezprzewodowy,
  • wykorzystać fakt, że moduł to układ SoC (system on chip), zwierający wydajny mikrokontroler, sporo RAM i FLASH, a więc możemy go programować bezpośrednio i w wielu wypadkach nie będziemy potrzebowali dodatkowego mikrokontrolera.

Tą druga możliwość omówimy później, zacznijmy na razie od typowego zastosowania – czyli modułu komunikacyjnego realizującego połączenie bezprzewodowe dla mikrokontrolera.

Zasilanie


Moduł wymaga zasilania w zakresie 3,0 - 3,6V, a średni pobierany prąd wynosi ok. 80 mA, przy czym w trakcie aktywnej pracy może wzrosnąć nawet do 200 mA. Stwarza to pewne problemy.

Przede wszystkim musimy zadbać o odpowiednią wydajność prądową zasilacza. Przy module warto też umieścić kondensator elektrolityczny o pojemności 47 - 220 µF i dodatkowo kondensator ceramiczny 100nF.

Drugi problem wynika z napięcia zasilającego – typowo 3,3V. Osoby stosujące nowoczesne mikrokontrolery (AVR, XMEGA, PIC i ARM) mogą moduł podłączyć z nimi bezpośrednio – mikrokontrolery te również zasilamy napięciem 3,3V.

Osoby wykorzystujące starsze AVRy (ATMega, ATTiny), często zasilane napięciem 5V mają dodatkowy problem – po pierwsze muszą w układzie umieścić dodatkowy stabilizator, generujący napięcie zasilania dla modułu WiFi (ew. kupić moduł zawierający już taki stabilizator), a dodatkowo musimy zbić napięcie na pinach wyjściowych (np. TxD) mikrokontrolera, łączących go z modułem WiFi.

Piny IO


Kolejną rzeczą na jaką należy zwrócić uwagę przy zakupie modułu to dostępne piny IO. Najprostsze moduły mają tylko 6 pinów, z czego część to piny zasilające i sterujące:

  • GND
  • Vcc (5V)
  • Vcc (3,3V)
  • TxD
  • RxD
  • chip enable (wybór układu)


ESP8266 - Moduł bez wyprowadzonych pinów GPIO
Moduł bez wyprowadzonych pinów GPIO

Tego typu moduły mają niewielkie rozmiary, idealnie sprawdzają się w układach, w których moduł łączymy z mikrokontrolerem sterującym – w takiej sytuacji nie potrzebujemy dodatkowych pinów IO, wystarczą nam piny RxD i TxD do realizacji komunikacji mikrokontroler-moduł. Moduły te często (np. moduł pokazany na rysunku), posiadają dodatkowo konwertery poziomów, dzięki czemu piny IO można podłączyć do systemu mikrokontrolerowego zasilanego 5V, na module bywa też stabilizator 3,3V, dzięki czemu moduł możemy zasilać napięciem 5V lub, jeśli mamy do dyspozycji, napięciem 3,3V z pominięciem wbudowanego stabilizatora.

Warto pamiętać, że moduły posiadające na pokładzie stabilizator 3,3V często na liniach TxD i RxD mają odpowiednie konwertery napięć 5V-3,3V. Natomiast na innych liniach GPIO takich konwerterów nie ma. Jeśli je chcemy wykorzystać w naszym projekcie to musimy zadbać, aby napięcie na tych pinach nigdy nie wzrosło powyżej 3,6V, co grozi uszkodzeniem modułu.

Moduły, które nie mają wyprowadzonych GPIO bezpośrednio posiadają zworkę (lub pole lutownicze), które umożliwia wejście modułu w tryb uaktualniania oprogramowania.


ESP8266 - Pola lutownicze umożliwiające upload nowego firmware i zmianę typu interfejsu
Pola lutownicze umożliwiające upload nowego firmware i zmianę typu interfejsu


Tego typu moduły mają zwykle możliwość wykorzystania innych wyjść GPIO, lecz wymaga to bezpośredniego lutowania połączeń do modułu SoC. Dlatego, jeśli planujemy wykorzystać GPIO lepiej zakupić wersję modułu, w której piny te są wyprowadzone bezpośrednio.

Pokazana poniżej wersja modułu:


ESP-8266 - Moduł z wyprowadzonymi wszystkimi pinami GPIO
Moduł z wyprowadzonymi wszystkimi pinami GPIO


posiada wyprowadzone wszystkie sygnały. W tabeli poniżej zostały one pokrótce opisane:


Sygnał Funkcja
Vcc Zasilanie modułu (3,0-3,6 V), chyba, że moduł ma na pokładzie dodatkowy stabilizator napięcia
GND Masa układu
MTMS Sygnał interfejsu szeregowego lub pin GPIO14
MTDI Sygnał interfejsu szeregowego lub pin GPIO12
MTCK Sygnał interfejsu szeregowego lub pin GPIO13
MTDO Sygnał interfejsu szeregowego lub pin GPIO15
RxD Wejście sygnału RxD – należy połączyć z wyjściem TxD mikrokontrolera
TxD Wyjście sygnału TxD – należy połączyć z wejściem RxD mikrokontrolera
REST, RSTB Sygnał zerowania układu, aktywny w stanie niskim
ADC Wejście sygnału dla 10-bitowego przetwornika ADC
CH_PD, CHIP_EN W czasie normalnej pracy powinien być w stanie wysokim, podanie stanu niskiego wymusza uśpienie układu i wejście w tryb o niskim poborze energii
GPIO0, GPIO2 Piny IO ogólnego przeznaczenia, lecz w czasie startu ich stan określa tryb pracy układu
GPIOx Piny IO ogólnego przeznaczenia, mogą być wykorzystane do komunikacji z innymi układami

W czasie resetu modułu sygnały MTDO, GPIO0 i GPIO2 pełnią specjalną funkcję:

MTDO GPIO0 GPIO2 Funkcja
1 X X Wybór interfejsu SDIO/SPI
0 0 1 Uaktualnianie firmware przez USART
0 1 1 Bootowanie z FLASH

Sygnał MTDO powinien mieć stale stan niski – powoduje to, że moduł będzie się komunikował poprzez interfejs UART, jeśli nadamy mu stan wysoki to wybrany zostanie interfejs SDIO/SPI.

Jeśli wybierzemy interfejs UART (znakomita większość przykładów go wykorzystuje), to sygnały GPIO0/2 określają skąd SoC będzie brał kod programu.

Jeśli GPIO0/2 będą w stanie wysokim to moduł zabootuje się z obecnej na nim pamięci FLASH (tą opcję powinniśmy wybrać), jeśli GPIO0 będzie miało niski poziom logiczny to moduł będzie oczekiwał nowego firmware dostarczonego przez interfejs UART.

W kolejnej części poznamy nieco więcej tajemnic układu ESP8266.

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

7 komentarzy:

  1. R E W E L A C Y J N Y !!! Artykuł - poproszę więcej i więcej, w końcu rzeczowo i na temat :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Oj nie przesadzajmy, bo się Tomek z jakością opuści :)

      Usuń
  2. Nie rozumie dlaczego wiekszosc uparla sie na korzystanie z zewnetrznego uc(?). Sam esp8266 to przeciez uc. Autorowi cyklu proponuje skupic sie na SDK esp8266 a nie na poki co pisanej (nie wiadomo jak dlugo) komunikacji AT. Przegladajac kod zrodlowy wsadu AT stwierdzam, ze dla osob, ktore beda chcialy wykorzystac esp8266 w sposob specyficzny tylko dla swojego projektu (duzo niepotrzebnych nadmiarowych komen AT), krytyczny czasowo (znowu duzo niepotrzebnych funkcji ze wzgledu na uniwersalnosc komend AT), czy wykorzystania potencjalu esp (AT nie posiada obslugi np SPI czy innych peryferiow uc) - taka komunikacja sie nie sprawdzi. Szkoda aby marnowac potencjal esp dla nauki czegos co nigdy nie dorowna aplikacji napisanej w SDK. Nawet juz LUA jest lepsza (wiecej mozlwosci) niz AT...

    OdpowiedzUsuń
    Odpowiedzi
    1. ESP8266 na dzień dzisiejszy jest w fazie rozwojowej a przy okazji jest najtańszym modułem WiFi na rynku. Z tych też powodów warto się nim interesować pod każdym kątem zarówno AT jak i SDK. Czas pokaże w jakim kierunkach moduł się rozwinie, a nie wątpię, że będzie dostępnych wiele różnych rodzajów firmware.

      Usuń
  3. Bardzo zaciekawiła mnie wiadomość o programowaniu samego układu. Będę czekał z niecierpliwością o rozszerzenie tematu!

    OdpowiedzUsuń
  4. Spokojnie, pokażę i komunikację porzez AT i zajmiemy się SDK i programowaniem modułu jako stand alone bez dodatkowego MCU. Wszystko po kolei. Każdy z trybów ma zalety i wady. Jeśli ktoś siedzi w np. Arduino i potrzebuje tylko dodać WiFi dla wymiany prostych danych to zestaw poleceń AT jest zupełnie wystarczający i nie ma sensu poznawać SDK. Ale oczywiście ESP to tak naprawdę wypasiony mikroprocesor + otoczenie i można na nim pisać naprawdę wymagające aplikację. Do wszystkiego dojdziemy, po kolei :)

    OdpowiedzUsuń
  5. Dziękuję za tak interesujący artykuł.
    Jeśli mogę to zadam pytanie dotyczące ogólnej organizacji komunikacji stosując te układy.
    Chcę zbudować siec czujników temperatury które co godzinę będą przesyłać pomiar ze wszystkich pomieszczeń w domu od piwnicy po strych do centralki. Ale też chce mieć jeszcze dwie możliwości:
    A
    możliwość uzyskania odczytów na żądanie z poziomu centralki ze wszystkich czujników
    B
    możliwość wysłania pomiaru z czujnika w niestandardowym momencie gdy temperatura zmieni się o więcej niż 3 stopnie.
    I tu zaczynają się moje wątpliwości jak to wszystko zorganizować.
    Pomysł 1
    Jak przy czujnikach ESP skonfiguruję jako klienta to co godzinę się połączy z ESP w centralce w trybie serwer i przekaże dane. Jak temperatura zmieni się o więcej niż 3 stopnie też się połączy i wyśle dane, ale co gdy chce odczytać pomiary na żądanie z centralki?
    Połączenie przecież zestawia klient a w centralce jest serwer.
    Pomysł 2
    ESP przy czujnikach konfiguruję jako serwery. W centralce jest ESP tryb klient i co godzinę pobiera pomiar z czujników, a jak jest dodatkowa potrzeba zebrania wyników to pobiera i ma.
    Tylko jak przekazać informacje na żądanie czujnika że temperatura zmieniła się o więcej niż 3 stopnie. Czy odpytywać się częściej np co 1 min. To mi przypomina prace master/slave i jakoś czuję że w przypadku zastosowania tcpip to tak się nie powinno robić. Ale może się mylę.
    Pomysł 3
    A może ESP powinny być skonfigurowane w trym klient i serwer jednocześnie. Tak też się da. I wtedy jak czujnik chce wysłać pomiar to się podłącza do serwera w centralce i wysyła. Może to zrobić co godzinę jak też gdy zmieni się temperatura o 3 stopnie. Jak centralka chce zebrać pomiary w niestandardowym momencie to podłącza się kolejno do czujników swoim klientem i pobiera pomiar.
    Czy dobrze myślę że stosując tcpip to tak należy pracować?
    Proszę bardziej doświadczonych Kolegów i garstkę informacji na ten temat.
    Robert

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.