Witaj świecie
Tak, Drogi Czytelniku. To już trzeci wpis projektu (wiem – z numeracji wynika co innego). Programowanie zacząć czas. Mamy już zainstalowane najnowsze środowisko Arduino. A właściwie nie mamy – bo od ostatniego wpisu pojawiła się nowsza wersja – z tym, że na pierwszy rzut oka znów niekompatybilna, więc pozostajemy przy 1.6.7). Mamy też dodane narzędzia do programowania modułów opartych na ESP8266. Piałem o tym jak proste w dzisiejszych czasach jest programowanie elektroniki – pora tego dowieść.
[Aktualizacja 15-03-2016: Warto jednak dokładnie czytać mądre strony o instalacji środowiska ESP8266 na Arduino. Nie poszło, bo zapomniałem o katalogu „esp8266com”. Po poprawieniu działa wszystko świetnie z Arduino 1.6.8 – mea culpa.]
It’s alive!
W poprzednich podejściach do tematu zdarzało się, że próba komunikacji z modułem radiowym czy urządzeniem nie powiodła się. Nie wiadomo co było przyczyną – błędy w implementacji komunikacji z modułem, nieodpowiednie zasilanie czy napięcia, problemy z przylutowaniem czy plamy na słońcu. To kolejny powód, żeby w pierwszych próbach wykorzystać NodeMCU a nie sam ESP8266. Odpadają problemy z zasilaniem (wbudowany stabilizator), komunikacją (wbudowany konwerter UART) i problemy lutownicze (NodeMCU jest sprzedawane w pełni złożone z przylutowanymi nóżkami). Nadal problem stanowią plamy na słońcu – ale przynajmniej wiemy kogo winić w przypadku niepowodzenia.
Co potrzebujemy do uruchomienia naszego najpierwszego programu na NodeMCU? Oto lista:
- NodeMCU
- Kabel microUSB
No i oczywiście komputer z portem USB, na którym skompilujemy nasz program i wgramy na urządzenie. Tak prezentuje się nasz zestaw uruchomieniowy:

Podłączamy urządzenie do portu USB. Powinien nam się pojawić port szeregowy. Uruchamiamy Arduino. Uwaga – na Ubuntu i być może na innych Linuksach dostęp do portu /dev/ttyX jest ograniczony – najprościej jest uruchomić arduino jako root – ale pewnie nie jest to rozwiązanie do końca bezpieczne – jak ktoś ma lepszy pomysł to zapraszam do opisania w komentarzu :). W menu Narzędzia (Tools – w wersji anglojęzycznej) mamy kilka opcji do ustawienia. Przede wszystkim Płytka (Board) – tu wybieramy „NodeMCU 1.0 (ESP-12E Module)”. Upload using – wybieramy Serial (programowaniem OTA czyli Over the Air zajmiemy się później ale pierwsze programowanie musi odbywać się przez port szeregowy). CPU Frequency – zostawiamy 80MHz (i tak jest to wielokrotnie wyższa częstotliwość niż te osiągane w Arduino – jak będzie nam brakować to zawsze możemy zwiększyć). Flash size – zostawiamy „4M (3M SPIFFS)” (na pewno będzie jeszcze o układzie pamięci w naszym środowisku – dla niecierpliwych link do dokumentacji). Upload speed zostawiamy na 115200. I na koniec najważniejsze – wybieramy port szeregowy, na którym jest nasz NodeMCU. Wgrywamy sobie gotowca z menu Plik -> Przykłady -> ESP8266 -> Blink.
/* ESP8266 Blink by Simon Peter Blink the blue LED on the ESP-01 module This example code is in the public domain The blue LED on the ESP-01 module is connected to GPIO1 (which is also the TXD pin; so we cannot use Serial.print() at the same time) Note that this sketch uses LED_BUILTIN to find the pin with the internal LED */ void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level // but actually the LED is on; this is because // it is acive low on the ESP-01) delay(1000); // Wait for a second digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH delay(2000); // Wait for two seconds (to demonstrate the active low LED) }
Klikamy „Wgraj”. I naszym oczom ukazuje się to:
No cóż – może iluminacja nie jest oszałamiająca (dla osób mniej uważnych – obrazek powyżej to animacja) – ale potrafimy „sterować światłem”. Co prawda jest to tylko jedna dioda (łatwo można dodać drugą, która jest na ESP-12 obok anteny) i nie jest to jeszcze sterowanie po WiFi – ale jest to nasz pierwszy działający kod. No może nie nasz – tylko przykładowy – ale w następnych etapach będziemy go rozwijać i wtedy będzie już bardziej nasz.
Pająk
Czas na sterowanie czymś poważniejszym. Zróbmy sobie pająka. Weźmy zasilacz 5v, NodeMCU i moduł z dwoma przekaźnikami (sterowanymi przez optotranzystory). Dodajmy również dwie listwy zasilające – jako urządzenia, które będziemy sterować (wpiąć sobie tam będziemy mogli cokolwiek). Do zasilacza podpinamy tylko 2 kabelki – z fazą i neutralny („uziemić to sobie można w domu pralkę” – jak mawiała mgr Ratuszek na laboratoriach). Do listew zasilających z kolei dołączamy kabel neutralny i uziemienie (na wypadek jakbyśmy chcieli sterować zasilaniem pralki). Fazę natomiast dla każdej listwy przepuszczamy przez przekaźnik. I to tyle prac z niskim napięciem. Przejdźmy do napięć bezpiecznych. 5V z zasilacza podpinamy jako zasilanie do nóżki Vin NodeMCU oraz jako napięcie cewki do modułu z przekaźnikami. Z nodeMCU napięcie 3.3V podłączamy jako napięcie referencyjne do modułu przekaźników. dwa GPIO z NodeMCU podłączamy do wejść modułu przekaźników. Pozostaje nam połączyć masy układów. Całość układa się w taki piękny schemat:
Którego sprzętowe urzeczywistnienie wygląda tak:
Piękny pająk, prawda? Pracuję nad upchnięciem wszystkich tych kabli w małe pudełko śniadaniowe z Ikei. Będzie to trochę ładniej wyglądać i będzie trochę bezpieczniejsze. Czego nam jeszcze brakuje? Oczywiście przycisków. Dołączymy je później. W najbliższych dniach skupmy się na pierwszym etapie programowania – prosty interfejs www, z którego będziemy mogli sterować naszymi listwami – potem przyjdzie czas na przyciski. Dla osób szczególnie dociekliwych poniżej schemat modułu z przekaźnikami.

Drugi pająk
Uważny czytelnik przypomniałby mi, że w pierwszym wpisie o uoo-light umieściłem zdjęcie jeszcze jednego prototypu. Teraz o nim. Zbudowany na bazie lampki z ikei za 11 złotych. Schemat jak wyżej tylko, że:
- brakuje uziemienia (lampki tej nie da się w żadnym razie używać w charakterze pralki),
- jest tylko jedno wyjście z modułu przekaźników (jest użyte do żarówki lampkowej),
- na „stelażu” z tektury umieściłem zasilacz, nodeMCU i dodatkowo 8 diod z wbudowanymi kontrolerami RGB (WS2812B),
- dodałem do wejścia analogowego fotorezystor z rezystorem jako czujnik natężenia światła.
Lampka może nie wygląda pięknie (zwłaszcza po zdjęciu klosza), ale jak najbardziej nadaje się na nasz prototyp – i w dodatku możemy trochę poszaleć z kolorami (4 indywidualnie programowalne diody święcą w górę i 4 w dół). Dzięki dwóm różnym prototypom jest większa szansa na bardziej modułowy soft z naszej strony umożliwiający wgrywanie tegoż softu na różne konfiguracje sprzętowe. Poniżej kilka zdjęć lampki.