Zastosowanie modułu Wi-Fi ESP-12 (1). Wprowadzenie

Zastosowanie modułu Wi-Fi ESP-12 (1). Wprowadzenie
Pobierz PDF Download icon
Jednym z ciekawszych modułów Wi-Fi dostępnych na rynku jest ESP-12-Q. Bazuje on na 32-bitowym mikrokontrolerze ESP8266 firmy Espressif. Ten mikrokontroler integruje 32-bitowy rdzeń firmy Tensilica, standardowe, cyfrowe układy interfejsowe, przełącznik antenowy, balun RF, wzmacniacz mocy RF, odbiornik ze wzmacniaczem, filtry oraz moduły zarządzające zasilaniem. Dodatkowo, do zastosowania w module Wi-Fi, zintegrowano w nim stos TCP/IP.

Niewielki pobór mocy oraz moduły komunikacyjne opracowane z użyciem wspomnianego we wstępie mikrokontrolera idealnie nadają się do zastosowania we własnych projektach z dziedziny IoT. Kurs będzie obejmował użycie modułów ESP przy tworzeniu własnych elementów IoT, takich jak: bezprzewodowa stacja pogodowa, bezprzewodowe moduły wykonawcze oraz czujniki.

Na początek

W kursie zostanie użyty moduł ESP-12-Q. Jest on zgodny z wersją ESP-12, różni się jedynie dodatkowymi pinami na spodzie PCB. Moduł wymaga zasilania napięciem 3,3 V. Przy współpracy z systemem nadrzędnym zasilanym napięciem innym niż 3,3 V, należy zastosowań konwerter poziomu napięcia.

Fabrycznie nowy moduł pracuje pod kontrolą oprogramowania wykonanego przez producenta. Komunikacja odbywa się w oparciu o transmisję UART, parametry połączenia są następujące:

1. Prędkość transmisji: 115200 b/s (w starszych wersjach jest to 9600 b/s).
2. 8 bitów danych.
3. Bez bitu parzystości.
4. 1 bit stopu.

Sposób sterowania wykorzystuje zasadę request/response i opiera się o komendy AT. Do pierwszych testów wystarczy zwykły konwerter USB/UART. Należy zwrócić uwagę na napięcie na liniach Rx i Tx, aby nie przekraczały poziomu 3,6 V, czyli maksymalnego napięcia dla mikrokontrolera ESP8266.

Z racji tego, że układ mikrokontrolera ESP8266 można programować własnym kodem z wykorzystaniem komunikacji UART, pinu GPIO0 użyto do sterowania bootloaderem. Po ustawieniu GPIO0 bootloader ładuje kod programu z pamięci Flash, natomiast po wyzerowaniu oczekuje na nowy kod i zadpisuje go w pamięci Flash. Podstawową aplikację modułu pokazano na rysunku 1. Rezystory R1…R3 dodano, aby w momencie pisania własnego oprogramowania nie stworzyć zwarcia poprzez zmianę poziomu pinu podłączonego na stałe do któregoś z biegunów zasilania.

Pierwsze uruchomienie

Moduł należy podłączyć do przejściówki USB/UART krzyżując linie Rx i Tx. Do komunikacji można zastosować dowolny terminal – tutaj zostanie użyty darmowy program Putty. Po włączeniu zasilania w konsoli powinny pojawić się wiadomości takie, jak na rysunku 2 lub bardzo podobne (zależnie od wersji oprogramowania). Wiadomość „ready” oznacza poprawny start oprogramowania i gotowość do pracy.

Aby przetestować poprawną pracę modułu, można sprawdzić wersję oprogramowania za pomocą polecenia AT+GMR. Odpowiedź modułu, jak na rysunku 3, informuje nas nie tylko w wersji programu, ale też o tym, że wszystko zostało poprawnie połączone i że ustawiliśmy poprawne parametry transmisji.

Kilka słów wyjaśnienia odnośnie do samych komend. Wszystkie zaczynają się od przedrostka „AT”, za którym – najczęściej po znaku „+” – jest umieszczana komenda i jej argumenty. Polecenie jest interpretowane w chwili, gdy moduł odbierze znaki powrotu karetki i nowej linii. Należy zwracać szczególną uwagę na kolejność tych znaków, ponieważ przeciwnym razie komenda zostanie zignorowana. W przypadku korzystania z Putty kombinacje klawiszy generujące niezbędne kody to:

− Powrót karetki: CTRL+M.
− Znak nowej linii: CTRL+J.

Każde polecenie, oprócz wyniku zawsze zwraca status „OK” lub „ERROR” zależnie od rezultatu jego wykonania. Zależnie od oprogramowania, może też pojawić się komunikat „Busy p….”, który informuje o tym, że moduł jest zajęty i nie przyjmie komendy. Listę dostępnych komend znajdziemy na stronie producenta.

Aktualizacja firmware

Do aktualizacji zostanie wykorzystany program Flash_Download_Tools następnie należy pobrać oprogramowanie ze strony producenta bbs.espressif.com kategoria SDKs. W chwili pisania artykułu najnowszą wersją jest 1.5.3 – opcja Non-OS SDK. Do wgrania oprogramowania na ESP wymagane są 4 pliki:

− esp_init_data_default – adres 0xFC000.
− blank.bin – adres 0xFE000.
− boot_v1.5.bin – adres 0x00000.
− user1.2048.new.5.bin – adres 0x01000.

Należy zauważyć, że nazwy mogą się nieznacznie różnić w zależności od wersji oprogramowania. Przed aktualizacją trzeba przełączyć ESP-12 w stan aktualizacji oprogramowania, wymuszając poziom niski na GPIO0 i restartując moduł. Okno oprogramowania służącego do zapisu pamięci Flash modułu pokazano na rysunku 4. Prędkość transmisji pokazana na rysunku może różnić się, zależnie od ustawień oprogramowania. Po aktualizacji i przełączeniu modułu w tryb normalnej pracy (ustawienie GPIO0) i wydaniu komendy AT+GMR moduł powinien odpowiedzieć podając numer nowej wersji oprogramowania. Po aktualizacji oprogramowania warto przywrócić nastawy fabryczne, co uchroni nas od potencjalnych problemów. Można to zrobić za pomocą komendy AT+RESTORE.

„Hello World”

Czas na najciekawsze – pokazanie możliwości modułu ESP-12 w wersji sterowanej komendami AT. Pierwszym programem będzie klasyczne „Hello World” dla mikrokontrolerów, czyli miganie diodą LED. Do tego celu oprócz modułu ESP-12 wykorzystano również płytkę Arduino UNO R3, ale można zastosować dowolny mikrokontroler wyposażony w interfejs UART lub USART. Środowisko wykorzystane do napisania kodu to Arduino IDE z powodu integracji z modułem ESP-12 i możliwości tworzenia kodu na ten moduł, co przyda się w następnych częściach. Uproszczony schemat ideowy połączeń pokazano na rysunku 5.

Oprogramowanie testowe jest nieskomplikowane. Moduł ESP nasłuchuje na porcie 80, kiedy przyjdzie nowy pakiet zasygnalizuje to wysyłając przez UART +IPD,<ID>,<len>:<data>, gdzie:
− ID pojawia się, gdy ESP jest ustawione na opcję pozwalającą zawierać więcej niż jedno połączenie (maksymalnie 5) i zawiera ID połączenia.
− Len długość pakietu danych.
− Data dane pakietu.

Teraz trzeba przygotować ESP do współpracy z Arduino, w tym celu wysłana zostanie komenda zmieniająca prędkość transmisji UART. Z racji tego, że Arduino ma tylko jeden sprzętowy interfejs UART, który będzie wykorzystany do komunikacji z komputerem, ESP będzie korzystał z programowej transmisji UART.

Zmiana ustawień transmisji polega na wydaniu polecenia AT+UART_DEF=9600,8,1,0,0rn, gdzie:
− 9600 jest prędkością transmisji.
− 8 jest liczbą bitów przypadających na jedną paczkę danych.
− 1 bit stopu.
− 0 – bez bitu parzystości.
− 0 – wyłączona kontrola przepływu.

Dopisek _DEF oznacza, że ta konfiguracja zostanie zapisana w pamięci nieulotnej Flash w sekcji user parametr. Po tym, należy przyłączyć ESP do Arduino – uproszczony schemat ideowy połączeń pokazano na rysunku 5. Zamiast pinów 2 i 3 na płycie Arduino można wykorzystać dowolne inne, ale wtedy należy zmodyfikować oprogramowanie. Z racji tego, że Arduino UNO R3 ma tylko jedno wyprowadzenie 3,3 V, zostawimy pin GPIO0 niepodłączony. Dokumentacja mówi, że ten pin przy normalnej pracy może być albo ustawiony, albo w stanie nieustalonym.

Odpowiednie oprogramowanie sterujące pokazano na listingu 1. Po zaprogramowaniu mikrokontrolera, na monitorze szeregowym (ważne: należy wybrać monitor szeregowy, a nie monitor portu szeregowego), znajdującym się w IDE zostaną wyświetlone się informacje o tym, co obecnie wykonuje ESP. Zostanie tam też pokazany adres IP, który należy wpisać w oknie przeglądarki. Po jego wpisaniu, zostanie pokazana tabela z 2 możliwościami ON – OFF, którymi steruje się diodą LED.

Programowanie modułu ESP-12

Do programowania modułu ESP-12 wykorzystane zostanie, jak było wspomniane wcześniej, środowisko Arduino IDE z powodu gotowych bibliotek wspomagających pisanie oraz możliwości programowania modułu bezpośrednio z tego środowiska omijając dodatkowe programy. Wszystko, czego obecnie potrzebujemy, to przejściówka USB ¨ UART oraz zasilanie 3,3 V. Kolejnym krokiem jest dodanie tzw. „płytek” do Menedżera Płytek w Arduino IDE. Dokładną instrukcję można znaleźć pod adresem www.github.com/esp8266/Arduino. Teraz można wybrać już opcję Generic ESP8266 Module z menu Narzędzia ¨ Płytka. Konfiguracja powinna wyglądać następująco:

− Flash Mode: „DIO”.
− Flash Frequency: „40MHz”.
− Upload Using: „Serial”.
− CPU Frequency: „80 MHz”.
− Flash Size: „2M (1M SPIFFS)”.
− Debug port: „Disabled”.
− Debug Level: „Brak”.
− Reset Method: „ck”.
− Upload Speed: „256000”.
− Port: (tutaj należy wybrać port, na którym jest przyłączony moduł).

Upload Speed może się różnić w zależności od wersji IDE i/lub płytki, w przypadku opisywanym w artykule jest to 256000, trzeba doświadczalnie dobrać prędkość by wgrywanie skończyło się sukcesem.

Kod „Hello World” na ESP-12 działa tak samo jak w wersji na Arduino. Dzięki społeczności Arduino, można użyć wielu gotowych już bibliotek przy rozwijaniu oprogramowania dla ESP-12. W tym wypadku zostały użyte biblioteki do połączenia z siecią Wi-Fi oraz realizujące komunikację TCP.

Po wgraniu kodu, wyprowadzenie GPIO0 nie może już być wyzerowane. Po jego ustawieniu lub pozostawieniu go niepodłączonym, moduł wymaga restartu. W konsoli pojawią się informacje o starcie modułu, potem o sukcesie lub niepowodzeniu połączenia do sieci i adres IP. Wpisanie adresu IP, który zostanie wyświetlony przez konsolę na pasku adresowym w oknie przeglądarki WWW, pokaże nam znów taką stronę, jak we wcześniejszym przykładzie. Zauważalną zmianą w tych dwóch przykładach jest szybkość ładowania się stron oraz wykonywania poleceń, na korzyść ESP, co pokazuje dosadnie, jakie możliwości ma ten mały moduł. Mając do wykorzystania w przypadku ESP-12-Q 16 pinów (trzeba zwrócić szczególną uwagę na piny wymagające podłączenia przez rezystory do któregoś z biegunów zasilania) oraz interfejsy komunikacyjne, takie jak I2C, SPI czy UART, przetwornik A/C, można zrealizować sterowanie wieloma urządzeniami z interfejsem w postaci WWW. Interfejsy I2C lub SPI będą świetnie się sprawdzały w przypadku wykorzystania modułu jako czujnika bezprzewodowego. Zwykłe piny GPIO mogą być wykorzystane do sterowania przekaźnikami, co daje możliwość zdalnego sterowania urządzeniami.

Następnymi rzeczami omówionymi w tym cyklu będzie sterowanie bezprzewodowe pinami, z wykorzystaniem modułów przekaźnikowych, odczyt danych z czujników i gromadzenie ich na stronie WWW, a także sterowanie bardziej skomplikowanymi rzeczami jak radio FM.

Moduł może być programowany w języku „C” „C++ (Arduino)” oraz „LUA”. W cyklu przeważać będzie język „C++ (Arduino)” z powodu ilości bibliotek dostępnych dla użytkownika, co znacznie usprawnia pisanie softu.

Jakub Kisiel
ww.microgeek.eu

Artykuł ukazał się w
Elektronika Praktyczna
lipiec 2016
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio wrzesień - październik 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje wrzesień 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich październik 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów