Kolejne części (pierwsza tutaj) tutorialu do ESP8266 w trakcie pisania. A co jeżeli chcesz być pewny, że kod działa za każdym razem tak samo w powtarzalny sposób? No cóż, bierzesz RPi, ESP z modułami przekaźników i krótki skrypt w Pythonie.

RPi przez sieć przełącza kolejno przekaźniki i za każdym razem sprawdza czy wszystko gra, tzn czy nastąpiło przełączenie. Dzięki temu nie trzeba ręcznie klikać i jednocześnie mamy pewność, że ESP przełącza moduł przekaźnika setki razy i z każdym razem działa…

ESP8266 i Arduino IDE

Gdy przed Tobą stoi potrzeba podłączenie jakiegoś mikrokontrolera do sieci WiFi, od niedawna masz zupełnie nowe możliwości dzięki małym modułom ESP8266. Te moduły mogą pracować jako bramki do WiFi dla µC, albo jako moduły w pełni samodzielne, z możliwością programowania.

ESP w Nettigo

image

Od kilku dni poszerzyła się oferta modułów ESP8266 w Nettigo, więc jeżeli poszukujesz jakieś z większa ilością dostępnych GPIO to mamy coś dla Ciebie

ESP8266 i Arduino IDE

Dotychczas najpopularniejsza metodą na programwowanie ESP jako samodzielnego modułu, było skorzystanie z firmware, które rozumie język lua, jednak niedawno pojawiła się możlwiość korzystania z Arduino IDE, razem ze znanymi funkcjami takimi jaki digitalWrite, digitalRead. Jak to można zrobić? O tym w tym wpisie.

Kilka słów przypomnienia

Po pierwsze, moduły ESP działają na max 3.6v i komunikują się w logice 3v. Pamiętajcie o tym, ponieważ ESP można uszkodzić podłączając napięcie większe niż 3.6v.

Po drugie, w sieci dostępnych jest wiele różnych modułów ESP8266 charakteryzujących się różną ilością portów GPIO, jednak zasad uruchamiania i podłączania jest taka sama dla wszystkich.

O tym jak podłączyć ESP8266 i zmienić oprogramowanie znajdziecie w naszym poprzednim wpisie o ESP8266.

Arduino IDE

W tym wpisie zajmiemy się możliwością oprogramowania naszego modułu z poziomu Arduino IDE. Na chwilę obecną (połowa kwietnia 2015) dostępne jest oddzielnie IDE (bazowane na kodzie oryginalnego IDE), jednak możemy mieć nadzieje, że w niedługiej przyszłości będą dostępne paczki, które będzie można dograć do oryginalnego Arduino IDE. Znacznie to ułatwi postępowanie, jeżeli nie będziecie musieli mieć specjalnego IDE do programowania ESP. Sytuacja jest bardzo dynamiczna i projekt się szybko rozwija.

W celu zaprogramowania ESP przez IDE należy pobrać paczkę z Githuba. Oprogramowanie dostępne jest na Windowsa, Linuxa (tylko 64 bit) oraz MacOSa.

Po pobraniu paczki rozpakowujemy ją do wybrango foldery i w przypadku systemu Windows odpalamy IDE klikając na arduino.exe. W przypadku systemów Linux oraz MacOS odpalamy IDE z konsoli komendą:

./arduino

Zanim przejdziemy do wgrywania pierwszego programu mała uwaga, numery pinów ESP8266 odpowiadają numerom pinów w IDE, czyli GPIO0=pin0, GPIO2=pin2, itd. Jak wspomnieliśmy na samym początku w zależności od rodzaju modułu użytkownik będzie miał dostęp do większej lub mniejszej ilości pinów GPIO.

Podłaczenie ESP

Podłączamy nasze ESP do konwertera, pin GPIO0 zwieramy do masy (robimy to za każdym razem kiedy będziemy chcieli wgrać nowe oprogramowanie). Sprawdzamy połączenia i jeśli wszystko jest w porządku ostatnim krokiem jest podłączenie zasilania.

Odpalamy nasze wcześniej pobrane IDE, które z wyglądu nie różni się zbytnio od oryginalnego. W przypadku odpalania IDE na linuxie należy zwrócić uwagę, gdyż pobrana paczka przeznaczona jest na system 64bit. Istnieje możliwość pobrania źródła i zbudowania sobie programu używając polecenia:

  $ git clone [https://github.com/esp8266/Arduino.git](https://github.com/esp8266/Arduino.git)
  $ cd Arduino/build
  $ ant dist

Kiedy rozwiniecie zakładkę “Board” ukaże wam się moduł ESP8266. W zakładce “Port” wybieramy port szeregowy, jako który pojawił się nasz konwerter USB-serial.

Przetestujmy działanie na przykładzie znanego wszystkim “blinka”. Po wybraniu menu File/Examples/01. Basics/Blink jedyna zmiana jaką musimy wprowadzić to zamiana pinu 13 na pin 2. Kompilujemy, jeśli żadnych błędów nam IDE nie zwróci, to możemy załadować program do ESP8266.

Po wgraniu programu odłączamy zasilanie, zdejmujemy zworkę łączącą GPIO0 z masą i możemy ponownie podłączyć zasilanie. Wbudowana w ESP dioda powinna migać. Dzięki temu mamy pewność, że nasz program działa – cały proces przeszedł pomyślnie.

Na chwilę obecną działają funkcje: pinMode, digitalRead, digitalWrite ale jak pisałem wcześniej sytuacja jest dynamiczna i mamy nadzieję, że już wkrótce autorzy projektu przeniosą obsługe kolejnych poleceń.

Obsługa GPIO

GPIO0-GPIO15 mogą być ustawione jako wejście, wyjście, wejście z pullup, wyjście z otwartym drenem. GPIO16 może być ustawione tylko jako wejście/wyjście.

Przerwania można używać za pomocą komendy attachInterrupt, detachInterrupt i dotyczy każdego pinu z wyjątkiem GPIO16.

Komunikacja ESP z komputerem przez port Serial

Tryb Serial działa tak samo jak w standardowym Arduino, można przesyłać tekst i będzie on odbierany.

WiFi (biblioteka ESP8266)

Aby móc korzystać z sieci, najpierw trzeba ja skonfigurować.Interfejs do tej biblioteki jest wzorowany na biblitece WiFi od Arduino. Poniżej znajdują się najważniejsze różnice pomiędzy oryginalną, a zmodyfikowaną biblioteką WiFi. reszta funkcji powinna działać bez problemów


WiFi.mode(m): ustaw tryb na WIFI_AP, WIFI_STA, lub WIFI_AP_STA. Są to odpowiednio tryby Access Point, klienta WiFi i mieszany

w zależności od trybu pracy różni się ustawianie adresu MAC karty sieciowej WiFi.macAddress(mac) jest dla STA, WiFi.softAPmacAddress(mac) jest dla AP.

podobnie z adresem IP: WiFi.localIP() jest dla STA, WiFi.softAPIP() jest dla AP.

WiFi.RSSI() nie działa obecnie

WiFi.printDiag(Serial) wyświetla informacje diagnostyczne

użyj WiFi.softAP(ssid) w celu ustawienia własnej otwartej sieci (w trybie z AP), dostęp bez hasła

użyj WiFi.softAP(ssid, passphrase) w celu ustawienia sieci WPA2-PSK zbezpieczonej hasłem

WiFiServer, WiFiClient i WiFiUDP działają i zachowują się tak samo jak w oryginalnej bibliotece.

W IDE dołączone zostały 4 przykłady z użyciem zmodyfikowanej biblioteki.

I2C

Działa jedynie tryb master, a Wire.setClock nie został jeszcze dopracowany do końca (problemy z ustawieniem częstotliwości). Jeśli ktoś chce próbować, przed użyciem I2C należy skonfigurować piny używając komendy Wire.pins(int sda, int scl), np. Wire.pins(0, 2); dla modułu ESP-01.

SPI

Na chwilę obecną prowadzone są testy nad HSPI (na GPIO12-15). Więcej informacji można znaleźć na stronie Sermusa, gdzie jest np. informacja dotycząca podłączenia wyświetlaczy ILI9341 do ESP

OneWire

Działa bez większych problemów. Biblioteka została zaadoptowana do działania z ESP. Oryginalnie była to biblioteka przeznaczona na Teensy

Inne biblioteki działające z ESP

Podsumowanie – ESP8266, Arduino i nie tylko

Jeżeli projekt bedzie się nadal tak rozwijał jestem pewien, że wkrótce wsparcie dla ESP na Arduino IDE będzie znacznie bardziej kompletne. Ale nawet w dzisiejszym kształcie może być ciekawą alternatywą. Zwłaszcza dla osób znających Arduino IDE a z różnych powodów nie mogących/nie chcących przesiąść się na nowe środowisko/język.

W tej chwili w Nettigo możecie kupić:

  • ESP8266-01 moduł ESP z dwoma portami GPIO, antena (PCB) na płytce
  • ESP8266-07 wersja z 9 GPIO, antena (ceramiczna) na płytce oraz gniazdo UF.L
  • ESP8266-12 wersja z 9 GPIO, antena (PCB) na płytce
  • opcjonalny adpater do ESP-07 i ESP-12 tak by można łatwo korzystać z modułów ESP-07 i ESP-12 np w płytce stykowej

ESP8266

Co jest małe, może się łączyć bezprzewodowo z siecią WiFi i ma dwa wejścia GPIO?

To ESP8266, a dokładniej ESP-01. W sieci dostępne są również inne moduły, które różnią się między innymi liczbą portów GPIO. My jednak skupimy się na wersji ESP-01.

Na początek parę informacji technicznych:

  • posiada porty GPIO, I2C, ADC, SPI, PWM
  • procesor RISC 80MHz
  • zasilanie 3.3V
  • logika 3.3V
  • pamięć FLASH 512kb

Do czego można tego użyć? Oczywiście może służyć jako bramka do WiFi np dla Arduino. Jednak nas będzie teraz interesować użycie ESP8266 jako samodzielnego modułu.

Zbudujemy prosty rejestrator temperatury, wysyłający dane do internetu.

Użyjemy w tym celu:

Zacznijmy od podłączenia się.

W pierwszym kroku interesuje nas GND i VDD – zasilanie, maksymalnie 3.6V! Nasz konwerter USB/Serial mimo że pracuje z logiką TTL 3.3V może mieć napięcie zasilające 5V! Dlatego najlepiej podłączyć zasilanie 3.3V z Arduino i masę konwertera, ESP i Arduino połączyć razem.

U0TXD,U0RXD służą do komunikacji z konwerterem a CHIP_EN trzeba zewrzeć do zasilania, by nasz układ ESP zaczął działać.

Do dalszej konfiguracji można użyć komend AT, my jednak skorzystamy z programu ESPlorer). Wybieramy port do którego jest podłączony nasz konwerter, klikamy “open” i….. jeśli wszystko zrobiliśmy poprawnie po kliknięciu AT w zakładce AT v0.20 w oknie powinno się pojawić “OK”. Jest to najszybszy i najprostszy sposób, aby sprawdzić czy nasz moduł działa.

Pierwszym krokiem będzie wgranie firmware’u NodeMcu. Pliki znajdują się w folderze pre-build/latest.

EDIT Po zmianie katalog ten nie jest dostępny. Najnowsze wersje FW są do wygenerowania na stronie: http://frightanic.com/nodemcu-custom-build/ lub pozostaje zrobienei tego własnoręcznie…

Używając esptool wgramy ten plik bin na nasze ESP. Aby wgrać nowy soft należy pin GPIO0 zewrzeć do masy. Tak też zrobimy i dopiero wtedy możemy podłączyć nasz układ do komputera.

W przypadku linuxa otwieramy konsolę i przechodzimy do folderu w którym mamy program esptool (warto do tego samego folderu wrzucić plik z firmware’em).

Wpisujemy:

sudo ./esptool.py --port /dev/ttyUSB0 write_flash 0x000000 nodemcu_512k_**NAZWA**.bin

Gdzie NAZWA zależy od pliku bin ściągniętego z NodeMcu, jeśli użyłeś naszych wskazówek będzie to latest, ale może być numer wersji jeżeli sam wybrałeś inny.

Jeśli wszystko jest ok, naciskamy enter i powinniśmy zobaczyć poniższe statusy.

Connecting…
Erasing flash…
Writing at 0x0007ec00… (100 %)
Leaving…

Po wgraniu oprogramowania, odłączamy ESP od zasilania i usuwamy zworkę łączącą GPIO0 z masą. Od teraz możemy używać języka lua do komunikacji z ESP. W następnym kroku korzystając z ESPlorer’a wgrywamy pliki .lua ściągnięte z GitHuba. W pliku init.lua musimy podać dane naszej sieci WiFi:

wifi.sta.config(“SSID”,“PASSWORD”)

Gdzie SSID i PASSWORD to oczywiście wartości pasujące do Waszej sieci WiFi a w ds1820.lua trzeba podać API key naszego kanału serwisu ThingSpeak:

conn:send(“GET /update?key=YOURKEY&field1=”..t1..“.”..t2..“ HTTP/1.1rn”)

I to wszystko – po ‘Send to ESP’ i odłączeniu  układ powinien zacząć wysłać dane do serwera ThingSpeak. Zajrzyjcie do nas, jaka jest temperatura:

NodeMCU

Pojawiła się nowa mała płytka kontrolera o nazwie NodeMCU


Płytka kontrolera NodeMCU – zdjęcie pochodzi ze strony nodemcu.com

Zawiera 11 pinów GPIO. Każdy z nich może pełnić funkcję wyjścia PWM, I2C lub 1-Wire. Wybrane piny mają też możliwośc pracy jako magistrala SPI oraz klasyczne wyjście Serial RS232 TTL. Jest też jedno wejście analogowe.

Sercem płytki jest zdobywający dużą popularność kontroler ESP8266. Ten sam, który znajduje się w popularnych modułach Wi-Fi. NodeMCU również obsługuje Wi-Fi.

Największym zaskoczeniem jest sposób programowania. Robi się to za pomocą specjalnie przygotowanego języka LUA. Język ten wyposażono w API upodabniające go do znanego projektu NodeJS.

sprae