5 Dni z przekaźnikiem Nettigo – Dzień 4 – Arduino Yun

Arduino YUN to płytka oparta na standardzie Arduino UNO. Zatem cały schemat połączeń przekaźnika jest identyczny z tym zaprezentowanym w dniu 2.

Arduino YUN to więcej niż zwykłe Arduino, dlatego postanowiłem poświecić mu jeden z dni z przekaźnikiem.

YUN, oprócz standardowego kontrolera AVR, ma w sobie dodatkowy komputer z Linuksem na bazie procesora MIPS. Komputer ten może łączyć się z internetem poprzez port Wi-Fi lub złącze Ethernet. Za pośrednictwem specjalnych bibliotek, mały kontroler Arduino łączy się z Linuksem i odbiera różne dane.

Najpopularniejszym sposobem odbierania danych jest protokół REST. Chodzi w nim o to, że komunikujesz się z Arduino za pomocą adresów WWW, a on odsyła informacje do przeglądarki.

Służy do tego biblioteka YunServer i YunClient. Elementy tej biblioteki czytają fragment linku wysłanego do Arduino i wysyłają to co ma się pojawić w przeglądarce.

Wykorzystując te biblioteki napisałem program, który steruje przekaźnikami podłączonymi do YUN do pinów cyfrowych 2, 3, za pośrednictwem linków.

#include <YunServer.h>
#include <YunClient.h>

YunServer server;

// Piny do których podłaczone są przekaźniki 2 i 3
byte relayPins[] = {2, 3};

void setup()
{
  server.listenOnLocalhost();
  server.begin();

  // Ustawianie pinów przekaźników jako wyjście
  for (byte i=0; i<sizeof(relayPins); i++)
  {
    pinMode(relayPins[i], OUTPUT);
  }
}

void loop()
{
  YunClient client = server.accept();
  if (client)
  {
    // Jeśli ktoś wywołał adres to włącza funkcje obsługi przekażnika
    relayHandle(client);

    client.stop();
  }

  delay(50);
}

void relayHandle(YunClient client)
{
  // Odczytywaie numeru przekanika
  byte index = client.parseInt();
  byte mode;
  
  // Reakcja na błędny numer przekaźnika
  if (index == 0 || index >= (sizeof(relayPins)))
  {
    client.println(F("Error!"));
  }

  // Sprawdzanie czy chcesz odczytać stan czy zapisać
  if (client.read() == '/')
  {
    // Zapis stanu
    byte mode = client.parseInt();
    digitalWrite(relayPins[index-1], mode);
  }

  else
  {
    // Odczyt stanu
    mode = digitalRead(relayPins[index-1]);
  }

  // Wyłanie wyników pracy przekaźników
  client.print(F("Relay: "));
  client.print(index);
  if (mode == 0)
  {
    client.println(F(" Off"));
  }

  else
  {
    client.println(F(" On"));
  }
}

Program działa tak, że wpisując do przeglądarki:

http://myArduinoYun.local/arduino/1/1

Zostanie włączony pierwszy przekaźnik podłączony do pinu 2. W przeglądarce pojawi się napis:

Relay: 1 On

Wpisując:

http://myArduinoYun.local/arduino/1/0

Ten przekaźnik zostanie wyłączony, a w przeglądarce pojawi się napis:

Relay: 1 Off

Zapewne już zauważyłeś, że pierwsza cyfra adresu odpowiada za numer przekaźnika, a druga za jego stan – 0 wyłączony, 1 włączony.

Idąc za ciosem, gdy wpiszesz:

http://myArduinoYun.local/arduino/2/1

włączysz drugi przekanik, podłączony do pinu 3.

W programie jest zmienna globalna

// Piny do których podłaczone są przekaźniki 2 i 3
byte relayPins[] = {2, 3};

do której nawiasów klamrowych {} możesz dopisać numery kolejnych pinów do których są podłączone przekaźniki, rozdzielając je przecinkiem.

Program działa dość prosto. W funkcji loop, sprawdzane jest czy program odebrał link. Jeśli tak to obiekt client jest czymś podobnym do obiektu Serial. To co się z niego odbiera to tekst adresu, który odebrało Arduino (cały napis znajdujący się za “http://myArduinoYun.local/arduino/”). U nas odbieramy “{numer}/{numer}”.

To co się wysyła do obiektu client, zostanie odebrane przez przeglądarkę i wyświetlone przez nią. Wysyłać można standardowo np. poprzez client.println(“Napis”);.

Metoda client.stop(); kończy połączenie z przeglądarką.

W programie jest jeszcze jedna opcja. Wpisując adres:

http://myArduinoYun.local/arduino/1

Otrzymasz tylko informację czy przekaźnik nr 1 jest włączony czy nie.

Dzięki Arduino Yun i modułowi przekaźnika Nettigo możesz sterować urządzeniami za pomocą przeglądarki WWW. Tradycyjnie używając linków na stronie, albo wykorzystując Ajax w JavaScript.

sprae

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.