[027] Chmura Arduino - spróbujmy czego własnego

[027] Chmura Arduino - spróbujmy czego własnego

W poprzednim artykule przedstawiłem założenia pracy z chmurą Arduino, bardzo ogólnie i wstępnie. Udało się nam na końcu wysłać pierwszy szkic, który znaleźliśmy w przykładach. Czas na własne modyfikacje, ale zanim się za to weźmiemy, proponuję nieco pozwiedzać portal, z którym od czasu do czasu będziemy teraz spędzać czas.


W zakładce Sketches możemy tworzyć własne programy, dokładnie w ten sposób, jak to robiliśmy dotąd, lokalnie. W grupie IoT natomiast mamy już poprzednio wygenerowaną apkę do pstrykania diodą świecącą. Sprawdźmy jak będzie się pracować ze szkicami klasycznymi.

Oto przeglądarkowa wersja edytora szkiców. Wszystko wygląda podobnie, acz w wersji darmowej mamy przykre ograniczenie do 25 kompilacji dziennie. Pozostałe ograniczenia nie będą bolesne, miejsca jest wystarczająco dużo.

Cóż, sprawdźmy jak to działa. Wybiorę już klasyczne mruganie diodą i prześlę do Arduino. Niestety co chmura, to chmura, kilka dobrych sekund trzeba czekać. Dioda „blinkuje” zgodnie z założeniami, więc wszystko działa jak należy.

Wersja online umożliwia pracę bez instalacji całego środowiska na komputerze lokalnym. Jest jednak wolniejsza no i w praktyce bardzo szybko trzeba będzie przejść na płatną wersję chmury, choćby ze względu na zniesienie limitu kompilacji. Z drugiej strony, dwa dolary nie majątek.

Wróćmy sobie do strony głównej. W zakładce Devices będą się znajdować nasze płytki. Jak mówiłem, możemy tu dodawać płytki firmowe jak i produkowane przez innych producentów.

W zakładce Things będziemy widzieć listę projektów, czyli zestawień programu, sprzętu i ustawień sieciowych.

Natomiast w zakładce Dashboards znajdziemy listę paneli, czyli tego, co będziemy widzieć na ekranie smartfona.

Z rzeczy ciekawych mamy możliwość podglądnięcia panelu telefonu, jakże innego proporcjami od komputerowych ekranów. Mamy tutaj także możliwość poukładania ikonek zgodnie z własnym widzimisię.

Oczywiście na stronie znajdziemy mnóstwo kursów i startowych projektów, więc można tu spędzić długie tygodnie. Wróćmy jednak do programu. Zostańmy przy mruganiu diodami, ale z pożytkiem podwójnym. Po pierwsze, sprawdzimy jak to jest z tą kompatybilnością. W tym celu na płytce edukacyjnej TME podmienię Uno ośmiobitowe na współczesne.

Płytka ta ma osadzoną między innymi diodę RGB, która korzysta z pinów 9, 10 i 11. Zrobimy sobie zatem potrójny sterownik, tym razem do każdej składowej koloru i tutaj spotkamy się z pożytkiem drugim: nauczymy się przerabiać takie aplikacje.

Wchodzimy sobie do naszego projektu i klikamy na zmiennej led.

Zmienimy jej nazwę na ledCzerwony. Następnie dodamy nowe zmienne, identyczne w swojej strukturze, które nazwiemy ledZielony i ledNiebieski.

Otrzymamy w ten sposób zbiór trzech zmiennych, jak się zaraz okaże, przydatnych do napisania poszerzonej wersji szkicu.

Przenieśmy się do zakładki z panelami. Za pomocą funkcji Duplicate rozmnóżmy zasoby potrójnie, zmieniając im nazwy zgodnie z kolorami.

Następnie zmieńmy wszystkim elementom nazwy na wzór pierwszej pary, teraz już uzupełnionej kolorem. Czyli SwitchCzerwony będzie odpowiadał pozycji ledCzerwony i tak dalej. Na końcu winniśmy mieć trzy pary, powiązane ze sobą kolorami.

Wróćmy do projektu, czas na edycję szkicu. Pozostawiłem oryginalne komentarze, gdyż na tym etapie mogą być przydatne. Wyjaśnijmy sobie teraz co jest czym.

// Sketch generated by the Arduino IoT Cloud Thing "Cloud Blink"
// Arduino IoT Cloud Variables description
// The following variables are automatically generated and updated when changes are made to the Thing
// bool ledCzerwony;
// bool ledNiebieski;
// bool ledZielony;
// Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
// which are called when their values are changed from the Dashboard.
// These functions are generated with the Thing and added at the end of this sketch.

#include "thingProperties.h"

const byte czerwona = 9;
const byte zielona = 10;
const byte niebieska = 11;

void setup() {
  initProperties();                                  // Defined in thingProperties.h
  ArduinoCloud.begin(ArduinoIoTPreferredConnection); // Connect to Arduino IoT Cloud

  // The following function allows you to obtain more information
  // related to the state of network and IoT Cloud connection and errors
  // the higher number the more granular information you’ll get.
  // The default is 0 (only errors).
  // Maximum is 4
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);
  pinMode(niebieska, OUTPUT);
}

void loop() {
  ArduinoCloud.update();
  digitalWrite(czerwona, ledCzerwony);
  digitalWrite(zielona, ledZielony);
  digitalWrite(niebieska, ledNiebieski);
}

// Since LedCzerwony is READ_WRITE variable, onLedCzerwonyChange() is
// executed every time a new value is received from IoT Cloud.
void onLedCzerwonyChange() {
  // Add your code here to act upon LedCzerwony change
}

// Since LedZielony is READ_WRITE variable, onLedZielonyChange() is
// executed every time a new value is received from IoT Cloud.
void onLedZielonyChange() {
  // Add your code here to act upon LedZielony change
}

// Since LedNiebieski is READ_WRITE variable, onLedNiebieskiChange() is
// executed every time a new value is received from IoT Cloud.
void onLedNiebieskiChange() {
  // Add your code here to act upon LedNiebieski change
}

W pierwszej linii dołączymy bibliotekę współpracy z chmurą. Jest to obowiązkowa pozycja wszystkich szkiców, do których można dostać się zdalnie. Następnie mamy już klasyczną deklarację portu diod RGB. Kolejno znajdziemy instrukcje inicjujące współpracę z chmurą, łączące z nią naszą płytkę i zwracające informację o stanie połączenia sieciowego, który na tym etapie zlekceważymy.

W końcu mamy już znane deklaracje portów i przechodzimy do głównej pętli.

  ArduinoCloud.update();
  digitalWrite(czerwona, ledCzerwony);
  digitalWrite(zielona, ledZielony);
  digitalWrite(niebieska, ledNiebieski);

Tutaj po prostu wysyłamy na porty diod stany naszych diod wirtualnych, przełączanych przełącznikami na ekranie smartfona. No i koniec programu.

Prawda, że ambitne to niespecjalnie? Ale działa. Na ekranie telefonu pojawią się teraz trzy suwaczki i trzy diody. Cokolwiek tu wystukamy, zmieni się w świecie realnym. W tym momencie jakąś to już użyteczność ma, choć zrobienie sobie takiej sprytnej lampki będzie obarczone pewną wadą: za każdym razem po wejściu w aplikację trzeba czekać kilka sekund. Do lampek jednak wolę pilota podczerwieni, który działa natychmiast.

Na końcu programu znalazły się trzy grupy, które zlekceważyłem. Warto o nich wspomnieć. Otóż tam ląduje się po każdym zmianie stanu odpowiedniej diody. Jak to działa? Zróbmy przykład praktyczny. Na płytce została dioda, którą mrugaliśmy w pierwszej wersji szkicu, czyli siedząca na pinie trzynastym. Dopiszmy go zatem do deklaracji pod nazwą wbudowana – bo ta dioda znajduje się na płytkach Arduino. Musimy także zadbać o zadeklarowanie funkcji portu.

const byte czerwona = 9;
const byte zielona = 10;
const byte niebieska = 11;
const byte wbudowana = 13;

void setup() {
  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);
  pinMode(niebieska, OUTPUT);
  pinMode(wbudowana, OUTPUT);
}

Teraz już przenieśmy się do grupy zdarzeń na przykład związanych ze sterowaniem zieloną diodą i wpiszmy proste instrukcje zapalające diodę wbudowaną na 300 milisekund.

void onLedZielonyChange() {
  digitalWrite(wbudowana, HIGH);
  delay(300);
  digitalWrite(wbudowana, LOW);
}

Po kompilacji i wysłaniu szkicu, przy zmianie świecenia diody zielonej na krótko będzie się włączać dioda, która na płytce edukacyjnej została zdublowana w kolorze białym. W ten sposób można podpinać pod czynności zdalne różne inne instrukcje, ale to już pozostawiam wyobraźni szanownym czytelnikom.

Powiązane tematy

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2024 arduino.pl