Kdo z vás sleduje seriál The Big Bang Theory, tak si jistě pamatuje 9. díl první série, kde čtveřice našich oblíbených geeků připojí osvětlení v místnosti k internetu. Protože budeme v jedné části pracovat s napětím ze zásuvky, je tato část zapojení na vaši vlastní zodpovědnost a neměl by ji provádět nikdo bez příslušného oprávnění.
Pomocí modulu s relé budeme ovládat až čtyři spotřebiče. Sepnutí jednotlivých relé pak budeme řídit zasláním zprávy na Twitter. Například zpráva 1101 přepne první, druhé a čtvrté relé.
Upozornění: V době psaní tohoto článku obsahuje knihovna pro práci s ethernet modulem chybu. Síťová komunikace se nastartuje pouze v případě, když ethernetový kabel připojíte a�� v době, kdy je aplikace spuštěna. Pokud aplikaci spustíte s připojeným ethernetovým kabelem, tak nebude síťová komunikace fungovat.
.NET Gadgeteer je od začátku určen pro začátečníky, takže i práce se sítí je maximálně zjednodušena pomocí podpůrných objektů. Tyto objekty najdete ve jmenném prostoru Gadgeteer.Networking. V našem příkladu používáme desku FEZ Spider a modul J11D, který je v podstatě jen ethernet konektor. Konektor E je podle specifikace přímo ethernet rozhraní. Pokud byste chtěli použít FEY Hydra musíte mít modul ENC28, který obsahuje i příslušnou elektroniku a připojuje se na konektor S, protože FEZ Hydra nemá konektor E.
Kromě modulů pro ethernet existují i moduly pro Wifi. Wifi modul můžete snadno nahradit externím zařízením. Já jsme použil ASUS WL-330gE, který je nakonfigurován v režimu adaptér, takže se v podstatě chová jako Wifi modul připojený na ethernet.
_hr = HttpHelper.CreateHttpGetRequest("http://search.twitter.com/search.atom?q=" + _user + "&rpp=5&include_entities=true&result_type=mixed");
_hr.ResponseReceived += new HttpRequest.ResponseHandler(_hr_ResponseReceived);
// odeslání požadavku
_hr.SendRequest();
K ovládání zásuvek využijeme modul relé. Tento modul může ovládat čtyři relé, která jsou dostatečně dimenzována i na napětí v zásuvkách a povolují i dostatečný odběr proudu. U každého relé je navíc kontrolní dioda, která indikuje stav relé. Relé má jeden vstup označený jako CO. V základním stavu, je tento vstup spojen s výstupem označeným NC (Normally Connected) . Pokud přepnete relé, tak se rozsvítí LED, výstup NC se odpojí a CO propojí s NO (Normally Open). Při zapojování relé vkládám mezi jednotlivé příkazy malou pauzu kvůli zamezení případné proudové špičky, kterou by mohlo sepnutí čtyř relé vyvolat.
relays.Relay1 = lastTweet[0] == '1';
Thread.Sleep(100);
relays.Relay2 = lastTweet[1] == '1';
relays.Relay3 = lastTweet[2] == '1';
relays.Relay4 = lastTweet[3] == '1';
Zapojení silové části
Tuto část můžete jakkoliv změnit. Já jsem použil Twitter Search API. Hledám jméno uživatele, a pokud zpráva obsahuje jen 4 znaky, tak ji beru jako příkaz pro přepnutí relé. Samozřejmě můžete toto hledání změnit třeba za hledání nějakého hashtag.
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
using System.Net;
using System.Xml;
using Gadgeteer.Modules.Seeed;
namespace NetworkBasics
{
public partial class Program
private HttpRequest _hr = null;
private uint _line = 1;
private uint _lineHeight = 14;
private string _lastSetup = string.Empty;
private string _user = "stepanb";
// Časovač
private GT.Timer _timer = new GT.Timer(30000);
void ProgramStarted()
Debug.Print("Program starting...");
_timer.Tick += new GT.Timer.TickEventHandler(_timer_Tick);
// události připojení/odpojení ethernetového kabelu
ethernet.NetworkUp += new GTM.Module.NetworkModule.NetworkEventHandler(ethernet_NetworkUp);
ethernet.NetworkDown += new GTM.Module.NetworkModule.NetworkEventHandler(ethernet_NetworkDown);
// nepřipojujte ethernetový kabel dřív, než bude na displeji tento text
display.SimpleGraphics.DisplayText("Program Started", (Font)Resources.GetFont(Resources.FontResources.Arial10), GT.Color.White, 10, _lineHeight * _line++);
Debug.Print("Program Started");
}
void _timer_Tick(GT.Timer timer)
// příprava objektu pro http komunikaci
// Twitter API - https://dev.twitter.com/
// při ztrátě připojení, přepneme včechna relé do výchozí polohy
void ethernet_NetworkDown(GTM.Module.NetworkModule sender, GTM.Module.NetworkModule.NetworkState state)
// pozastavení časovače
_timer.Stop();
_lastSetup = string.Empty;
relays.Relay1 = false;
relays.Relay2 = false;
relays.Relay3 = false;
relays.Relay4 = false;
// připojení k ethernetu
void ethernet_NetworkUp(GTM.Module.NetworkModule sender, GTM.Module.NetworkModule.NetworkState state)
// vypsání IP adresy pro kontrolu
display.SimpleGraphics.DisplayText(ethernet.NetworkSettings.IPAddress, (Font)Resources.GetFont(Resources.FontResources.Arial10), GT.Color.White, 10, _lineHeight * _line++);
// nastartování časovače
_timer.Start();
// zpracování odpovědi z Twitter
void _hr_ResponseReceived(HttpRequest sender, HttpResponse response)
if (response.StatusCode != "200")
return;
XmlReader reader = XmlReader.Create(response.Stream);
reader.MoveToContent();
string lastTweet = string.Empty;
while (reader.Read())
// zajímá nás pouze obsah elementu content
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "content"))
lastTweet = reader.ReadElementString();
// zajímájí nás jen Tweety délky 4 znaky
if (lastTweet.Length == 4)
break;
response.Stream.Close();
if ((lastTweet.Length != 4) || lastTweet == _lastSetup)
_lastSetup = lastTweet;
// kontrolní výpis na displej
display.SimpleGraphics.DisplayText(lastTweet, (Font)Resources.GetFont(Resources.FontResources.Arial10), GT.Color.Red, 10, _lineHeight * _line++);
// nastavení relé
// zapínáme preventivně postupně
Štěpán