WiFi na Arduino?! Tak: ESP8266 (cz. 1)

aIMG_1111Łączność bezprzewodowa po WiFi tradycyjnie zarezerwowana była dla maszynek z wyższej półki niż mikrokontrolery. Oczywiście można dostać odpowiednie shieldy, ale ich ceny są dość zniechęcające. Wraz z pojawieniem się modułu ESP8266 świat „Internet of Things” otworzył się i dla Arduino. I to za naprawdę niewielkie pieniądze! Niestety nie ma nic za darmo. Nieźle się naczytałem, żeby ten moduł uruchomić.

 W skrócie ESP8266 to urządzenie umożliwiające bezprzewodową komunikację szeregową po WiFi do Internetu (Ethernetu). Oferowany jest w kilku różnych konfiguracjach ESP-xx różniących się:

  • ilością i rozkładem wyprowadzeń (np. dodatkowe GPIO)
  • anteną ceramiczną/PCB
  • złączem do zewnętrznej anteny

Najpopularniejszym układem z całej rodziny jest ESP-01 z 8-pinowym interfejsem. Wymaga zasilania na poziomie 3,3V. Zasięg ESP-01 to 300 metrów a nawet ponad 3 kilometry, jeżeli podłączycie go do większej anteny. Poza tym – to Wifi, a nie kapryśny Bluetooth, którego konfiguracja pod Windows 8.1 wymaga znajomości Voodoo. Niestety piny ESP-01 są wlutowane w układzie 2×4 (raster 2.54mm), więc do umieszczenia go na płytce stykowej będzie musieli sobie zmajstrować przejściówkę.

Przejściówka

Do wykonania przejściówki potrzebujecie (widziane gdzieś na youtube, zmodyfikowane) :

  • kawałek płytki PCB uniwersalnej przewlekanej z 4×4 otworami, wystarczy jednostronna
  • 8 gold-pinów (2×4)
  • Gniazdo dla golpinów 2×4 – możecie kupić gotowe, wziąć większe i spiłować lub skleić z linijki pojedynczych; ja akurat miałem pod ręką 5×2
  • coś do cięcia płytki pcb (ew. gniazd) – np. nóż z odłamywanym ostrzem, mała piłka lub w wersji luksusowej mini-szlifierka (ja używam proxxona)
  • lutownica i cyna do lutowania.

Pracę zacząłem od wycięcia kawałka uniwersalnej PCB tak, żeby uzyskać pole 4×4 oczka:
IMG_1091IMG_1092
W kolejnym kroku przygotowałem i przylutowałem gniazdo goldpin do 2 i 3 rzędu  – w nie wepnę ESP:
IMG_1088a
Języczki gniazd zagiąłem w kierunku rzędów 1 i 4. Zróbcie to porządnie, a prawie dotkną punktów stykowych:
IMG_1097
Teraz czas na goldpiny, które wejdą w płytkę stykową. Widziałem poradniki, w których lutowano je od spodu – trochę karkołomne ze względu na konieczność manewrowania pod plastykowymi koronkami. Zamiast tego włożyłem piny od góry i popchnąłem przesuwając w koronkach:
aIMG_1098
Możecie użyć odrobiny super-glue, żeby je prosto ustawić. Lutowanie na drugiej stronie nie było już problemem:
aIMG_1099
I zrobione:
aIMG_1100aIMG_1103

Pinologia

Gdy już sfabrykujecie przejściówkę, możecie zabrać się za pinologię. A ta jest wyjątkowo przejrzysta. Wystarczy podłączyć 6 pinów:
esp_8266

Pin ESP Znaczenie Arduino
Vcc Zasilanie – 3,3V 3,3V
GND Masa GND
RXD Odbiór Pin D0
TXD Nadawanie Pin D1
CH_PD Musi być w stanie wysokim 3,3V
Reset Musi być w stanie wysokim 3,3V

Dokumentacja techniczna podaje, że moduł może pobierać nawet 240mA prądu. Jednak większość źródeł mówi, że wartość ta nie przekracza zazwyczaj 70mA. Biorąc pod uwagę, że dla 3,3V Arduino może dostarczyć max. 150mA – powinno to spokojnie wystarczyć.

Niektóre źródła podają, że piny danych ESP tolerują 5V, chociaż gdzieniegdzie znajdziecie informacje ostrzegające, żeby tego nie robić i użyć konwertera poziomów. Ja podłączyłem się bezpośrednio do Arduino i nie było żadnego kłopotu. W każdym razie Was uprzedzałem:)

Po podłączeniu powinniście zobaczyć na module 2 diody:

  • czerwoną: zasilania, świeci ciągle
  • niebieska: miga w momencie nadawania

Pierwsze dane

Zacząłem od podłączenia się do modułu za pomocą konwertera UART-do-USB.

Pin ESP Pin Przejściówki
GND GND
TX RX
RX TX

ESP umieściłem na płytce stykowej, zasiliłem z zewnętrznego zasilacza. Pamiętajcie: 3,3V.

fff

Moja przejściówka podpięła się pod COM11:
bbb
Podpiąłem się PUTTY pod COM11 z szybkością 9600; i przy włączeniu do zasilania dostałem:
cc
SUKCES?! Do momentu, kiedy nie spróbowałem komend AT. Niestety moduł wydawał się na nie kompletnie głuchy i obojętny.
Po dłuższym grzebaniu trafiłem na tą stronę. Okazało się, że problemem jest stary firmware.
Postępujcie zgodnie z instrukcjami na tej stronie, żeby uzupełnić oprogramowanie ESP do najnowszej wersji, z tym że:

  • Program 'esp8266_flasher.exe’ znajdziecie w jednym z zip’ów: AT_Bin files/Old/ESP8266_flasher_V00170901_00_Cloud Update Ready.zip
  • Najnowszy firmware jest w: AT_Bin files/New-AI-v0.9.5.0 AT Firmware
  • Pamiętajcie o podłączeniu GPIO_0 do GND (na czas programowania)

ddd

Nie przejmujcie się komunikatem o błędzie na końcu – jest niegroźny. Po ponownym podłączeniu się serialem komendy AT zaczęły działać.
eee

TA-DA!

[AT+CDN]
Pozdrawiam

Źródła:

  • http://www.element14.com/community/groups/internet-of-things/blog/2014/11/19/esp8266-wi-fi-arduino-upload-to-xively
  • http://www.seeedstudio.com/wiki/WiFi_Serial_Transceiver_Module
  • http://www.esp8266.com/
  • https://nurdspace.nl/ESP8266
  • http://contractorwolf.com/esp8266-wifi-arduino-micro/

15 komentarzy do “WiFi na Arduino?! Tak: ESP8266 (cz. 1)”

  1. > AT+GMR
    stdin:1: '=’ expected near '+’
    > AT+CIPSTART
    stdin:1: '=’ expected near '+’
    takie odpowiedzi po wysłaniu komendy co może być przyczyną ze po wpisaniu portu putty nic nie odpowiada a na wpisane komendy odpowiada tak jak powyżej

        1. Zakładam, że używasz sprawdzonej przejściówki UART-USB, która działa w innych projektach. Upewnij się, że dobrze podłączyłeś wszystkie kabelki – zwłaszcza zasilanie (3,3v!!! – niektóe przejściówki mają do tego zworkę), GND (do przejściówki, masa musi być wspólna), reset i ch_pd (do 3,3v); tx i rx powinny być 'na krzyż’, Niektóre moduły zamiast na 9600 komunikują się na 57600 – sprawdź kilka szybkości.

          1. Zaprogramowałeś tak samo jak ja? I teraz w ogóle nie odpowiada? Nawet żadnych śmieci nie wyrzuca? Rozpiąłeś GPIO_0?

          2. Tego nie próbowałem… Firmware który opisałem wydaje się być bliski domyślnego SDK. Jak będę miał okazję to na ten zobaczę, ale przyczyn black-out’u może być wiele. Generalnie wypalanie firmware może się różnie skończyć… Proponuję Ci wrócić do ostatniej działającej konfiguracji i … zacząć jeszcze a raz. Albo spróbować to z mojego opisu – zobaczymy, czy jest powtarzalne na większej ilości czipów. A na wszelki wypadek przeszukaj Sieć, może ktoś miał podobny problem…

  2. Potrzebuję systemu kontroli temperatury sterowanego przez internet.
    Wyobrażam sobie to jako kilka kontrolerów z komunikacją wif,i które przekazują informację o aktualnej temperaturze w pomieszczeniu . Wartości te mogą być publikowane ja jakiejś stronie. Dane z kontrolerów są zbierane przez np malinę lub arduino (chociaż arduino może być tu za słabe) i wystawiało odpowiednie stany na odpowiednich wyjściach w zależności od programowalnych stanów progowych.
    Jeśli ktoś ma ochotę pomajstrować to zapraszam. Mój adres email jarkopol@jarkopol.com.pl

Dodaj komentarz