Přejít k navigační liště

Zdroják » Různé » Moje garáž, můj hrad – zapojujeme Arduino Yún

Moje garáž, můj hrad – zapojujeme Arduino Yún

Články Různé

Arduino Yún kombinuje na jedné desce Arduino Leonardo a linuxový počítač s distribucí Linino odvozenou od OpenWRT. Tato kombinace spojuje jednoduchost Arduina pro komunikaci se senzory s výpočetním výkonem a síťovou komunikací na Linuxu. V článku se budeme věnovat konfiguraci Arduino Yún a propojení Arduino – Linux.

Nálepky:

Napájení

Před prvním zapojením Arduina Yún si uvědomte, že nemá regulátor napětí a je třeba ho napájet 5 V. To v případě, že byste napájení zapojili na pin Vin. Pro napájení se používá mikro-USB kabel s příslušným zdrojem. Špičkový odběr Arduino Yún se zapnutou Wifi a SD kartou je cca 315 mA, takže bude stačit běžný napájecí adaptér. Lze také dokoupit modul PoE, který si pak musíte na příslušné místo sami připájet. Pozor, aby byl modul s Arduino Yún kompatibilní.

Základní konfigurace

Předpokládám, že jste na Arduino rozblikali alespoň LED a nebudu se zabývat instalací Arduino IDE, nastavením komunikace s deskou, atd.

Základní konfigurace probíhá přes webové rozhraní. Připojte se na Wifi, který se jmenuje Arduino Yun-xxxxxxxxxxxx. To za pomlčkou je MAC adresa Wifi adaptéru vašeho Arduino Yún.

image1

V prohlížeči potom otevřete stránku http://arduino.local/ nebo http://192.168.240.1

image2

Výchozí heslo je arduino.

image3

Pomocí tohoto rozhraní provedete potřebnou konfiguraci, zejména změnu hesla a jména desky.

K desce se můžete samozřejmě připojit i přes SSH.

image4

SD karta

Vnitřní paměť Arduino Yún není nijak veliká. Je ji možné rozšířit na SD kartu, ale mě stačila. Python skripty a konfiguraci budeme ukládat na SD kartu. Aby systém SD kartu automaticky rozpoznal a připojil, tak je na ní třeba vytvořit adresář arduino s podadresářem www. Takto vložená karta se připojí na /mnt/sda1.

Knihovna Bridge

Komunikace Arduino – Linux probíhá přes sériovou linku a je zapouzdřena do knihovny Bridge.

image5

Zdroj: http://arduino.cc/en/uploads/Main/BridgeInShort.png

Díky knihovně Bridge můžete využívat veškeré zdroje linuxového prostředí v prostředí Arduino.

V tomto projektu budeme z knihovny Bridge potřebovat jen malou část, která nám umožní z Python skriptu načíst hodnotu z dálkoměru. Jedná se konkrétně o třídy YunServer a YunClient. Vestavěný server v linuxovém prostředí umožňuje předávat parametry do aplikace, která běží v prostředí Arduino a z Arduino prostředí pak můžete zapsat informaci zpět.

Příklad: Ovládání LED na desce přes web

Každý zná aplikaci „Hello world!“ v mnoha jazycích. „Hello world!“ pro Arduino je blikání LED, která je umístěna přímo na desce na pin 13. Následující příklad bude rozsvěcet a zhasínat LED přes URL.

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

const int LED = 13;
YunServer server;

void setup() {
  pinMode(LED,OUTPUT);
  digitalWrite(LED, LOW);
  Bridge.begin();
  
  server.listenOnLocalhost();
  server.begin();
}

void loop() {
  YunClient client = server.accept();
  
  if (client) {
    String command = client.readString();
    command.trim();
    if (command == "on") {
      digitalWrite(LED, HIGH);
      client.print("ON");
    } else if (command == "off") {
      digitalWrite(LED, LOW);
      client.print("OFF");
    } else {
      client.print("ERROR: " + command);
    }
    
    client.stop();
  }
  delay(50);  
}

Pokud nyní zavoláte z prohlížeče URL ve tvaru

http://[adresa Arduino]/arduino/[command]

tak vše od arduino/ dál bude předáno do prostředí Arduino a načteno metodou readString() třídy YunClient. Odpověď pak zapisujete metodou print(). Důležité je nezapomenout na ukončení spojení metodou stop().

Při prvním pokusu nejspíš budete požádáni o jméno a heslo k Arduino Yún. Ve výchozím nastavení je toto volání chráněno heslem. Vypnutí provedete přes webovou konfiguraci, nebo budete jméno a heslo používat.

image6

Python skript pro ovládání LED

Na Arduino Yún je předinstalovaný Python 2.7.3. Pokud chcete z Python skriptu předat požadavek do Arduino prostředí a získat odpověď, stačí komunikovat přes localhost. V opačném případě, kdy potřebujete z Arduino prostředí spustit Python skript, resp. libovolný program v linuxovém prostředí, a předat mu parametry, tak použijete třídu Process.

Jednoduchý skript pro ovládání LED pomocí Python:

#!/usr/bin/env python

import urllib
import sys

if len(sys.argv) != 2:
    sys.exit(1)

if sys.argv[1] == "on" or sys.argv[1] == "off":
    u = urllib.urlopen('http://localhost/arduino/' + sys.argv[1])
    print u.read()

Závěr

Velkou výhodou Arduino Yún jsou možnosti komunikace přes ethernet nebo Wifi díky vestavěnému linuxovému prostředí s přijatelnými nároky na energii. Samozřejmě provozovat Arduino Yún se zapnutou Wifi na baterii nebude mít asi dlouhého trvání. V dalším díle se zaměříme na službu IAM a SQS z Amazon Web Services.

Komentáře

Subscribe
Upozornit na
guest
2 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
McHa

Díky za pěknou serii ;) článků, moc se těším na další.

Spíš filozofujici otazka:
Sám mám Yun a dost přemýšlím proč je to udělané tak jak to je? Proč používat Bridge knihovnu a nekomunikovat
z Linuxu pěkně, např. z pythonu přes serial port, rovnou s AVR částí přímo? Tedy proč tam vkládat mezičlánek Bridge knihovny. Chápu, že pro některé aplikace to může být fajn, ale pro některé by bylo asi klidnější a hlavně paměťově-úspornější, rovnou sahat z linuxu na AVR a neřešit univerzální seriový protokol přes mezičlánek. Zatím jsem si jen hrál, ale obávám se, že až budu chtít udělat něco opravdovějšího, bude mi na AVR docházet místo a pak každý bajt jako když najdeš :). Ale to je spíš otázka na někoho kdo Yun navrhoval. ;)

Jinak k vaší serii. Moc se těším na další pokračování :)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.