To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266. Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family.
No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi. Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT, które budujemy w zaciszu domowych laboratoriów (i nie tylko).
Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne różnice we wnętrzu układu.
Najtańszą i – teoretycznie – najbardziej ograniczoną płytką jest ESP-01, o której wykorzystaniu napisałem dalej. Płytki dostarczane są domyślnie z oprogramowaniem pozwalającym na komunikację za pomocą języka Hayes, czyli hm... słynnych komend modemowych "AT". Trochę się pobawiłem tymi komendami i byłem, delikatnie mówiąc, zawiedziony. Dlatego też od razu wszystkie moje moduły zaflaszowałem oprogramowaniem NodeMCU, stworzonym specjalnie dla płytek ESP8266, pozwalającym stosować w programowaniu filozofię i metodologię znaną z Node.js, pisząc w języku Lua (da się przeżyć), a programy umieszczać "w kostce" w postaci skryptów posiadających swoją nazwę i uruchamianych w dowolnym momencie – "ręcznie" (np. przez program z Arduino) albo automatycznie, przez skrypt init.lua (czyli skrypt startowy).
W jaki sposób wgrać do układu najnowszą wersję NodeMCU? Opis znajdziemy np. tutaj: http://nodemcu.readthedocs.io/en/dev/en/flash/ (oficjalna dokumentacja, jest też link do tutoriala), natomiast o samym projekcie NodeMCU możemy przeczytać na stronie http://nodemcu.com/index_en.html.
Gdy już opanowałem płytki ESP-01, najprostsze i teoretycznie najsłabsze z serii, okazało się, że dwa wyprowadzenia GPIO to zdecydowanie za mało, jeśli chcemy wykorzystać ten układ w sposób nieco inny, niż tylko karta sieciowa WiFi do Arduino. Tym bardziej, że układ pracuje w logice 3,3V, więc o ile Arduino Due czy płytka Nucleo nie mają z ESP żadnych problemów, o tyle Arduino Uno i wszystkie inne *duino bazujące na AVR-ach pięciowoltowych potrzebują konwertera stanów logicznych. W przypadku prototypów da się to spokojnie załatwić (dostępne są nawet 16-pinowe konwertery dwukierunkowe), zaś w warunkach produkcyjnych – bywa nieco trudniej. Najlepiej więc, jeśli mamy do dyspozycji płytkę ESP-12 (znaną również jako "moduł NodeMCU").
Ale ja swego czasu nabyłem kilka sztuk płytek ESP-01, a ponieważ nie mam zwyczaju marnować różnych rzeczy, postanowiłem znaleźć jakieś obejście. I długo nie szukałem. Na blogu poświęconym m. in. płytkom, które są głównym bohaterem tego wpisu, znalazłem ten oto artykuł: "NodeMcu and I2C: How to start and using the PCF8574A I2C port expander on ESP-01 board". Swoją drogą, warto poczytać tego bloga.
W skrzynce z układami scalonymi znalazłem całą masę układów PCF8574AP (demobil :-)), zatem postanowiłem wykonać własną płytkę prototypową, która zbliżyć się może funkcjonalnością do wyższych wersji.
Zgromadziłem zatem następujące elementy:
- ESP8266 w wersji ESP-01;
- 2 układy PCF8574AP (ekspandery magistrali I2C/TWI);
- niewielkich rozmiarów płytkę uniwersalną z dwustronnie metalizowanymi punktami lutowniczymi;
- regulator (stabilizator scalony) napięcia LM1117-3,3V (LDO, zatem z radiatorkiem);
- kilka kondensatorów (według dokumentacji regulatora napięcia);
- "płotek" goldpinów;
- kilkanaście drucików w izolacji;
- dwie zworki.
Najpierw jednak zrobiłem proto-prototyp na płytce stykowej. Generalnie projekt wyglądał w ten sposób:
zaś gotowa płytka prototypowa wygląda tak:
Na płytce, oprócz 16 linii wejścia-wyjścia, znalazły się goldpiny zasilania – podajemy napięcie 5V, zaś scalony regulator napięcia dostarcza wymaganych przez układ ESP 3,3V (na szczęście ekspandery I2C działają sprawnie przy tym napięciu), goldpiny sterowania – do resetu sprzętowego i włączenia trybu programowania (operacje wykonywane zworkami), transmisji szeregowej – do komunikacji z Arduino/Nucleo/konwerterem USB-UART oraz magistrali I2C. Wyprowadzenie "na zewnątrz" magistrali I2C daje możliwość podłączenia dodatkowych układów wejścia-wyjścia, gdyby się okazało, że proste, cyfrowe 16 linii nie spełnia naszych oczekiwań (np. odpada PWM, chyba, że znajdziemy coś na I2C – np. podłączymy odpowiednio zaprogramowany układ ATtiny85).
Pamiętać należy o tym, że urządzenia (układy) podłączone do I2C – w tym również zastosowane w projekcie ekspandery – muszą mieć unikatowe adresy, inaczej komunikacja nie będzie możliwa.
Warto zainteresować się układami z serii ESP8266 – dają ogromne możliwości przy bardzo niskich kosztach i względnie niskim poborze energii, łatwo się je programuje, nawet, jeśli musimy troszkę się oswoić z językiem Lua... A w zasadzie nie musimy – jeśli jesteśmy użytkownikami Arduino, to możemy programować płytki ESP (NodeMCU) z poziomu naszego ulubionego środowiska i w naszym ulubionym języku C/C++ (opis, jak dostosować Arduino IDE do współpracy z NodeMCU/ESP8266, bez problemu znajdziemy w internecie, np. tutaj /bardzo interesujący serwis!/: http://www.jarzebski.pl/arduino/arduino-i-klony/nodemcu-v2-esp8266-lua.html).
Udanych projektów i do zobaczenia przy następnym artykule :-)
Komentarze
Prześlij komentarz