Przejdź do głównej zawartości

Płytka prototypowa na bazie ESP8266 (ESP-01)

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

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany.
Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Android i zewnętrzny moduł GPS

Od kilku dni jestem w posiadaniu smyrfona z Androidem 4.1.1 na pokładzie. Kwestie związane z wyborem systemu roztrząsałem już na G+, a ten artykuł tutaj ma konkretny temat, więc nie będę wyjaśniał po raz n-ty. Po prostu zwyciężyły popularność i ekosystem oraz przywiązanie do produktów sieciowych Google. Mniejsza.

Zbliża się sezon urlopowy :-) Moi podopieczni już mają wakacje, a ja wyjeżdżam wkrótce. W każdym bądź razie wakacje to podróże - samochodem, rowerem, na piechotę, żaglówką, motorówką, samolotem... Zaawansowane urządzenia mobilne przyzwyczaiły nas już do usług lokalizacyjnych, z których najważniejszą jest GPS (na dalszym planie mamy A-GPS, lokalizacje w oparciu o sieci WiFi itp.). Często korzystamy z programów, które w coraz ciekawszy sposób wiążą naszą lokalizację, pobraną z np. GPS-a, z przeróżnymi danymi, nieraz ocierając się o AR.
Każdy współczesny smartfon, a przynajmniej znakomita ich większość, wyposażona jest we wbudowany odbiornik sygnału lokalizacyjnego (GPS, GLONASS…

Po co mi to całe Arduino?

Oczywiście tytuł ma być jedynie prowokacją. Chociaż nie do końca - artykuł jest właśnie poświęcony pracy w Arduino IDE z mikrokontrolerami, ale bez płytek Arduino.
Czym jest Arduino - wiemy wszyscy, zarówno początkujący fani programowania elektroniki, jak i zaawansowani mikrokontrolerowcy. Jeśli jednak nie do końca wiemy, zachęcam do odwiedzenia strony domowej projektu (link 5 na końcu artykułu) oraz zerknięcia np. w poradnik (link 4).

Jakiś czas temu, przełamując się i zmieniając zdanie ("o 180 stopni" ;-)) nabyłem sobie Arduino Leonardo, głównie w celu jego "obwąchania" i zapoznania się z bogatym zbiorem bibliotek dostępnych dla tej platformy. Zgoda, różne biblioteki są dostępne niezależnie od Arduino, ale i tak się zdecydowałem. Dlaczego Leonardo? Otóż miałem ochotę przyrządzić dwie pieczenie na jednym ogniu - mieć Arduino i przetestować ATmegę 32u4. Dziś doskonale zdaję sobie sprawę, że żeby pobawić się Arduino nie trzeba go w ogóle posiadać... Ale po kolei.

Pi…