ESP8266 story

Dawno nic tu nie pisałem, najwyższy czas więc nadrobić zaległości, od razu jednak ostrzegam, że będzie wpis o tematyce wyłącznie elektronicznej.

Temat przewodni – o, takie maleństwo:

2282-00

Osoby zorientowane oczywiście poznają, niezorientowanym pokrótce dopowiem, że ten niepozorny modulik wielkości przeciętnego znaczka pocztowego jest tak naprawdę kosztującym niecałe 2$ całkiem niezłym komputerem, wyposażonym od razu w interfejs wifi i kilka portów GPIO dla użytkownika. Tenże konkretny pokazany na zdjęciu to ESP8266-01, jeden z najprostszych i na pewno podstawowy, ale jest już ich cała rodzina modułów różniących się między sobą parametrami, ilością dostępnych portów i wielkością:

esp8266_family3

Zachwyciły mnie one już jakiś czas temu, mniej więcej równolegle z zachwytami nad Domoticzem (które tutaj miały zresztą odzwierciedlenie) i już wtedy wykiełkował mi w głowie pomysł, że o, na tym automatykę domową zrobić, to by było fajne wyzwanie. Bo co tu dużo mówić, moja obecna automatyka, której wybrane elementy są opisane tu na stronie, w dziale „Moje projekty”, mimo że działa od kilku już lat i robi to, co ma robić, technologicznie jest rozwiązaniem może nie całkiem średniowiecznym, ale tak… okolice Baroku, może Oświecenia…  No wstyd trochę wśród elektroników nawet się przyznawać do automatyki z softem w Bascomie napisanym 🙂

No dobra, żarty na bok, do rzeczy. Moja obecna automatyka hardware’owo jest może i nawet ok, ale na przeszkodzie w jej rozwoju stoi właśnie wybrana filozofia: goły Atmel i soft pisany w Bascomie. Głupia komunikacja ze światem zewnętrznym i możliwość sterowania własnym projektem poprzez internet staje się w tym momencie dużym wyzwaniem, podczas gdy w bardziej nowoczesnych rozwiązaniach jest to trywialna sprawa załatwiana kilkoma komendami na krzyż. Dlatego właśnie postanowiłem połączyć przyjemne z pożytecznym i nauczyć się nowej technologii, tworząc zarazem nową wersję automatyki domowej. A perypetie z tym związane będą przy okazji chyba dobrym tematem na bloga 🙂

I tu od razu, dla pełnej jasności zastrzeżenie: nie jest broń Panie Boże moją intencją pisanie poradnika „ESP8266 dla początkujących”. Po pierwsze z uwagi na to, że byłby to dwamilionytysiącpincetny tego typu poradnik w sieci (w tym pincet pińdziesiąty poradnik w języku polskim), po drugie i niemniej ważne, z uwagi na fakt, że pisanie poradnika, nawet dla początkujących przez osobę, która sama jest początkująca w temacie, chyba nie jest najlepszym pomysłem. Co prawda lektura niektórych tego typu poradników pozwala mi podejrzewać, że mnóstwo osób ma na ten temat inne zdanie, ale niech im będzie, każdy może mieć parcie na klawiaturę 😉  
Tak więc, opisując swoje perypetie nie będę powtarzał informacji, które są do znalezienia wszędzie, skupię się raczej na sprawach, które nie były wg mnie oczywiste, bądź z jakichś przyczyn sprawiły mi problem.

Zanim zacznę, jeszcze akapit na temat podstawowych założeń projektu, inaczej mówiąc, co chcę osiągnąć: zamarzyły mi się składane ze sobą klocki, w formie łączonych w łańcuch modułów: moduł procesora z wyjściem „w świat” i dopinane do jego bloku moduły z wejściami i wyjściami, całość komunikująca się między sobą po szynie I2C, moduły IO w pełni powtarzalne, tak, by awaria jakiegoś nie była tragedią, tylko kończyła się najwyżej prostą podmianką na inną sztukę. Oczywiście, niewykluczone, że do projektu z czasem dojdą moduły nietypowe, dla nietypowych zadań, ale na początek, do obsługi oświetlenia, właśnie tyle jest potrzebne i tyle wystarczy. Istotne jest dla mnie też, by taki zestaw CPU plus moduły IO był w stanie działać w pełni autonomicznie, realizując typową funkcjonalność tego typu sterownika, czyli sterowanie poszczególnymi wyjściami przez odpowiadające im wejścia, bo trochę głupio by było, gdyby nie dawało się światła w domu zapalić, z powodu, że internet się zmulił 🙂 Tak więc sterownik sam z siebie ma potrafić to, co potrafią moje obecne sterowniki (te podstawowe), natomiast dzięki komunikacji ze światem zewnętrznym chcę mieć możliwość podłączenia takiego sterownika do serwera Domoticza i wtedy to już hulaj dusza 🙂
Wstępny projekt tych modułów już mam, ale ponieważ robiłem go mając jeszcze blade pojęcie o niuansach zabaw z ESP8266, jest niemal więcej, jak pewne, że dużo się w nim jeszcze zmieni, zanim go fizycznie zacznę robić. Żeby więc nie wybiegać w przyszłość i nie uprzedzać faktów, zostawmy automatykę póki co na boku, zacznijmy od podstaw:

Kupiłem sobie ESP8266 i… i co?

Wiadomo, kupiliśmy, wcześniej cośtam już czytaliśmy w internetach, więc wiemy, że trzeba do modułu wgrać firmware, a do tego jest potrzebny jakiś konwerter USB/RS232. Według internetowych opisów jest to proste, dla mnie jednak stało się pierwszym (na szczęście dość trywialnym) problemem. Ano, miałem moduł ESP, miałem konwerter, jedno z drugim podłączyłem jak należy (RST zostawiłem niepodłączony, CH_PD zaś należy z VCC po prostu zewrzeć):

esp8266_flash_prog_board_sch

(rysunek z http://www.esp8266.com)

Wgrywanie firmware za pomocą programu NodeMCU Flasher odbyło się bezproblemowo, po zakończeniu wgrywania odłączyłem GPIO0 od masy, zresetowałem moduł (odłączając go na chwilę) i zgodnie z instrukcjami z czytanych stron w tym momencie powinienem po ponownym jego włączeniu móc się z nim skomunikować poprzez RS232 z dowolnego terminala. A tu nic! Stukam, pukam, testuję wszystkie możliwe prędkości transmisji w terminalu, kombinuję z nietypowymi ustawieniami interfejsu, a ze strony modułu nic, tylko głucha cisza. Inne moduły sprawdzam – to samo. Inny firmware – to samo. 
Zacząłem szukać zbliżonych problemów po internetowych forach, pierwsze, co znalazłem, to problemy z konwerterem USB/RS232. Jak się dowiedziałem, są lepsze (z chipsetem innym, niż CH340) i gorsze (z chipsetem CH340, który jakoby może wymagać specjalnych sterowników), ja rzecz jasna miałem ten gorszy. Pewien, że znalazłem przyczynę niepowodzeń, zignorowałem odzywający się gdzieśtam w tle głos rozsądku mówiący, że gdybym miał problem z konwerterem, to nie dałbym rady wgrać firmware, zamówiłem sobie nowy konwerter, tym razem na chipie CP2303. 
Niestety, konwerter przyszedł i sytuacja nie zmieniła się nic a nic. Nadal byłem w stanie wgrać firmware, a potem słyszecisze jedynie. jeszcze popytałem wtedy, poczytałem i zwróciłem uwagę (czy raczej zwrócono mą uwagę) na zasilanie. Jakoby moduły ESP prądożerne są i nie powinno się ich zasilać tylko z konwertera, bo ten na wyjściu 3,3V (z tego napięcia zasilamy moduł ESP) ma niedużą wydajność prądową, bodajże katalogowo 250mA max. Myślę sobie, jeśli ESP mi to zasilane przeciąża, to ono będzie sobie przysiadać, podpinam woltomierz, a tu wszystko ok, 3,3V sztywne jak drut! Ponieważ jednak była to jedyna sensowna możliwość do sprawdzenia, powzdychałem sobie i zasiliłem wynalazek z zewnętrznego zasilacza. Laboratoryjny, pobór prądu pokazywany na wyświetlaczu, wynosił mniej więcej 50mA. Wszystko ok, zatem, o co mogło chodzić? Dla pewności wgrałem firmware jeszcze raz, odpalam terminal, ustawiam parametry transmisji jak w poradnikach sugerują, resetuję moduł i…. Alleluja!

7634599600_1478956244.jpg_(1600×900)_-_Google_Chro_2017-02-23_14-06-13

Zaczęło działać. I nie ważne, że jedyny efekt działania, to póki co komunikat o braku działania, na tym etapie tak ma być! Ważne, że mamy ten ptaszek u dołu, że możemy coś do modułu wysłać i moduł nam odpowie. Co więc było problemem? Ewidentnie, tak jak mi sugerowano, winne było zasilanie, ale czemu, u licha, skoro moduł, jak cały czas widziałem na amperomierzu pobiera sobie około 54mA, konwerter zaś powinien sobie poradzić do 250mA? Rozwiązanie tej zagadki w tym momencie było już dość oczywiste, ale z czystej ciekawości chciałem je zobaczyć naocznie. Zrobiłem więc jeszcze jedną próbę: zasiliłem moduł przez włączony w szereg dwuomowy opornik, do opornika zaś podłączyłem sobie oscyloskop. I wszystko stało się jasne: oto, jak, proszę wycieczki, wygląda ów pobór średniej wartości 54mA prądu w czasie (50mA na działkę, zero na poziomie zaznaczonym labelką „1” po lewej stronie):

unnamed

Wartości średnie, niestety potrafią być mocno mylące. Bo średnio, to jak stare powiedzenie głosi, ssaki mają po trzy nogi… Tu też średnio jest ok. 50mA. Chwilowo zaś czasem 15mA, a czasem 350mA. A ponieważ wartość średnia prądu zasilającego jednak się mieści w możliwościach konwertera nawet z dużym zapasem, zapewne zewnętrzny, osobny zasilacz nawet nie był potrzebny, do rozwiązania problemu wystarczyłby większy kondensator elektrolityczny o dobrych parametrach (bo te strzały prądowe jednak solidne i dość strome) albo jeszcze lepiej eletrolit i monolit, powiedzmy 100uF + 100nF.
W trybie wgrywania firmware po prostu nie ma tych pików prądowych (nie działa interfejs wifi? Tak podejrzewam, że to on tu zżera prąd w momencie cykli TX) i wtedy nie ma tez problemu, nawet przy zasilaniu z gołego konwertera.

Zatem wniosek końcowy, dla czytających po łebkach i na użytek googla: zasilanie modułów ESP8266 tylko z gołego konwertera wystarcza jedynie do wgrania firmware, potem już ma zbyt małą wydajność do poprawnej pracy. Należy zapewnić zasilanie 3,3V z zewnątrz, choć z uwagi na impulsowy charakter poboru prądu, powinno też wystarczyć dorzucenie do zasilania kondensatorów 100uF + 100nF.

I druga rzecz: konwerter. Opinie o problematyczności konwerterów z chipem CH340 zapewne nie wzięły się znikąd, niemniej przynajmniej mój egzemplarz działa bez najmniejszych problemów. Jedyna jego zauważona przeze mnie wada w porównaniu do CP2303, to jeszcze mniejsza wydajność wyjścia zasilania 3,3V, no ale ten problem tak czy tak jakoś trzeba obejść. Jednakże, jeśli ktoś dopiero planuje zakupy, lepiej dmuchać na zimne i poszukać takiego konwertera, który jest sprawdzony i pewny. Na przykład na którejś wersji chipsetu CP2xxx

Gotowy moduł deweloperski NodeMCU

A jeśli ktoś jest wielbiciele rozwiązań typu Arduino, nie chce się bawić w podłączanie konwerterów, kondensatorów, osobnych zasilaczy, chce mieć po prostu płytkę z gotowym interfejsem USB, samodzielnie załatwiającą problem zasilania i jeszcze najlepiej z portami w wygodnej formie możliwej do wykorzystania na płytce stykowej? Takie rozwiązanie też jest! I faktycznie jest bardzo wygodne i choć jest oczywiście droższe, od „gołego” modułu ESP8266, to jego cena jednak też nie jest zaporowa, wynosi 3-4$, za którą to cenę dostajemy fajną i bardzo wygodną płytkę wyposażoną w moduł procesora ESP-12, a do tego zamontowany od razu na płytce konwerter USB, osobny zasilacz 3,3V (korzystający z napięcia z interfejsu USB, więc nie potrzeba tu osobnego zasilacza, jednak w przeciwieństwie do zasilania gołego modułu przez konwerter, tu mamy do dyspozycji całą wydajność prądową USB, a nie tylko jej ułamek), przycisk „FLASH”, przycisk „RESET” i porty wyprowadzone w dwóch rzędach goldpinów:

NodeMCU

Zabawa z tym modułem, prócz niewątpliwej wygody korzystania w fazie projektowej niczym się nie różni od „gołego” modułu ESP, zatem można sobie przy pomocy tego modułu opracować urządzenie, przetestować różne rozwiązania choćby na płytce stykowej, a potem finalne dzieło wykonać już przy użyciu mniejszych modułów, wygodniejszych do zamontowania w finalnym urządzeniu.

O czym zaś tu jeszcze warto powiedzieć, czego się nie znajdzie w typowych podsuwanych przez google poradnikach n/t NodeMCU? Ano choćby o tym, że tu też warto zanim się kupi, poczytać dokładniej (mądry Jarek.P po szkodzie), bo w przypadku tego modułu też są różne wersje, lepsze i gorsze. Trochę ciekawostek na temat dostępnych modułów i różnic między nimi można znaleźć tutaj (–> link), ja zaś podzielę się własnymi doświadczeniami. Bo rzecz jasna, jeśli w handlu są dostępne lepsze i gorsze wersje tego samego (teoretycznie) modułu, to choćby z praw Murphy’ego (delikatnie wspomaganych faktem, że z wrodzonego sknerstwa szukałem ofert tańszych, a nie droższych) wynika, że kupując sobie dwie sztuki NodeMCU, kupiłem akurat te gorsze, prawda?
Dużych różnic między lepszymi i gorszymi modułami nie ma. Na obu siedzi taki sam procesor, mają tą samą pinologię i możliwości. Istotne dla użytkownika mogą być właściwie dwie różnice: pierwsza jest taka, że w modułach gorszych konwerter USB/RS232 ma chipset CH340, a w lepszych CP2102 (choć, jak pisałem, u mnie CH340 działa bezproblemowo), druga różnica, może mogąca mieć odrobinkę większe znaczenie dla dociekliwego użytkownika, to fakt, że te tańsze moduły często bywają felerne. Takie też były oba zakupione przeze mnie moduły, totalne zwłoki. Od cegły różniły się prócz gabarytów i wagi tylko tym, że miały na sobie niebieskiego leda, który na krótko się zapalał po włączeniu zasilania. No i dzięki wygodnym goldpinom można się było tym modułem na przykład uczesać. Albo podrapać. Z cegłą nie jest to może do końca niemożliwe, ale na pewno trudniejsze i mniej wygodne.

Tu pomocny okazał się być kolega, który naprowadził mnie na możliwe rozwiązanie wspominając, że te „gorsze” moduły podobno problemy z lutowaniem miewają. I że cośtam w nich potrafi nie stykać. Złapałem więc za lutownicę i po prostu przelutowałem cały moduł. Najpierw ESP pin po pine, a potem jeszcze dla pewności konwerter i wszystkie te elementy, przy których lutowia było wyraźnie skąpo. Przelutowałem, podłączyłem, działa. Tak po prostu, bez żadnych problemów.

Kolejny wniosek końcowy: jeśli chcemy kupić NodeMCU, to patrzmy, jakiego producenta moduł kupujemy. Niech to będzie raczej Amica (nie mylić z Amicą Wronki), niż Lolin bądź jeszcze inny wynalazek. A jeśli jednak kupimy sobie moduł nieprawego pochodzenia, to zawsze można spróbować podźwignąc takiego bękarta do pełni praw przysługujących legalnemu potom… wyrobowi przy pomocy lutownicy, którą należy przelutować właściwie co się da, dokładając przy tym lutowia (nie dam tu głowy, ale mam wrażenie, że zawodzi lutowanie samego modułu ESP, więc jeśli ktoś nie ma wprawy w lutowaniu SMD, można najpierw spróbować przelutować same styki tego modułu, może wystarczy). 

I tyle na dziś, w następnym odcinku będzie o wyborze platformy programowej.

This entry was posted in , , , . Bookmark: permalink.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Archiwum

  • 2021 (3)
  • 2020 (2)
  • 2019 (8)
  • 2018 (9)
  • 2017 (24)
  • 2016 (66)
  • 2015 (39)

Wyszukiwanie

Licznik odwiedzin

0358247
Visit Today : 135
Hits Today : 337
Total Hits : 1166036
Who's Online : 1