wersja mobilna | kontakt z nami

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

Numer: Lipiec/2016

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.

Pobierz PDFMateriały dodatkowe

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.

espr1Z 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.

espr2Aby 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.

espr3Każ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.

espr4Należ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.

espr5Teraz 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.

esp lst1Odpowiednie 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.

esp lst2Kod „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

Pozostałe artykuły

System sterowania DMX512 dla każdego (4). Kontrolowanie urządzeń

Numer: Wrzesień/2016

W kolejnej części kursu obsługi urządzeń z interfejsem DMX512 kontynuujemy opis programu sterującego. Teraz zajmiemy się szczegółowym opisem jego funkcji, korzystając przy tym z wcześniej nabytej wiedzy. Będziemy też sterowali naszym układem demonstracyjnym z diodami LED powodując zmiany parametrów ich świecenia. Będzie to wstępem do komponowania obrazów świetlnych, tzw. Cue.

System sterowania DMX512 dla każdego (3) Adresowanie urządzeń

Numer: Sierpień/2016

W kolejnej części kursu obsługi urządzeń z interfejsem DMX512 wykonamy próbne sterowanie oświetleniem w postaci diod LED RGB. Zainstalujemy też program pomocniczy, ułatwiający adresowanie urządzeń DMX i chroniący przed popełnianiem błędów.

Zastosowanie modułu Wi-Fi ESP-12 (2). Wirtualny interfejs szeregowy

Numer: Sierpień/2016

UART jest jednym z interfejsów używanych do komunikacji. Jest on łatwy w obsłudze programowej i użyciu, szczególnie w wypadku komunikacji z komputerem PC. Dla uzyskania podstawowej funkcjonalności jest przyłączenie jedynie 3 linii: RxD, TxD oraz masy. Ileż prościej by było, gdyby można zastosować taki interfejs bez używania żadnych kabli. Pozwoliłoby to na bezproblemową komunikację komputera z systemem wbudowanym, bez konieczności ...

Programowanie paneli HMI (4)

Numer: Lipiec/2016

Praca z nowym urządzeniem zawsze zaczyna się od prostego przykładu. Takim przykładem zazwyczaj jest Hello world, czyli tak naprawdę sprawdzenie poprawności działania urządzenia. W tym odcinku kursu HMI wykonamy nieskomplikowany ekran wizualizacji z napisem "Hello world!".

System sterowania DMX512 dla każdego (2). Konfigurowanie urządzeń oraz okablowanie sieci

Numer: Lipiec/2016

W kolejnej części kursu obsługi urządzeń z interfejsem DMX512 zajmiemy się skonfigurowaniem urządzeń w sieci DMX512. Podamy też uwagi, które pozwolą na wykonanie poprawnego okablowania oraz uzyskanie wymaganego zasięgu transmisji danych. Jest to szczególnie ważne przy tworzeniu rozległych instalacji scenicznych.

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Październik 2017

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym