2023-01-05

Virtuino IoT w ESP8266

I kolejny odcinek o kodzie Virtuino dla mikrokontrolera ESP8266. Dziś w akcji najnowsze dziecko  Ilias Lamprou - Virtuino IoT. Jeśli poszukiwałem porównywalnego z BLYNK systemu domowej automatyki to mogę iść spać spokojnie. VIRTUINO IoT to jest dokładnie to czego potrzebuję. Zobaczmy więc co kryje się we jego wnętrzu.




VIRTUINO IoT to bez wątpienia lepsza od VIRTUINO 6 odmiana systemu. Lepsza już tylko choćby tym że zastosowano w nim protokół komunikacyjny WebSocket. Nie mam pojęcia jak dokładnie on działa ale jednen element jest oczywisty - protokołem tym może posługiwać się zarówno klient jak i serwer co oznacza że dane w obu kierunkach mogą być przesyłane niezwłocznie (cokolwiek by to nie znaczyło). Już sam ten fakt stawia VIRTUINO IoT przed VIRTUINO 6. Dodatkowo podmiana protokołu na MQTT pozwala na bezproblemowe wykorzystanie mikrokontrolera z kodem VIRTUINO IoT w szeregu dostępnych aplikacjach domowej automatyki  (np Home Assistant).

Do przyrządzenia prostego systemu sterowania dla procesora ESP8266 (a pewnie i ESP32) potrzebne nam będzie:

  • działający moduł z ESP8266 np D1 mini lub podobne - szt 1 lub więcej
  • kabel USB micro -  szt 1
  • komputer z Arduino najlepiej ver. 1.8.19  (wersja 2.x.x jest wciąż niedopracowana)  - szt 1
  • Tablet/telefon z Android wer >7 z zainstalowanym VIRTUINO 6 - minimum 1 ale może być więcej
Arduino musi mieć (co oczywiste) zainstalowany procesor ESP. Dodatkowo potrzebna będzie biblioteka WebSocket i biblioteka Timers.h jeśli ktoś chce sobie ułatwić pracę i skorzystać z mojego poniższego szkicu - uniwersalnego szkieletu, który należy uzupełnić o własny kod programu obsługi konkretnej funkcji domowej automatyki. 

https://pastebin.com/PeGiUCQy      - blok główny z main()
https://pastebin.com/qbycumm1           - piny.h - biblioteka deklaracji pinów i procedur obsługi pinów
https://pastebin.com/FM3VnPkd     - program.h - blok z przykładowym programem

Szkic nie jest już tak elegancki jak mój poprzedni dla VIRTUINO 6. Z nieznanych mi powodów nie udało się przenieść kodu komunikacji Virtuino z bloku głównego do osobnej biblioteki bez zgłaszania przez kompilator Arduino denerwującego komunikatu o błędach, Nic to - na razie musi pozostać tak - może w przyszłości uda się rozwiązać ten problem.

Tak więc blok główny zawiera  dołączenie niezbędnych bibliotek i odesłanie w blokach setup() i main() do konkretnych procedur naszego programu oraz całą procedurę komunikacji z aplikacją via WiFi.
Procedury obsługi transmisji danych via WiFi wymagają na początek ustawienia parametrów własnej sieci.  Nic , poza zmianą adresu kolejnego programowanego ESP (linia 11), w tym kodzie nie trzeba gmerać przy kolejnych projektach. 

Biblioteka piny.h to zestaw deklaracji zmiennych i procedur obsługi przesyłanych między ESP a aplikacją danych. Zmienne to piny wirtualne jakie dołączymy do kolejnych widgetów Virtuino. Wszystkie one mają typ String. Nad deklaracją tych zmiennych pochylimy się później gdyż jest ciekawa z punktu widzenia aplikacji. W tym bloku znajduje się też procedura 

void onValueReceived(String tag, String value)

obsługująca wywołanie funkcji programu przy pojawieniu się nowych danych z aplikacji. Jeśli ESP odbierze nową wartość pinu V0 to wywołana zostanie nasza procedura pin0_rec(String value)

Inaczej niż w VIRTUINO 6 wysyłamy dane do aplikacji. Dzieje się to za pomocą procedury

bool sendValue(const char* tag, String value)

Aby wysłać daną do pinu V10 (zadeklarowanego w aplikacji) robimy to poprzez powiązaną z nim zmienną pin10 w deklaracji

const char* pin10 = "V10";  

Daje nam to całkowitą swobodę nazywania zmiennych zarówno w aplikacji jak i w module i dowolnego ich wiązania - bardzo mi się pomysł podoba. W moim przykładzie wysłanie danej sensor (o dowolnym formacie) do aplikacji wygląda tak

  sendValue(pin10, String(sensor));    

Pamiętać należy tylko żeby tej procedury nie umieszczać w głównej pętli programy gdzie będzie wywoływana tysiące razy ale w przeciwieństwie do Virtuino 6 dana ta będzie wysłana niezwłocznie (cokolwiek by to nie oznaczało :) )

Jest jeszcze ciekawa procedura void sendPinsStatus()  przesyłająca informacje o aktualnych wartościach naszych zmiennych powiązanych z aplikacją z chwilą podłączenia się do modułu kolejnej aplikacji. W Virtuino 6 tego nie było bo to aplikacja (klient) cyklicznie odpytywała moduł o interesujące ją wartości zmiennych.

W bloku program.h umieszczamy nasze procedury konkretnego programu domowej automatyki.

I to w zasadzie koniec co trzeba wiedzieć by prawidłowo oprogramować nasz ESP8266 do współpracy z aplikacją VIRTUINO IoT.

W następnych postach będzie słów kilka o samej aplikacji i jak ją zmusić by gadała z naszym mikrokontrolerem.

??? Co ???? post brzmi podobnie do poprzedniego ? Oczywiście wszak mówimy o tym samy produkcie tylko o różnych jego odmianach. Naprawdę różnice zobaczymy porównując obie aplikacje i działanie obu systemów. Ale to już zadanie dla naszego ulubionego dalszego ciągu
 

Brak komentarzy:

Prześlij komentarz