Moduł D1 mini kompatybilny z Wemos ułatwia wykorzystanie modułu WiFi ESP8266-12E m.in. dzięki wbudowanemu konwerterowi USB<->RS-232 oraz wyprowadzeniu sygnałów na złącza o wymiarach zgodnych z płytkami stykowymi. Moduł ESP8266-12E w komplecie z płytką przekaźnika pojawił się jako gadżet dostępny do zamówienia na elektroda.pl moduł będzie gotowy do pracy ze środowiskiem Arduino. Zestaw pozwala w bardzo prosty sposób na rozpoczęcie eksperymentów z IoT. Jeżeli planujecie wykorzystać moduły D1 mini Shields wygodne będzie użycie listw żeńskich, jeżeli chcecie umieścić D1 mini na płytce stykowej wygodniejsze mogą być listwy męskie (w zestawie dostępne trzy rodzaje). Podczas montażu warto zadbać o brak metalowych elementów w pobliżu anteny drukowanej. Mimo że układ może być zasilany z USB napięciem 5V porty ESP8266 pracują z napięciem 3.3V. Złącze micro USB pozwala na zasilanie układu z portu USB lub np. powerbanku lub ładowarki USB.
Środowisko Arduino.
Moduł został przetestowany z najnowszą dostępną wersją środowiska 1.8.2 www.arduino.cc aby ułatwić pracę z https://github.com/esp8266/Arduino uruchamiamy środowisko Arudino i wybieramy:
Plik->Preferencje->Dodatkowe adresy URL do menadżera płytek - wklejamy: http://arduino.esp8266.com/stable/package_esp8266com_index.json
następnie:
Narzędzia->Płytka->Menadżer Płytek-> i wyszukujemy "wemos" a następnie instalujemy paczkę w Wemos D1 mini z ESP8266:
Po podłączeniu D1 mini do portu USB w systemie powinien pojawić się nowy port szeregowy:
Po tych zabiegach możemy wybrać płytkę D1 mini oraz wskazać aktywny port COM:
Płytka przekaźnika.
Płytka przekaźnika wymaga zasilania napięciem 5V (cewka przekaźnika) załączony przekaźnik pobiera około 60mA. Przekaźnik jest załączany poziomem niskim i stan wysoki 3.3V modułu D1 mini może być niewłaściwie interpretowany przez płytkę przekaźnika (jako stan niski, w testowanym egzemplarzu obniżenie napięcia do 3.5V powodowało zadziałanie przekaźnika, wyłączenie przekaźnika przy około 3.8V). Można przerobić płytkę lub rozwiązać problem programowo. Przy rozwiązaniu programowym dla uruchomienia przekaźnika należy ustawić wybrane wyjście ESP8266 jako wyjście w stanie niskim, natomiast dla wyłączenia przekaźnika jako wejście w stanie wysokim pullup.
Sterowanie przekaźnikiem przez przeglądarkę - przykład.
Na podstawie przykładów dostępnych w środowisku Arduino dla D1 mini w prosty sposób można rozpocząć próby z uruchomieniem interfejsu WEB, który pozwoli na sterowanie przekaźnikiem poprzez przeglądarkę, parametry logowania do sieci Wi-Fi (ssid i hasło) umieszczamy w kodzie:
Przykładowy kod wysyła informacje o pracy urządzenia z wykorzystaniem konsoli szeregowej (USB-RS232) dzięki temu znamy m.in. adres MAC i adres IP modułu. W docelowym rozwiązaniu warto aby moduł miał stały adres IP (np. ustawienia DHCP, lub ręczna konfiguracja IP modułu).
Rozbudowując kod możemy dodać np. prostą podstawową autoryzację WEB, do której parametry logowania zostaną zapisane w kodzie jawnym tekstem:
Aby komunikować się z urządzeniem wystarczy przeglądarka internetowa uruchomiona w segmencie sieci, który obsługuje access point Wi-Fi do którego łączy się moduł ESP8266.
Niektóre routery nie umożliwiają ruchu pomiędzy klientami Wi-Fi wtedy nie będzie można uzyskać dostępu do zalogowanego ESP8266. Dzięki przekierowaniu portów na routerze teoretycznie można umożliwić dostęp z internetu jednak nawet po ulepszeniu kodu ze względów bezpieczeństwa lepiej sprawdzi się tutaj model chmurowy niż komunikacja bezpośrednia.
Rozwiązania chmurowe.
W takim rozwiązaniu urządzenia IoT łączą się do serwera usługodawcy wysyłając informacje oraz pobierając instrukcje, chcąc kontrolować swoje urządzenia również łączymy się do usługi z wykorzystaniem przeglądarki lub aplikacji zainstalowanej na smartfonie.
Blynk.
Aby wykorzystać http://www.blynk.cc w środowisku Arduino wybieramy:
Szkic->dołącz bibliotekę ->zarządzaj bibliotekami wyszukujemy i instalujemy bibliotekę blynk.
Instalujemy aplikację Blynk na smartfonie, tworzymy nowe konto oraz nowy projekt, aplikacja jest intuicyjna i „prowadzi za rękę” poprzez kolejne kroki. Na podanego maila otrzymujemy token.
Wykorzystujemy przykład ESP8266_Standalone i wprowadzamy dane do logowania do naszej sieci Wi-Fi oraz token Blynk:
W nowym projekcie dodajemy przycisk, który przypisujemy do wyjścia D1 modułu, w Blynk możemy w prosty sposób sterować bardziej zaawansowanymi urządzeniami (np. serwomechanizmami) a także odbierać dane (np. temperatura) i ustawiać powiadomienia na e-mail twitter lub powiadomienia na smartfon.
Po uruchomieniu przykładu na płytce D1 mini, otrzymamy informacje diagnostyczne na konsoli szeregowej, przy pomocy aplikacji na smartfonie będziemy mogli kontrolować stan przekaźnika z dowolnego miejsca na ziemi gdzie będzie dostęp do internetu.
W uproszczony sposób rozwiążemy problem z płytką przekaźnika, która zasilana napięciem 5V wymaga sterowania stanem niskim i może sprawiać problemy przy sterowaniu napięciami 0 i 3.3V. W szereg na połączeniu sygnału IN i wyjścia D1 modułu włączamy LED (katodą w kierunku modułu), spadek napięcia powinien zapewnić prawidłowe działanie (powinna się sprawdzić także dioda zenera o napięciu ~3V).
Najlepiej wykonać trwałą przeróbkę na płytce przekaźnika.
Na filmie poniżej można zobaczyć zmienne opóźnienie pomiędzy wysłaniem komendy a zmianą stanu przekaźnika.
Supla.
Podobny do blynk polski projekt znajdziecie tutaj: https://www.supla.org/pl/
Wysyłanie danych do thingspeak.
Thingspeak to jedna z przykładowych usług pozwalająca na odbieranie danych od urządzeń IoT. Po założeniu konta odczytujemy nasze API Key, tworzymy nowy kanał oraz odczytujemy jego ID. Do środowiska Arduino dodajemy bibliotekę ThingSpeak.
Poniżej przykładowy kod pozwalający wysyłać do utworzonego kanału dane o temperaturze z czujnika z wyjściem analogowym TMP36.
Czujnik zasilamy z 3.3V (pin 1 czujnika), pin 3 łączymy z GND, natomiast sygnał z pinu 2 podajemy na wejście analogowe modułu A0. Wykorzystanie czujników z wyjściem cyfrowym (np. DS18B20) pozwoli na łatwą obsługę większej liczby czujników przez jeden moduł D1 mini.
Już po chwili w serwisie thingspeak możemy obserwować historię przesyłanych danych. Urządzenie pobiera kilkanaście miliamperów w przerwach pomiędzy transmisjami:
Oszczędzanie energii i wbudowany zegar.
Pobór prądu przez D1 mini w zależności od wykonywanego programu i ciągle zestawionego połączenie WiFi może wynosić nawet kilkadziesiąt miliamperów: http://bbs.espressif.com/viewtopic.php?t=133
Możemy uśpić moduł ESP i wykorzystać wewnętrzny zegar do podania sygnału resetu modułu po określonym czasie. Po resecie zmienne w programie nie zostaną zachowane, ale możemy uzyskać dość duże oszczędności energii oraz regulowane długie czasy uśpienia (np. 24h). Aby korzystać z funkcji głębokiego uśpienia ESP.deepSleep() należy połączyć pin D0 z Reset, w innym przypadku RTC nie będzie mógł wykonać resetu modułu:
Poniżej przykładowy kod:
Warto wspomnieć o możliwości zmiany firmware w ESP np. na nodemcu lub inny: https://github.com/nodemcu/nodemcu-flasher to może być dobre rozwiązanie do rozbudowania istniejącego urządzenia o moduł WiFi komunikujący się poprzez UART lub okazja do zapoznania się z LUA.
Warto zapoznać się z usługami pozwalającymi na zbieranie, prezentację i analizę danych z urządzeń IoT:
https://www.pubnub.com/
https://io.adafruit.com/
http://dweet.io/
http://freeboard.io/
https://data.sparkfun.com/
http://ubidots.com
ESP8266 może służyć do realizacji znacznie bardziej skomplikowanych zadań niż włączanie i wyłączanie przekaźnika, możemy np. uruchomić jednokanałową bramkę LoRaWAN https://www.youtube.com/watch?v=ZV_ZY-0Q1lo lub przesyłać obraz z kamery http://www.arducam.com/arducam-supports-esp8266-arduino-board-wifi-websocket-camera-demo/
Jaki macie pomysł na wykorzystanie ESP8266?
Ja wykorzystam moduł w połączeniu z blynk do bardzo prostego rozwiązania, zdalnego resetowania routera udostępniającego VPN, który czasem potrafi się zawieszać. Moduł D1 mini ma na tyle efektywną antenę, że udało się go zalogować do sieci WiFi zaprzyjaźnionej firmy w tym samym budynku, dzięki czemu łączność modułu z internetem zostanie zachowana nawet jeżeli kontrolowany router przestanie odpowiadać.

Środowisko Arduino.
Moduł został przetestowany z najnowszą dostępną wersją środowiska 1.8.2 www.arduino.cc aby ułatwić pracę z https://github.com/esp8266/Arduino uruchamiamy środowisko Arudino i wybieramy:
Plik->Preferencje->Dodatkowe adresy URL do menadżera płytek - wklejamy: http://arduino.esp8266.com/stable/package_esp8266com_index.json
następnie:
Narzędzia->Płytka->Menadżer Płytek-> i wyszukujemy "wemos" a następnie instalujemy paczkę w Wemos D1 mini z ESP8266:

Po podłączeniu D1 mini do portu USB w systemie powinien pojawić się nowy port szeregowy:

Po tych zabiegach możemy wybrać płytkę D1 mini oraz wskazać aktywny port COM:


Płytka przekaźnika.
Płytka przekaźnika wymaga zasilania napięciem 5V (cewka przekaźnika) załączony przekaźnik pobiera około 60mA. Przekaźnik jest załączany poziomem niskim i stan wysoki 3.3V modułu D1 mini może być niewłaściwie interpretowany przez płytkę przekaźnika (jako stan niski, w testowanym egzemplarzu obniżenie napięcia do 3.5V powodowało zadziałanie przekaźnika, wyłączenie przekaźnika przy około 3.8V). Można przerobić płytkę lub rozwiązać problem programowo. Przy rozwiązaniu programowym dla uruchomienia przekaźnika należy ustawić wybrane wyjście ESP8266 jako wyjście w stanie niskim, natomiast dla wyłączenia przekaźnika jako wejście w stanie wysokim pullup.


Sterowanie przekaźnikiem przez przeglądarkę - przykład.
Na podstawie przykładów dostępnych w środowisku Arduino dla D1 mini w prosty sposób można rozpocząć próby z uruchomieniem interfejsu WEB, który pozwoli na sterowanie przekaźnikiem poprzez przeglądarkę, parametry logowania do sieci Wi-Fi (ssid i hasło) umieszczamy w kodzie:
Code: c


Przykładowy kod wysyła informacje o pracy urządzenia z wykorzystaniem konsoli szeregowej (USB-RS232) dzięki temu znamy m.in. adres MAC i adres IP modułu. W docelowym rozwiązaniu warto aby moduł miał stały adres IP (np. ustawienia DHCP, lub ręczna konfiguracja IP modułu).

Rozbudowując kod możemy dodać np. prostą podstawową autoryzację WEB, do której parametry logowania zostaną zapisane w kodzie jawnym tekstem:
Code: c
Aby komunikować się z urządzeniem wystarczy przeglądarka internetowa uruchomiona w segmencie sieci, który obsługuje access point Wi-Fi do którego łączy się moduł ESP8266.

Niektóre routery nie umożliwiają ruchu pomiędzy klientami Wi-Fi wtedy nie będzie można uzyskać dostępu do zalogowanego ESP8266. Dzięki przekierowaniu portów na routerze teoretycznie można umożliwić dostęp z internetu jednak nawet po ulepszeniu kodu ze względów bezpieczeństwa lepiej sprawdzi się tutaj model chmurowy niż komunikacja bezpośrednia.
Rozwiązania chmurowe.
W takim rozwiązaniu urządzenia IoT łączą się do serwera usługodawcy wysyłając informacje oraz pobierając instrukcje, chcąc kontrolować swoje urządzenia również łączymy się do usługi z wykorzystaniem przeglądarki lub aplikacji zainstalowanej na smartfonie.
Blynk.
Aby wykorzystać http://www.blynk.cc w środowisku Arduino wybieramy:
Szkic->dołącz bibliotekę ->zarządzaj bibliotekami wyszukujemy i instalujemy bibliotekę blynk.

Instalujemy aplikację Blynk na smartfonie, tworzymy nowe konto oraz nowy projekt, aplikacja jest intuicyjna i „prowadzi za rękę” poprzez kolejne kroki. Na podanego maila otrzymujemy token.
Wykorzystujemy przykład ESP8266_Standalone i wprowadzamy dane do logowania do naszej sieci Wi-Fi oraz token Blynk:
Code: c
W nowym projekcie dodajemy przycisk, który przypisujemy do wyjścia D1 modułu, w Blynk możemy w prosty sposób sterować bardziej zaawansowanymi urządzeniami (np. serwomechanizmami) a także odbierać dane (np. temperatura) i ustawiać powiadomienia na e-mail twitter lub powiadomienia na smartfon.

Po uruchomieniu przykładu na płytce D1 mini, otrzymamy informacje diagnostyczne na konsoli szeregowej, przy pomocy aplikacji na smartfonie będziemy mogli kontrolować stan przekaźnika z dowolnego miejsca na ziemi gdzie będzie dostęp do internetu.
W uproszczony sposób rozwiążemy problem z płytką przekaźnika, która zasilana napięciem 5V wymaga sterowania stanem niskim i może sprawiać problemy przy sterowaniu napięciami 0 i 3.3V. W szereg na połączeniu sygnału IN i wyjścia D1 modułu włączamy LED (katodą w kierunku modułu), spadek napięcia powinien zapewnić prawidłowe działanie (powinna się sprawdzić także dioda zenera o napięciu ~3V).
Najlepiej wykonać trwałą przeróbkę na płytce przekaźnika.

Na filmie poniżej można zobaczyć zmienne opóźnienie pomiędzy wysłaniem komendy a zmianą stanu przekaźnika.
Supla.
Podobny do blynk polski projekt znajdziecie tutaj: https://www.supla.org/pl/
Wysyłanie danych do thingspeak.
Thingspeak to jedna z przykładowych usług pozwalająca na odbieranie danych od urządzeń IoT. Po założeniu konta odczytujemy nasze API Key, tworzymy nowy kanał oraz odczytujemy jego ID. Do środowiska Arduino dodajemy bibliotekę ThingSpeak.

Poniżej przykładowy kod pozwalający wysyłać do utworzonego kanału dane o temperaturze z czujnika z wyjściem analogowym TMP36.
Code: c
Czujnik zasilamy z 3.3V (pin 1 czujnika), pin 3 łączymy z GND, natomiast sygnał z pinu 2 podajemy na wejście analogowe modułu A0. Wykorzystanie czujników z wyjściem cyfrowym (np. DS18B20) pozwoli na łatwą obsługę większej liczby czujników przez jeden moduł D1 mini.


Już po chwili w serwisie thingspeak możemy obserwować historię przesyłanych danych. Urządzenie pobiera kilkanaście miliamperów w przerwach pomiędzy transmisjami:

Oszczędzanie energii i wbudowany zegar.
Pobór prądu przez D1 mini w zależności od wykonywanego programu i ciągle zestawionego połączenie WiFi może wynosić nawet kilkadziesiąt miliamperów: http://bbs.espressif.com/viewtopic.php?t=133
Możemy uśpić moduł ESP i wykorzystać wewnętrzny zegar do podania sygnału resetu modułu po określonym czasie. Po resecie zmienne w programie nie zostaną zachowane, ale możemy uzyskać dość duże oszczędności energii oraz regulowane długie czasy uśpienia (np. 24h). Aby korzystać z funkcji głębokiego uśpienia ESP.deepSleep() należy połączyć pin D0 z Reset, w innym przypadku RTC nie będzie mógł wykonać resetu modułu:


Poniżej przykładowy kod:
Code: c
Warto wspomnieć o możliwości zmiany firmware w ESP np. na nodemcu lub inny: https://github.com/nodemcu/nodemcu-flasher to może być dobre rozwiązanie do rozbudowania istniejącego urządzenia o moduł WiFi komunikujący się poprzez UART lub okazja do zapoznania się z LUA.
Warto zapoznać się z usługami pozwalającymi na zbieranie, prezentację i analizę danych z urządzeń IoT:
https://www.pubnub.com/
https://io.adafruit.com/
http://dweet.io/
http://freeboard.io/
https://data.sparkfun.com/
http://ubidots.com
ESP8266 może służyć do realizacji znacznie bardziej skomplikowanych zadań niż włączanie i wyłączanie przekaźnika, możemy np. uruchomić jednokanałową bramkę LoRaWAN https://www.youtube.com/watch?v=ZV_ZY-0Q1lo lub przesyłać obraz z kamery http://www.arducam.com/arducam-supports-esp8266-arduino-board-wifi-websocket-camera-demo/
Jaki macie pomysł na wykorzystanie ESP8266?
Ja wykorzystam moduł w połączeniu z blynk do bardzo prostego rozwiązania, zdalnego resetowania routera udostępniającego VPN, który czasem potrafi się zawieszać. Moduł D1 mini ma na tyle efektywną antenę, że udało się go zalogować do sieci WiFi zaprzyjaźnionej firmy w tym samym budynku, dzięki czemu łączność modułu z internetem zostanie zachowana nawet jeżeli kontrolowany router przestanie odpowiadać.

Cool? Ranking DIY