giovedì 18 luglio 2013

Xively su Arduino

Per sviluppare il progetto presentato in questo precedente post ho provato ad inviare i dati del sensore non ad un server udp ma ad un servizio internet denominato Xively (ex Cosm, ex Pachube) che permette la registrazione di dati (principalmente da sensori) e la visualizzazione direttamente su grafico


Una volta effettua la registrazione si deve andare nel menu di Develop e si deve creare un nuovo Device

una volta creato il device si entra nella configurazione e si devono annotare i valori delle Api Keys


i valori importanti sono il feed_id (in questo caso 302563049) e la chiave (KP........)

A questo punto si puo' iniziare a programmare l'Arduino. Sempre dal sito di Xively si sceglie il menu Developer Center/ Libraries e si sceglie di scaricare la libreria per Arduino a questo link. Per soddisfare si deve scaricare ed installare anche la liberia HttpClient 


Si puo' quindi caricare il seguente sketch su Arduino che semplicemente manda sul sito i valori progressivi di un contatore. Ovviamente questo e' lo schema base e nell'uso reale si devono inviare gli output del proprio sensore.

Oltre ad impostare la Key ed il feed_id si deve anche impostare un nome per il sensore. Importante: tale stringa non deve contenere caratteri speciali o spazi

Attenzione: questo semplice sketch occupa circa 20 Kb dei 32Kb disponibili sull'Arduino Uno. Per rendere il tutto piu' snello si puo' impostare un indirizzo fisso alla scheda dell'Arduino e non usare il DHCP come nell'esempio
-------------------------------------------------------
#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>

// MAC address for your Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Xively key
char xivelyKey[] = "KPpjdurjzx9jVhp8PwpMCd6byMSatfcKuOu1CHJbdDkxXrI4";
//il sensorId deve essere una stringa senza spazi e caratteri speciali
char sensorId[] = "Contatore_test";
long unsigned int feed_id = 302563049;

XivelyDatastream datastreams[] = {
  XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};

XivelyFeed feed(feed_id, datastreams, 1 /* number of datastreams */);

EthernetClient client;
XivelyClient xivelyclient(client);

float contatore;

void setup() {
  contatore = 0.0;
  Serial.begin(9600);
  while (Ethernet.begin(mac) != 1)
  {
    Serial.println("Error getting IP address via DHCP, trying again...");
    delay(5000);
  }
}

void loop() {
  contatore = contatore + 1;
  datastreams[0].setFloat(contatore);
  int ret = xivelyclient.put(feed, xivelyKey);
  Serial.println(ret);
  delay(5000);
}
---------------------------------------------------------------------

Una nota finale: se si collega la scheda ad un router Fastweb il programma non funziona ritornando come codice di errore -405. Cio' e' ragionevolmente dovuto alla peculiare configurazione della rete ADSL casalinga di Fastweb

Nessun commento:

Posta un commento

Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...