Autor: tmf
Redakcja: Dondu
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.
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.
Moduł z anteną na PCB |
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.
Moduł z gniazdem antenowym oraz mikro anteną Rainsun |
Mikro antena zastosowana w module to AN9520 o następujących parametrach:
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 |
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ć.
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.
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)
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.
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:
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.
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ńOj nie przesadzajmy, bo się Tomek z jakością opuści :)
Usuń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ń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ńBardzo zaciekawiła mnie wiadomość o programowaniu samego układu. Będę czekał z niecierpliwością o rozszerzenie tematu!
OdpowiedzUsuń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ńDziękuję za tak interesujący artykuł.
OdpowiedzUsuń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