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.

image

Vytvoření kanálu na Pachube

Po registraci na serveru Pachube si můžete vytvořit vlastní kanál pro data.

image

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.

image

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ší.

image

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

image

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);
                 }
             }
  
         }
  
     }
 }

image

Štěpán