piątek, 14 października 2016

ESP8266 - następca Arduino

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.

Dla potrzeb przyszłych implementacji przygotowałem "czysty" kod zawierający tylko podstawowe elementy:
- konfiguracje portów
- nawiązanie połączenia WiFi
- nawiązanie połączenia z BLYNK
- timery
- miganie LEDami w ukladzie i w aplikacji w telefonie jako kontrola poprawnej pracy systemu
- procedury samokontroli nawiązania łączności WiFi i z BLYNK
- Watchdog



Jest to baza dla przyszłych programów, które chciałbym uruchomić na tym chińskim wynalazku
Do ciekawszych fragmentów kodu zaliczam
  • watchdoog - linie 15-17, 76-85, 104-105 i 116
  • nie wstrzymujące obiegu programu logowanie do WiFi i BLYNK - linie 122-127
  •  procedura testowania i resetowania przy braku komunikacji - linie 137-190
I to tyle na dziś.

A  więc cd ma niewątpliwą szansę nastąpić..........


Brak komentarzy:

Publikowanie komentarza