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 ;)

Programowanie AVR cz.8: Przetwornik analogowo-cyfrowy oraz modulacja szerokości impulsu.

Dziś kolejny wgląd w wyposażenie mikrokontrolera ATmega48P - tym razem przyglądamy się wbudowanemu w układ przetwornikowi analogowo-cyfrowemu oraz - dostępnej również w modelach ATtiny - modulacji szerokości impulsu realizowanej przez timery. Artykuł ten jest w pewnym sensie wstępem do następnego, który pojawi się już wkrótce, a którego tematykę zdradziłem na końcu. Przetwornik A-C (skrót spotykany w anglojęzycznej literaturze to ADC od Analog to Digital Converter ) to układ pozwalający na zamianę wartości napięcia (elektrycznego sygnału analogowego ;-)) na liczbę. W przypadku mojej ATmegi przetwornik ma rozdzielczość 10-bitową, co oznacza, że wartość napięcia podawanego na wejście przetwornika może być po konwersji zapisana jako liczba z przedziału od 0 do 1023 (musimy użyć zmiennej word do zapamiętania tej liczby). Jeśli jesteśmy w posiadaniu mikrokontrolera w obudowie PDIP 28-wyprowadzeniowej, to mamy do dyspozycji sześć kanałów (niezależnych wejść) przetwornika A-C, przyporzą