Collegare Netduino Plus al servizio web Pachube
Ora che sapiamo creare un Pachube feed aggiornabile non ci resta che sviluppare una piccola app, da far girare sul Netduino Plus, che acquisisce dei dati tramite le sue porte in ingresso e li invia al servizio web.
Sul sito Pachube sono presenti diversi esempi che illustrano come scrivere delle applicazioni basate sul .Net framework. Tra queste è presente un listato di codice che mostra come aggiornare un feed tramite codice C#.
Per utilizzare questo esempio è necessario aggiungere alla soluzione la libreria System.Http (Progetto->Aggiungi riferimento->System.Http.dll) e, tramite la clausola using , aggiungere i namespace System.Text e System.IO.
Il codice seguente mostra come aggiornare il nostro feed con un valore statico.
WebRequest rq; HttpWebResponse hwr; //eventuale proxy aziendale //WebProxy wp = new WebProxy("nome server proxy", 8080); //creo un buffer contenente la chiave e il valore per il feed byte[] buffer = Encoding.UTF8.GetBytes("CpuLoad,10"); //riferimento al feed in formato csv rq = WebRequest.Create("http://api.pachube.com/v2/feeds/28933.csv"); //assegnazione eventuale server proxy //rq.Proxy = wp; rq.Timeout = 5000; rq.Method = "PUT"; //request headers rq.ContentLength = buffer.Length; rq.ContentType = "text/csv"; rq.Headers.Add("X-PachubeApiKey", "API KEY PACHUBE"); try { Stream stm = rq.GetRequestStream(); stm.Write(buffer, 0, buffer.Length); stm.Close(); hwr = (HttpWebResponse)rq.GetResponse(); Debug.Print("response " + hwr.StatusCode); } catch (Exception ex) { Debug.Print("ERRORE: " + ex.Message); }
Il listato è molto sintetico e mostra come eseguire l’aggiornamento del feed. Nell’articolo precedente ho utilizzato XML per eseguire le operazioni di lettura e scrittura del feed. In questo caso, invece, è stato utilizzato il metodo che impiega un semplice file di testo csv (comma-separated values).
Le prime istruzioni istanziano un oggetto WebRequest e uno HttpWebResponse (fornisce un’implementazione specifica di HTTP della classe WebResponse). Tutto il lavoro viene eseguito dall’oggetto WebRequest che, dopo aver settato le varie proprietà relative al feed csv, crea uno stream IO per aggiornare il file csv remoto.
Impieghiamo le porte del Netduino per creare qualcosa di utile e dinamico. Tramite gli ingressi analogici acquisiamo delle grandezze, provenienti da diversi sensori, che possono essere graficate tramite feed Pachube.
Faccio riferimento all’articolo che illustrava l’utilizzo del sensore di temperatura analogico MCP9700a per monitorare l’ambiente e memorizzare i dati su Pachube.
Il codice viene così modificato:
WebRequest rq; HttpWebResponse hwr; //Impostop il pin A0 come ingresso analogico AnalogInput AN0 = new AnalogInput(Pins.GPIO_PIN_A0); Int16 Analog0 = 0; while (true) { //acquisisci il valore analogico Analog0 = (Int16)AN0.Read(); //creo una webrequest passando come argomento l'indirizzo del file csv rq = WebRequest.Create("http://api.pachube.com/v2/feeds/XXXXX.csv"); //setto i parametri per l'oggetto webrequest rq.Timeout = 3000; byte[] buffer = Encoding.UTF8.GetBytes("Temp," + Analog0.ToString()); rq.ContentLength = buffer.Length; rq.Method = "PUT"; rq.ContentType = "text/csv"; rq.Headers.Add("X-PachubeApiKey", "LA TUA API KEY"); //creo uno stream e scrivo i nuovi valori acquisiti try { Stream stm = rq.GetRequestStream(); stm.Write(buffer, 0, buffer.Length); stm.Close(); hwr = (HttpWebResponse)rq.GetResponse(); hwr.Close(); Debug.Print("response " + hwr.StatusCode); } catch (Exception ex) { Debug.Print("ERRORE: " + ex.Message); } //distruggo l'oggetto rq.Dispose(); //attendi 30 secondi Thread.Sleep(30000); }
Il listato è autodescrittivo e permette con poco studio di capire come avviene il meccanismo di aggiornamento.
Prima di caricare il codice sul Netduino è necessario impostare il suo indirizzo ip attraverso l’uso di MFDeploy (C:\Programmi\Microsoft .NET Micro Framework\v4.1\Tools\MFDeploy.exe).
Una volta selezionato il dispositivo tramite la porta usb clicchiamo sul menu Target->Configuration->Network.
Nella finestra seguente possiamo configurare l’indirizzo ip del Netduino Plus, la subnet mask e il gateway. Questi dati dobbiamo recuperarli dal router.
E’ possibile abilitare il flag DHCP per recuperare automaticamente questi valori ma con alcuni router questa procedura non funziona correttamente e quindi vi consiglio di utilizzare, almeno per le prove, un indirizzo statico.
Tutto molto semplice e veloce. Con le restanti porte possiamo sperimentare con l’aggiunta di altri sensori per creare applicazioni più evolute ed interessanti.
Related posts
2 Comments
Lascia un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test
Ciao Marco, vorrei contattarti in privato ma non ci riesco a trovare la tua mail
Ciao
puoi usare la mail info at logicaprogrammabile.it