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