ESP8266 – tanie i łatwe w użyciu WiFi do Arduino i bez Arduino

Hit! Czegoś takiego mi było trzeba. W bardzo umiarkowanej cenie można kupić niewielki układ, który nie tylko połączy Arduino z siecią bezprzewodową (także w standardzie „n”), ale także w wielu przypadkach będzie pracować bez Arduino. Poznajcie ESP8266, układ który wprowadzi sporo zamieszania w „Interncie rzeczy”.

ESP8266

 

Parametry układu imponują (jak za tę cenę i na tę wielkość). Co więc przydatnego dostajemy? Na początek – całkiem szybki procesor (RISC, 80MHz) i wcale niemało pamięci. Przede wszystkim jednak wsparcie dla WiFi, a konkretnie dla protokołów 802.11 b/g/n, w tym zarówno dla łączenia się do sieci, jak i tworzenia Access Pointa, przy czy obługiwany jest zarówno WEP, jak i WPA, WPA2 i WPS. Do tego mamy port szeregowy, przez który będziemy się komunikować z Arduino i zestaw prostych komend AT, które pozwolą nam zrobić co chcemy nie obciążając za bardzo układu nadrzędnego. I to wszystko co do szczęścia trzeba, żeby wykorzystać ESP8266 do komunikacji Arduino ze światem przez Wifi. Nie wszystko jednak, co dostajemy od tegoż układu.

ESP8266 to jednak także samodzielny układ. Występuje w kilku wersjach. Prezentowana jest najprostszą możliwą z wyprowadzonym portem szeregowym i dwoma wejściami/wyjściami GPIO. Są też dostępne wersje z większą liczbą wyprowadzeń GPIO.

ESP8266 i FTDI232

 

Jak więc jeszcze można użyć ESP8266? Można przygotować dla niego dedykowany program w C lub nawet rozszerzyć firmware, którego źródła są ogólnodostępne. Natomiast można też zrobić coś, co sprawi, że programowanie układu stanie się szybkie i bezbolesne. Szczególnie ucieszyć powinny się osoby, którym nie są obce dwie technologie – programowanie Arduino i Node.js. Dlaczego akurat takie osoby? Za sprawą projektu NodeMcu, który zbliża układy oparte na ESP8266 do Arduino, oferując podobną prostotę programownia i obsługi wejść/wyjść oraz do Node.js przejmując od niego filozofię programowania sterowanego zdarzeniami (event-driven) i interaktywny interpreter. Gdzieś w tle mamy projekt eLua, z którego pełnymi garściami czerpią twórcy NodeMcu. Co za tym idzie skryptów nie będziemy pisać w Javascripcie, jak można się było spodziewać po takim wstępie, tylko w języku Lua. To jednak nic strasznego, naprawdę.

Co można z tym zrobić? Bezprzewodowy czujnik temperatury, wysyłający raporty bezpośrednio do serwera www lub prezentujący wyniki jako serwer www, w oparciu o termometry Dallas DS18B20. Miniaturowy sterownik światła odbierający polecenia z tradycyjne przycisku ściennego, ale też przez sieć WiFi. Sterownik ogrzewania do pieca na ekogroszek, monitorujący jednocześnie temperatury poszczególnych rur. Prosty alarm wysyłający mailem informację o wykryciu ruchu przez czujkę podczerwieni. Zastosowań są niezliczone ilości.

Zacznijmy więc zabawę. Dzisiaj programować jeszcze nie będziemy, ale podłączymy układ do komputera, wgramy firmware i połączymy się z siecią wifi. Całkiem dużo jak na pierwszy dzień.

Wersja układu, którą posiadam ma wyprowadzone 8 pinów. Dwa od zasilania (3,3V i GND), dwa od komunikacji szerwegowej (RX, TX), dwa wejścia wyjścia (GPIO0 i GPIO2), reset oraz złącze CH_PD, które podłączamy do zasilania gdy układ ma działać.

Z drugiej strony mam układ FTDI232 z możliwością wyboru napięcia 5V i 3,3V. Pozwala on na komunikację z układem ESP8266 przez port USB i dowolny terminal na komputerze. Ja do komunikacji użyłem IDE Arduino, który posiad wbudowany monitor portu szeregowego (serial monitor) – czyli umożliwia wysyłanie komend i odczytywanie zwrotnej transmisji.

Najpierw jednak należy ze sobą połączyć oba układy RX łączymy z TX, TX z RX. VCC łączymy z VCC. Tutaj należy się upewnić, że zworka wyboru napięcia ustawiona jest na 3,3V, bo tylko z takim napięciem działa ESP8266. Co więcej port szeregowy także nie toleruje sygnałów o innym napięciu – to bardzo istotnie przy łączeni z Arduino. Potem masę (GND) łączymy z masą. Pozostało jeszcze do CH_PD (Chip Enable Pin) podłączyć napięcie, bo to jest warunkiem działania. W przypadku gdy chcemy wprowadzić układ w tryb programowania (flashowania, wgrywania firmware), GPIO0 łączymy z masą. Na razie jednak tego nie robimy, bo wydamy dla testu kilka komend.

Pierwsza komenda, która warto wydać to AT. W odpowiedzi powinniśmy otrzymać, jak za starych, dobrych, modemowych czasów, OK. W dalszej kolejności możemy sprawdzić wersję aktualnie wgranego oprogramowania (firmware) przez AT+GMR, przestawić wifi w tryb kliencki – AT+CWMODE=1 oraz sprawdzić listę dostępnych sieci w okolicy wraz z mocą sygnału AT+CWLAP. Po każdej komendzie oczywiście konieczny jest „enter” (CR+LF). I właśnie tego typu komendami będziemy się komunikować z Arduino i w podobny sposób zlecać transmisję IP.

Zostawmy to jednak, by wgrać oprogramowanie NodeMcu. Z githuba ściągamy nodemcu_latest.bin (lub inny według preferencji). Instalujemy narzędzie esptool (w pythonie). Alternatywą są inne programy Windowsowe nie wymagające pythona, jednak skoro jest wieloplatformowy esptool, to nie ma sensu o nich pisać.

Gdy już mamy wszystko przygotowane, łączymy GPIO0 z GND, podłączmy i uruchamiamy flashowanie:

# sudo ./esptool.py --port /dev/ttyUSB0 write_flash 0x000000 nodemcu_512k_latest.bin
Connecting...
Erasing flash...
Writing at 0x0007ec00... (100 %)
Leaving...

Powyższy przykład pochodzi z systemu Ubuntu, w Windows inaczej nazywają się porty, natomiast idea pozostaje ta sama.

Po poprawnym zakończeniu procesu układ można odłączyć od zasilania, a pin GPIO0 od masy. Po restarcie i połączeniu można wydawać polecenia w języku Lua:

> wifi.setmode(wifi.STATION)
> print(wifi.sta.getip())
nil
> wifi.sta.config("mojasiec","tajnehaslo")
> print(wifi.sta.getip())
192.168.7.164

Co sie konkretnie stało? Układ został przełączony w tryb klienta. Po sprawdzeniu IP okazało się, że nie ma przydzielonego (co logiczne). Następnie skonfigurowana została sieć WiFi, w najprostszy możliwy sposób z podaniem SSID i hasła sieci. Następnie układ połączył się z siecią, pobrał adres IP przez DHCP i zapytany o adres IP podał go. Po odłączeniu restarcie układ automatycznie (i błyskawicznie) łączy się z siecią. Proste? Genialne?

Na koniec małe porównie wielkości ESP8266 z popularnym układem do komunikacji w tym samym paśmie częstotliwości – NRF24L01.

ESP8266 & NRF24L01

 

Miłej rewolucji Internetu rzeczy. Do następnego razu.

Reklamy

9 Responses to ESP8266 – tanie i łatwe w użyciu WiFi do Arduino i bez Arduino

  1. aquamarine says:

    Istnieje jeszcze wsparcie tego modułu w Espruino (JavaScript) http://www.espruino.com/ESP8266 oraz w MicroPython https://github.com/micropython/micropython/pull/990

    Z pewnymi ograniczeniami ze względu ma małą ilość pamięci operacyjnej ale zawsze to dodatkowe opcje do wyboru.

  2. marcin says:

    Witam,
    Chciałbym się zwrócić do Ciebie o pomoc, ponieważ nie znam nikogo innego kto by mógł mi pomóc w temacie modułów ESP8266.
    Mam taki moduł podłączony bezpośrednio do przejściówki opartej o FTDI232 i jak podłączam go, to diody RX i TX na przejściówce zaczynają migać.

    Podłączyłem Vcc do napięcia zasilania 3,3V z przejściówki, pin GND do masy z przejściówki, CH_PD do 3,3V z przejściówki, no i oczywiście RX do TX, a TX do RX.
    Diody na przejściówce cały czas migają a komunikacji nie mam.

    Z góry dziękuję za jakąkolwiek pomoc.

  3. funak says:

    Układ ESP8266 nalezy ponownie przeflashowac. Miganie diod jest jednym z efektów

  4. Marcin says:

    Witam. Jak używa się w tych modułach połączenia do serwera WPS? Konkretnie mam moduł ESP-07

  5. rs says:

    Czy dzisiaj wiedziałbyś jak ściągnąć najnowszą wersję firmware z NodeMcu. Na dodatek z jakimi modułami???

    • techniczny says:

      Tak, ściągałem, zmieniło się jedno – można zamówić przygotowanie firmware skompilowanego według potrzeb – z wybranymi modułami. Podaje się e-mail, na których przychodzi powiadomienie gdy plik jest gotowy do pobrania.

  6. Emanuel says:

    Rozumiem że taki moduł można podłączyć do przekaźnika pinami GPIO, będzie się to potem komunikowało po Wi Fi z Maliną? Jak wygląda sprawa z zasilaniem moduł pracuje 3,3V przekaźnik na 5V, jak to pogodzić? No i ostatnie pytanie czy w Domoticzu będzie to wykrywane?

    • techniczny says:

      W skrócie można, ale trzeba zasilić moduł na 5V i przekonwertować napięcia do 3,3V. Być może da się to zrobić prościej, ale musiałbym przetestować. Tak czy inaczej potrzeba 5V i 3,3V do zasilania. Postaram się zrobić wpis o tym.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: