Internet of Things s FEZ Panda II
Pojem Internet of Things byl poprvé použit v roce 1999 a jeho původní význam je označení sítě jednoznačně identifikovatelných objektů (RFID, čárové kódy, atd.) spojených do struktury typu internet, které spolu komunikují. V současnosti je termín Internet of Things spíše vnímán jako publikování informací z různých senzorů do internetu a následné využití těchto dat. Příkladem může být sběr informací o radioaktivitě dobrovolníky po havárii v elektrárně Fukushima pomocí mobilních telefonů s připojeným Geigerovým počítačem a jejich okamžité publikování na internet.
Asi nejznámější službou, kam můžete informace ze senzorů zdarma publikovat, je Pachube. Pomocí této služby si vytvoříte kanál, kam odesíláte data ze senzorů a ty pak následně vizualizujete přímo ze stránek Pachube nebo si je můžete v různých formátech stáhnout a zpracovat např. pomocí aplikace Excel.
Vytvoření kanálu na Pachube
Po registraci na serveru Pachube si můžete vytvořit vlastní kanál pro data.
Data můžete na server ukládat sami nebo můžete požádat Pachube server, aby si data stahoval sám z dané URL. To řídíte přepínačem Fetch data automatically. Důležitá je také volba FEED STATUS, kde nastavujete viditelnost informací. Pomocí DATASTREAMS můžete do jednoho kanálu ukládat informace z více senzorů.
Abyste mohli data ukládat, tak vaše aplikace potřebuje mít k dispozici Secure Sharing Key. Tento klíč můžete přiřadit ke konkrétnímu kanálu tak, aby každý kanál měl svůj vlastní bezpečnostní klíč, nebo můžete jeden klíč sdílet pro více kanálů. Také můžete nastavit, zda je klíč určen jen pro čtení nebo i zápis. Tento klíč budete posílat v http hlavičce X-PachubeApiKey.
FEZ Connect Shield
FEZ Connect Shield rozšiřuje desku FEZ Panda II o připojení k internetu, vyvedení některých pinu na 3-pin konektory, zálohovací kondenzátor pro vnitřní hodiny, konektory pro serva a další.
Zdroj: GHI Elektronics
Rozhraní Ethernet využívá čip WIZnet W5100 připojený přes SPI. Knihovny potřebné pro práci s tímto Ethernet rozhraním najdete v GHIElectronics.NETMF.W5100.dll, GHIElectronics.NETMF.W5100.Dhcp.dll a GHIElectronics.NETMF.W5100.Http.dll. Tyto knihovny obsahují běžné objekty pro práci se sítí, např. HttpWebRequest, ale jsou specifické pro daný čip. Pokud použijete jiné knihovny, tak nebude síťová komunikace fungovat.
Sledování teploty v místnosti
Asi nejčastější a nejjednodušší aplikace pro Internet of Things je sledování teploty.
Zapojení
- FEZ Panda II
- FEZ Connect Shield
- LED eblock – green
- Thermometer eblock
Zdrojový kód
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
using GHIElectronics.NETMF.Net;
using GHIElectronics.NETMF.Net.NetworkInformation;
using System.Text;
using System.IO;
namespace Internet_of_Things_01
{
public class Program
{
private static FEZ_Components.Thermometer _thermometer;
private static FEZ_Components.LED _green;
// Klíč Pachube
private static string API_KEY = "xxxxxxx";
// ID kanálu
private static string FEED_ID = "xxxxx";
public static void Main()
{
_thermometer = new FEZ_Components.Thermometer(FEZ_Pin.AnalogIn.An2);
_green = new FEZ_Components.LED(FEZ_Pin.Digital.Di0);
_green.TurnOn();
// inicializace FEZ Connect Shield
WIZnet_W5100.Enable(SPI.SPI_module.SPI1, (Cpu.Pin)FEZ_Pin.Digital.Di10, (Cpu.Pin)FEZ_Pin.Digital.Di7, true);
// Povolení DHCP, je třeba mít MAC adresu. Nejjednudušší varinata je nákup staré síťové karty v bazaru, nebo použití MAC adresy z již vyřazené karty
Dhcp.EnableDhcp(new byte[] { 0x00, 0x2F, 0x3F, 0xED, 0xAA, 0x2B }, "FEZ");
Dhcp.RenewDhcpLease();
_green.ShutOff();
Debug.Print(new IPAddress(NetworkInterface.IPAddress).ToString());
Debug.Print(new IPAddress(NetworkInterface.DnsServer).ToString());
string data = string.Empty;
Stream s = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
while (true)
{
// Požadavek na odeslání dat na Pachube
using (request = (HttpWebRequest)HttpWebRequest.Create("https://api.pachube.com/v2/feeds/" + FEED_ID + ".csv"))
{
request.Method = "PUT";
// Nejjednodušší formát dat
request.ContentType = "text/csv";
// Autorizační klíč
request.Headers.Add("X-PachubeApiKey", API_KEY);
// Získání teploty
data = "temperature," + _thermometer.GetTemperatureCelsius().ToString();
Debug.Print(data);
byte[] buffer = Encoding.UTF8.GetBytes(data);
request.ContentLength = buffer.Length;
s = request.GetRequestStream();
s.Write(buffer, 0, buffer.Length);
using (response = (HttpWebResponse)request.GetResponse())
{
Debug.Print("Status code: " + response.StatusCode);
}
// Kontrolní bliknutí
_green.TurnOn();
Thread.Sleep(300);
_green.ShutOff();
Thread.Sleep(600000);
}
}
}
}
}
Štěpán