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

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.
Seriál: Moje garáž, můj hrad (7 dílů)
- Moje garáž, můj hrad – začíná seriál nejen pro kutily 7. 1. 2015
- Moje garáž, můj hrad – zapojujeme Arduino Yún 14. 1. 2015
- Moje garáž, můj hrad – připojujeme Amazon 23. 1. 2015
- Moje garáž, můj hrad – boto nám to zařídí 30. 1. 2015
- Moje garáž, můj hrad – posíláme dotaz do garáže 6. 2. 2015
- Moje garáž, můj hrad – měříme vzdálenost ultrazvukem 13. 2. 2015
- Moje garáž, můj hrad – a konečně parkujeme 20. 2. 2015
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.
V prohlížeči potom otevřete stránku http://arduino.local/ nebo http://192.168.240.1
Výchozí heslo je arduino.
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.
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.
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.
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.
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í :)
Pokud je potřeba šetřit místo, tak je samozřejmně řešením knihovnu Bridge vypustit. Je tam jen pro zjednodušení práce.