2023-01-21

VIRTUINO i chmura


 VIRTUINO generalnie jest przeznaczone do pracy w sieci wewnętrznej. Można otworzyć ruter tak by nasze moduły były widziane z INTERNETU ale to ani bezpieczne ani wygodne rozwiązanie. Pozostaje skorzystać z gotowego projektu w chmurze oferującego dostęp do moich modułów najtańszym i najprostszym sposobem. Na początek wybór padł na ARDUINO Cloud i zobaczymy co z tego wynikło .


Dlaczego Arduino Cloud? Głównie dlatego, że to Arduino i spodziewam się najmniejszych problemów przy wdrożeniu. Drugi powód - aplikacja dostępna jest praktycznie na każdy OS w tym i na IOs a to oznacza dla mnie 100% zdalny dostęp z dowolnego miejsca i o każdej porze. Czy oznacza to że chmury Microsofta, Amazona czy Google są gorsze? Nie wiem, ale mam jakoś większe zaufanie do Arduino i trochę już ten temat mam ogarnięty.

Zacznę od końca tj. od widoków pulpitu przykładowego projektu. W komputerze wygląda to tak



a na iphonie tak


Brzydkie? To mało powiedziane - wręcz okropne. Ale jakie to ma znaczenie, Najważniejsze że działa i tu i tu. I o dziwo w telefonie aplikacja ładuje się bardzo szybko a dostęp do pulpitu jest łatwy i przyjemny.

Ograniczenia wersji darmowej idealne wpisują się w moje potrzeby - możliwość dołączenia do dwóch modułów, i do 5 zmiennych oraz praktycznie nieograniczona możliwość tworzenia dowolnych pulpitów. Jak dla mnie tego aż za nad to. Jeśli tylko biblioteki Cloud nie będą konfliktować się z innymi wciągnę aplikację na stałe do projektów.

A teraz trochę o samym programie. Struktura typowa z serwerem centralnym, do którego przyłączamy moduły i aplikacje sterujące. Obsługiwane moduły to oczywiście płytki Arduino ale dopuszczono też do systemu moduły z ESP8266/32. Choć liczyć się należy z możliwymi błędami w obsłudze bo te dwie platformy są ciągle w fazie testów.

Jak zacząć?

Na serwerze https://cloud.arduino.cc/home/ zakładamy sobie darmowe konto. Następnie zgodnie z instrukcją https://docs.arduino.cc/arduino-cloud/getting-started/esp-32-cloud definiujemy moduł (device) wybierając typ płytki/procesora (u mnie ESP8266). Na koniec konfiguracji dostajemy ID modułu i KEY do projektu. Zdefiniowany moduł łączymy z projektem (things) dla którego wygenerujemy kod  programu dla mikrokontrolera pozwalający na połączenie ESP z serwerem Cloud. Przed wygenerowaniem kodu określić jeszcze trzeba sygnały (zmienne) jakie będą przesyłane pomiędzy modułem a aplikacją. Może być ich max 5 szt. Do wyboru mamy różne typy zmiennych - jest ich sporo choć jak dla mnie najważniejsze to bool, int, float i String. Reszta to nie znane mi bliżej kombinacje.

UWAGA: Typ zmiennej ma wpływ na możliwość wyboru określonego widgeta (u). I tak np. jeśli chcemy umieścić na pulpicie przełącznik to MUSIMY do niego dowiązać zmienną typu bool.

W zależności od wyboru opcji zmienne będą mogły być przesyłane w jedną lub obie strony. Ważna jest także to czy wymiana danych ma być cykliczna (np. co 1 sek) czy odbywać się po zmianie wartości zmiennej.

 Teraz konfigurator online będzie na nas wymuszał zastosowanie onlinowej wersji kompilatora kodu ale należy to zlekceważyć. W sekcji NETWORK wpisujemy cokolwiek w polach parametrów dostępu do naszej sieci wifi i w polu KEY - później w naszym komputerowym kompilatorze wpiszemy prawidłowe wartości.

Teraz będzie najciekawiej - jak uciec od onlinowej wersji kompilacji i przenieść ją do sketcha w naszym komputerze. A więc po kolei

  • pierwszy krok to wgranie brakujących bibliotek potrzebnych do kompilacji naszego projektu. Ściągamy z githuba następujące pliki
Arduino_ConnectionHandler
Arduino_DebugUtils
ArduinoIoTCloud
ArduinoMqttClient

Pliki ładujemy do katalogu z naszymi bibliotekami choć pewnie można je zainstalować na stałe do managera bibliotek Arduino.

  • przechodzimy do zakładki sketch a następnie "open full edytor"  i kopiujemy cały kod z pierwszej zakładki do Arduino na naszym komputerze
  • tworzymy u siebie nową zakładkę o nazwie thingProperties.h i kopjujemy do niej całą zawartość tego pliku z sieci
  •  w miejsce następujących linii
const char SSID[]               = SECRET_SSID;    // Network SSID (name)
const char PASS[]               = SECRET_OPTIONAL_PASS;    // Network password
const char DEVICE_KEY[]  = SECRET_DEVICE_KEY;    // Secret device password

wstawiamy nasze rzeczywiste dane w postaci

const char SSID[]               = "abcd";    // Network SSID (name)
const char PASS[]               = "12345678";   // Network password
const char DEVICE_KEY[]  = "DDDDDDDXXXXXXXXZTN";    // Secret device password

i możemy już próbować skompilować kod. Jeśli przeszedł bez błędów proponuję wgrać go do modułu i sprawdzić czy łączy się on z Chmurą Arduino. Świadczyć będzie o tym zielona kropka przy naszym module w polu Devices.

Teraz możemy spokojnie nakarmić szablon naszym programem
 Dane przesyłane z aplikacji do ESP obsługiwane są w procedurach

void onXXX1Change()  {

  // Add your code here to act upon R2 change

}

gdzie XXX1 to nazwa naszej zmiennej obsługiwanej przez tę procedurę.

Wysyłanie danych zmiennej YYY2 do aplikacji jest podobne do tego z VIRTUINO 6

YYY2 = wartość_naszej_zmiennej;

Po wgraniu programu do modułu czas no końcowy etap pracy - tworzenie pulpitu nawigacyjnego naszego projektu. Mamy do tego zakładkę Dashboards. I tu bawimy się już z ustawianiem widgetów i dowiązywaniem do nich poszczególnych zmiennych. I praktycznie od razu możemy sprawdzić efekty naszej pracy sterując zmiennymi lub odczytując ich wartość w widgetach. Toporne to i słabo konfigurowalne ale naprawdę działa!

Jeszcze tylko załadowanie aplikacji Cloud do telefonu i Voilà !!!

A więc do dzieła bo dalszy ciąg czeka.

PS

A tu bardziej szczegółowy opis całej konfiguracji  dla płytki MKR1000

https://projecthub.arduino.cc/Arduino_Genuino/c00f687a-4694-49e8-8e95-47194db11373


Suplement

Dodałem cały kod do połączenia z Arduino Cloud i o dziwo nic się nie konfliktuje. VIRTUINO pięknie działa równolegle do Arduino Cloud. Jest tylko jedenmały problem - cały program urósł do ponad 450 kB (45% zajętej pamięci) apamięć danych zajęta jest w niemal 50%. No nieźle. Pocieszające jest to że większość moich domowych modułów nie wymaga dostępu z Internetu.

Powyższe wnioski skłaniają mnie jednak do poszukiwania i innych sposobów dostępu danych z moich mikrokontrolerów. Zobaczymy co na to nasz ulubiony ciąg dalszy

   

Brak komentarzy:

Prześlij komentarz