wtorek, 29 października 2019

ZERYNTH - sterowanie stanem pinu za pomocą chmury WolkAbout.

Temat związany z chmurami cokolwiek mnie zafascynował. Dotychczas  patrzyłem na ten temat od strony sprzętu przez pryzmat wyłącznie Rasbety PI . Okazuje się jednak , że łączność z chmurą możemy z powodzeniem zrealizować na dowolnym MCU . Co jest do tego potrzebne oprócz MCU ? Moduł WiFi lub ciekawiej np  Wiznet W5500 ze sprzętowym stosem TCP/IP . Z chmurą możemy rozmawiać na dwa sposoby , za pomocą API REST i MQTT. W przypadku MQTT chmura robi za Brokera. Oprogramowanie MCU do komunikacji z chmurą wydaje się być zadaniem cokolwiek ambitnym w szczególności kiedy spotykamy się z nowymi dla nas zagadnieniami . Dlatego dobrym sposobem dla obycia się z klimatem chmur jest zastosowanie  technologii np. ZERYTH, który został stworzony do prostej implementacji komunikacji z chmurą. Bazując na przykładach z dokumentacji ZERYTH możemy w ciągu kilku minut załapać jak posługiwać się językiem Python i jak zrealizować łączność z chmurą. W tym artykule pokażę w jaki sposób możemy sterować stanem pinu na płytce wspieranej przez ZERYNTH z wykorzystaniem chmury WolkAbout .

Jedna refleksja odnośnie dostawców chmur dla IoT. Na rynku są chmury takich gigantów jak Microsoft , Google , Amazon oraz chmury pomniejszych dostawców a jest tego od ciorta. W przypadku gigantów "chmurowych" założenie konta wiąże się z podaniem numeru karty płatniczej nawet jak korzystamy z darmowych usług. Mnie się to nie podoba. Mam kolegę , który na takim darmowym koncie w AWS stracił 1000 zł bo aktywował nie opacznie jakąś usługę webową  z której de fakto nie korzystał :). Dlatego mając na uwadze takie zdarzenie, korzystam z chmur , które nie wymagają podania numeru karty przy zakładaniu konta. Chmura WolkAbout jest taką właśnie chmurą. Inną chmurą godną uwagi jest Ubidots, nie sprawdzałem jej jeszcze praktycznie ale konto założyłem . Bardzo ciekawie wygląda chmura IBM Watson IoT jest to generalnie duży kombajn do wszystkiego, w wersji darmowej  mamy aż 500 urządzeń czyli bardzo hojnie ale nie polecam jej na początek. Projekt ZERYNTH również wspiera tę chmurę co mnie bardzo cieszy. Dzięki ZERYNTH mam możliwość zaprzyjaźnić się w prosty sposób z wieloma chmurami. Wspomnę tu jeszcze o chmurze  okdo do której też warto zajrzeć.

Moja baza sprzętowa :

- płytka NodeMCU ESP32S wspierana natywnie przez ZERYNTH-a

Nawet nie musimy specjalnie wnikać co ma na pokładzie , z punktu widzenia ZERYNTH-a to jest tylko dawca zasobów dla maszyny wirtualnej VM.

- kabel USB do zasilania i wgrywania wsadu z IDE ZERYNTH-a

- dioda LED i rezystor 470 Ohm , anoda diody LED podłączona do pinu G23 (Uwaga !: od strony ZERYNTH jest to oznaczone jako D23), rezystor do masy. Diodę LED zapalamy stanem wysokim na wyjściu D23.

Pozostałe :
- zainstalowane IDE ZERYNTH-a na PC
- założone darmowe konto w chmurze WolkAbout


Moim celem jest zasterowanie stanem pinu D23 na płytce NodeMCU ESP32. Do pinu D23 będę miał podłączoną zewnętrznie diodę LED. Sterowanie będziemy realizować z poziomu chmury WolkAbout. Sterowanie jest możliwe zarówno z PC jak i aplikacji mobilnej na telefon komórkowy. W przypadku telefonu musimy pobrać aplikację WolkAbout z Google Play. Aplikacja jest darmowa i bez reklam.

Całe przedsięwzięcie wymaga napisania aplikacji w Pythonie w IDE ZERYTH i skonfigurowaniu chmury do współpracy z naszym urządzeniem. Najpierw zajmę się chmurą. W tym celu loguję się do mojego darmowego konta w chmurze WolkAbout. Widokiem domyślnym jest panel Dashboard czyli miejsce dowodzenia i prezentowania danych z urządzenia/urządzeń.


Tworzymy Dashboard o nazwie MojaTablica klikając plusik , pojawi się okienko w którym podajemy nazwę i wybieramy Save :



 W oknie głównym Dashboard pokaże się pole z naszą nazwą tablicy.


Przełączamy widok na Devices i wybieramy zakładkę Device Templates


Po wybraniu Device Templates pojawi się okienko jak poniżej na którym widzimy jeden przykładowy szablon o nazwie Wolksensor.



Ja tworzę swój szablon o nazwie MySensor ,w tym celu wybieram z lewej strony mały plusik Add template i opcję From scratch.


W powyższym widoku podaję po lewej stronie nazwę My Sensor i pozostałe domyślne opcje zostawiam tak jak są. Przełączam się na zakładkę Actuators ponieważ chcemy powołać do życia przełącznik typu on/off a to nie jest de fakto sensor. Wybieram plusik na środku opisany jako Add new sensor. Pokaże się nam okienko jak poniżej :


W tym miejscu powołujemy do życia nasz przełącznik , chcemy aby był to przełącznik typu on/off. Aby tak się stało wypełniamy formularz i jego treść będzie wyglądać jak poniżej :


Tu warto nadmienić, że z poziomu oprogramowania po stronie urządzenia fizycznego do przełącznika będziemy się odwoływać za pomocą referencji nazwanej przez nas SW. Wybieramy Create  i wskakujemy do widoku jak poniżej w którym wybieramy SAVE :


W kolejnym widoku wybieramy po lewej na dole Create device :


Po wybraniu opcji Create device znajdziemy się w widoku jak poniżej w którym wybieramy opcję Next step :


W kolejnym widoku przewijamy ekran w dół i mamy widok jak poniżej w którym podajemy nazwę naszego urządzenia np. ESP32.


Po podaniu nazwy zapisujemy Save , pojawi nam się okienko z kluczem i hasłem, które są potrzebne od strony softu w ZERYNTH do łączenia się z utworzonym w chmurze urządzeniem :


Tylko nie wpisywać do programu moich haseł bo będziecie sterować moją diodą LED :). Wybieramy OK i otrzymujemy widok jak poniżej :


Przełączamy widok na Dashboard :


W widoku Dashboard wybieramy Add widget przy nazwie naszej tablicy. Wyskoczy okienko wyboru jak poniżej z którego wybieramy ikonkę Actuators


W okienku jakie się pokaże "ptaszkujemy" nasz Switch i zapisujemy Save :



Od tego momentu w naszym Dashboard pojawi się ikonka typu on/off


Ustawienia chmury do współpracy z naszym urządzeniem mamy gotowe, chmura jest gotowa do sterowania naszym urządzeniem w zakresie zmiany stanu wybranego pinu. Zauważmy, że od strony chmury nie jest istotne jakie mamy fizycznie urządzenie, chmury to nawet nie interesuje. Tutaj ważny jest tylko format wymiany danych i opakowanie w jakim je wysyłamy (MQTT, API REST).
Przechodzimy do ZERYNTH. Odpalamy IDE ZERYNTH. Podłączamy naszą płytkę po USB do PC i wybieramy w środkowym górnym okienku nasze urządzenie czyli NodeMCU ESP32. Tworzymy nowy projekt o nazwie np.WolkAbout_MySwitch


Teraz musimy plik main.py wypełnić treścią. Można tu się posłużyć wiedzą zawartą np. w przykładach z dokumentacji. Ja tak generalnie zrobiłem. Główny plik programu main.py znajdziemy tutaj. A poniżej zrzuty z programem z IDE ZERYNTH. :






Program wgrywamy do NodeMCU ESP32. Pomijam już fakt , że płytkę trzeba jeśli pierwszy raz ją używamy w ZERYNTH zarejestrować w IDE ZERYNTHA i i utworzyć na niej maszynę wirtualną ,  o tym pisałem już w innym artykule.
Efekt współpracy chmury z urządzeniem widać na dwóch poniższych obrazkach. 





Jeśli do pinu G23 (od strony ZERYNTHA jest to D23) płytki NodeMCU ESP32 podepniemy diodę LED z rezystorem 470 Ohm to zobaczymy na własne oczy, że sterowanie z poziomu chmury ,pinem na naszej płytce bardzo sprawnie działa.
Widoki w chmurze możemy personalizować obrazkami , tapetami etc.
Polecam odpalić sobie aplikację mobilną WolkAbout i zobaczyć jak to działa z poziomu telefonu i jak szybko stan naszego Switcha jest aktualizowany w przeglądarce na PC i na telefonie.

Zobaczmy jak prosto i szybko możemy realizować pomysły typu sterowanie bramą wjazdową do domu czy gaszenie lampki nocnej bo już nam się nie chce w tym celu wstać z łóżka :) etc. . ZERYNTH upraszcza nam maksymalnie realizację zamysłów z wykorzystaniem chmury. 

Tak jako ciekawostkę przyrodniczą to widziałem u jednego kolesia sterowanie pojazdem z telefonu tzn kluczyk miał w domu a samochód otwierał i uruchamiał z telefonu :)  no ale to już chyba było przegięcie. Ciekawe jak immobilizer fabryczny ominął :) Wszystkie parametry pracy silnika miał na podglądzie w telefonie.

Podsumowując zabawy z chmurą są ciekawym doświadczeniem. Na początku wydaje się to skomplikowane ale z każdą chwilą obcowania z chmurą , klapki nam się w mózgu otwierają i szybko pojmujemy o co tu biega. W dalszej perspektywie chciałbym opracować moduł na MCU Microchipa , który zrealizuje nam dostęp do chmury w języku C . Prawdopodobnie zepnę moduł Wiznet5500 i SI4463 . Nie chcę używać modułu WiFi m.in dlatego , że to wprowadza nam zbędne opóźnienie w wymianie danych. Moduł radiowy załatwi mi dostęp zdalny z innych modułów nie podłączonych do chmury a Wiznet5500 połączę bezpośrednio do Routera LTE. No ale zobaczymy na razie to zamysł w głowie.

Tak swoją drogą już widzę oczami wyobraźni jak wejście technologi NB-IoT połączonej z chmurą zmieni całkowicie obraz rynku IoT. Upadną wtedy wszelkie koncepcje oparte na centralnym Gateway-u . Każde urządzenie będzie się łączyć indywidualnie z chmurą bez pośredników ,to będzie dopiero rewolucja. Moim zdaniem LORA zostanie zmarginalizowana przez NB-IoT no i moduły WiFi dostaną po tyłku bo na co komu tak nieefektywna energetycznie technologia w IoT.


Pozdrawiam
picmajster.blog@gmail.com


1 komentarz: