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
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
- aREST
- PubSubClient biblioteka MQTT
- DHT11– inicjalizacja DHT: DHT dht(DHTPIN, DHTTYPE, 15);
- DallasTemperature
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