ESP8266 - mały może więcej
Długo zbierałem się by poważnie potraktować to coś. Z większości postów wyziera dość pesymistyczny obraz chińskiego procesora. Niby 32 bitowy RISC z 80 MHz 512 kB 96 kB RAM ale tylko 9 dostępnych portów GPIO (a tak naprawdę tylko 5! do swobodnego zaprogramowania), SPI I2C UART i jedno 10 bitowe wejście A/D. To wszystko bardzo skromne jak na dzisiejsze procesory tej klasy. Chimeryczny, bardzo wrażliwy na zakłócenia, generujący dziwne przebiegi na swoich pinach w stanach nieustalonych, bez porządnej dokumentacji, ciągle zmienianym firmware - generalnie lipa.
I tylko dwie rzeczy, które rozkładają konkurencję na łopatki:
- pełne sprzętowe WiFi
IEEE 802.11 b/g/n z
WEP i
WPA/WPA2
- CENA - 1,7 - 2 $ na Aliexpress
To w zasadzie przesądza kwestię czy warto się czymś takim zajmować. Pełne WiFi a nawet pełny punkt IoT za 2$! Oczywiście, że tak.
Dodatkowy argument to wsparcie ESP8266 przez Arduino IDE i działające w większości bez problemu standardowe biblioteki z tego systemu. Czego chcieć więcej. Świat IoT bez Arduino ? Zobaczymy.....
Do tej pory ESP-01 dzielnie mi służył jako łącze ze światem dla ulubionego NANO. I świetnie ten tandem wg mnie współpracuje. Szczególnie że Atmega jest dosyć stabilna z zainstalowanym BLYNK a ESP działa z oryginalnym firmwarem i SDK. I w razie czego ustawia do pionu ESP gdy ten traci przytomność czyli komunikację ze światem. Ale to jednak dwa procesory przy czym słabszy i o mniejszej pamięci bierze na siebie obsługę całego systemu. Coś nie tak z punktu widzenia logiki.
Pierwszą próbę samodzielnej pracy ESP-07 już zaliczyłem -
miernik wilgotności gleby w zasadzie zadziałał . Ale to zabawka w porównaniu z tym co chciałbym na ESP uruchomić.
Sam goły ESP- 07 lub 12 słabo nadaje się do zastosowania. Rozstaw 2mm i konieczność dołożenia szeregu rezystorów by mogło to-to działać zmusza do zastosowania płytki przejściowej. Są takie ale jakieś niedorobione. Tylko trzy rezystory podpinające na takiej dużej płytce? - mam ale nie używam
Ciekawym gotowym rozwiązaniem wydaje się natomiast nowa płytka D1 MINI - ma na pokładzie w zasadzie wszystko a dodatkowo przejściówkę na RS do programowania ESP. I tylko 2,60$ na Aliexpress. Zamówiłem
W oczekiwaniu na przesyłkę z Chin zabawiłem się w stworzenie własnej płytki przejściowej takiej min-max. Minimum powierzchni maksimum elementów. W mojej technologii wykonania mógł to być druk tylko na elementy przewlekane, Ale i tak udało mi się upchnąć na płytce całkiem sporo.
Rezystory R1 R2 to dzielnik napięcia by móc przyłączyć serial z logiką 5V. Rezystory na CH_PD, Reset GPIO0 GPIO2 GPIO15 oczywiste. Dodałem oporniki na GPIO4 i 5 jako podpinające do I2C by można bezpośrednio sterować dodatkowe moduły z tą szyną. LEDy dodałem na mało przydatne piny GPIO0 i GPIO15, które muszą mieć określone stany na moment wgrywania oprogramowania i uruchamiania programu. LEDy dopięte są tak by wymuszać konieczne stany na tych portach (GPIO0 do VCC, GPIO15 do masy). R12 to kondensator :) 100nF na zasilaniu.
Dla ułatwienia piny do programowania wyprowadziłem po jednej stronie płytki pod kątowe złącze szpilkowe.
A to gotowa płytko do zamówienia w ulubionej firmie MERKAR.pl
Zamówiłem - dostałem 16 szt. Będzie w czym rzeźbić choć cena malutkiej płyteczki to prawie 5 zł. D1 MINI wychodzi jednak taniej. I to zmontowana i z elementami. Nic to - moja jest LEPSZA :). Mogę na przykład wstawić ESP-07 lub ESP-07s z dodatkową anteną zewnętrzną.
Pierwsza warstwa oporniki, druga ESP-07, złącza szpilkowe i płytka gotowa do testów.
Dla nowej płytki postanowiłem wgrać najnowsze oprogramowanie Arduino IDE i BLYNK. Arduino.cc (tylko w nim umiem zainstalować dodatkowe płytki ESP) wydało wersję 1.6.12 ze znakomitą funkcją zwijania części kodu należących do danej funkcji czy procedury. Przy pisaniu większych kodów wprost nieodzowne!
I spróbowałem całość uruchomić z programem
miernika wilgotności gleby.
Kompilacja wysypała się na pierwszym zakręcie. Wracam do wersji 1.6.9 - ładnie się kompiluje ale płytka zachowuje się bardzo niestabilnie - nie chce nawiązać połączenia z WiFi i trzeba ją kilkukrotnie resetować.
Wracam do wersji 1.6.12 szukając co może wieszać kompilację. Z logów wynika że brak jakiś plików dla płytki ESP. Zaraz - już kiedyś to chyba przerabiałem. Oczywiście !!! Problem tkwi w braku podfolderu
>Portable<
Kasuję wszystko i instaluję IDE i sterowniki do płyty ESP od nowa. Poszło. Jeszcze tylko ten problem braku połączenia z WiFi. Co zaskakujące cały program działa bez problemu a procesor nawet nie próbuje nawiązywać łączności przez WiFi. Widać to po zasilaczu i po wielkości pobieranego prądu.
Może program lub procesor wyłączył WiFi - jest to możliwe w ESP8266 na kilka sposobów. Ale znam tylko jeden sposób by na powrót aktywować moduł RF do komunikacji WiFi. Trzeba wprowadzić procesor w stan uśpienia DEEPSLEEP z parametrem WAKE_RF_DEFAULT
Dodaję więc wywołanie procedury zwierając jednocześnie porty RST i GPIO16 (niezbędne dla wybudzenia procesora)
ESP.deepSleep(x * 1 * 1000 * 1000, WAKE_RF_DEFAULT);
Po uśpieniu i wybudzeniu procesora transmisja WiFi nawiązuje się bez problemu. Ale po odłączeniu procesora od zasilania problem powraca. Przeglądarka Internetu podpowiada że może to być normalne zachowanie procesora w trybie oszczędzania energii - gdy brak jest danych do wysłania przez WiFi przechodzi on automatycznie w stan wyłączenia modułu RF. Ale dlaczego gdy próbuje coś wysłać procesor nie przywraca działania części radiowej modułu WiFi już nie znalazłem.
Ok na razie - do czasu znalezienia odpowiedzi na to pytanie - pozostanie mi przywracanie działania modułu RF poprzez chwilowe usypianie procesora. Dodam to do procedury samokontroli prawidłowej pracy systemu.
I to tyle na dziś.
A więc cd ma niewątpliwą szansę nastąpić..........