Arduino + Cosm/Xively = Internet delle cose

Ethernet Shield

 

 

!!!!AGGIORNAMENTO!!!!

Ormai il sito di COSM si e’ aggiornato….vi rimanda a Xively.com.
Sono sempre loro…ma hanno cambiato l’impostazione grafica e hanno cambiato la libreria per Arduino. Quindi l’articolo e’ sempre valido ma si deve solo sostituire la libreria…e i richiami nel codice.
Sul sito di Arduino.cc sono presenti già gli esempi scaricabili liberamente…. 

 

Abbiamo acceso il led….abbiamo controllato la temperatura della stanza….vogliamo andare oltre???? Pubblichiamo il tutto su internet????
Qualche giorno fa un lettore mi chiede consigli per la realizzazione di una stazione meteo con Arduino e magari con una Raspberry per pubblicare il tutto su internet….
Facendo due conti mi sono reso conto che c’era troppa roba…basta solo l’arduino e rispondendo alla mail con qualche piccolo consiglio passo la palla al lettore.

Casualmente dopo un paio di giorni mi arriva una ethernet shield per arduino dalla Cina….quale migliore occasione per poter testare il funzionamento…se non quello di studiare il sistema per l’amico appassionato?

La temperatura la sappiamo leggere…..su internet ci sappiamo andare….mancava unire il tutto presentandolo con una grafica accattivante……magari sapendo quasi niente di programmazione web 🙂

Partiamo da zero…

L’ethernet shield e’ una schedina che si monta sopra arduino. Non c’e’ da saldare nulla…coincide con i piedini e si alimenta direttamente da arduino. Abbiamo un tasto reset e uno slot per una SD nel caso in cui volessimo fare data logging in locale. Installandola restano comunque liberi i piedini per la connessione con l’esterno (qualcuno e’ occupato per la connessione con la shield).

Ci collego sopra un LM35….sensore di temperatura identico a un comunissimo transistor con il case in plastica (BC237, 337….)

Le connessioni sono banali….ha 3 piedini….

1) +5v
2) v_out
3) GND

LM35 -  connessioni pin
LM35 – connessioni pin

quindi colleghiamo direttamente 1 e 3 rispettivamente a +5v e GND di arduino…..e il 2 ad un ingresso analogico…io ho scelto il 2.

Fine connessioni….passiamo alla programmazione.

Anzi no…. 🙂

Perché in questo caso il codice da dare in pasto ad arduino … ce lo da direttamente il sito su cui pubblicheremo i dati 🙂

Scopro l’esistenza di COSM.COM … un “raccoglitore di dati”….gratuito!

Ci si iscrive….si configura il tutto…e vediamo pubblicati (e utilizzabili) i nostri dati. Dal sito stesso poi possiamo prendere i dati in diversi formati e trasmetterli al nostro sito web personale. GRANDIOSO!!

Procediamo per passi….

Andiamo sulla home page ….. http://www.cosm.com e ci registriamo.

HomePage - www.cosm.com
HomePage – www.cosm.com

Subito dopo ci permette di iniziare a creare  aggiungendo il nostro arduino…(ma anche altri device)

cosm.com - Aggiunta di un "device"
cosm.com – Aggiunta di un “device”

 

Scegliamo Arduino….riempiamo i 3 campi richiesti con i dati riguardanti il nostro progetto e alla fine ci viene generato il codice da programmare con le KEY riferite al nostro utente.
Il codice e’ creato in modo da leggere i dati provenienti dal pin 2 (analogico) ….e i dati sono riportati in modo grezzo…quindi da convertire per riportare un dato esatto (in questo caso la temperatura).

Ecco cosa il listato generato e già convertito alla riga 79 per ottenere la temperatura in gradi centigradi utilizzando l’LM35.

 /**
 * Cosm Arduino sensor client example.
 *
 * This sketch demonstrates connecting an Arduino to Cosm (https://cosm.com),
 * using the new Arduino library to send and receive data.
 *
 * Requirements
 *   * Arduino with Ethernet shield or Arduino Ethernet (board must use the
 *     Wiznet Ethernet chipset)
 *   * Arduino software with version >= 1.0
 *   * An account at Cosm (https://cosm.com)
 *
 * Optional
 *   * An analog sensor connected to pin 2 (note we can still read a value from
 *     the pin without this)
 *
 * Created 8th January, 2013 using code written by Adrian McEwen with
 * modifications by Sam Mulube
 *
 * Full tutorial available here: https://cosm.com/docs/quickstart/arduino.html
 *
 * This code is in the public domain.
 */

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Cosm.h>

#define API_KEY " KEY FORNITA AUTOMATICAMENTE" // your Cosm API key
#define FEED_ID ID FORNITO AUTOMATICAMENTE // your Cosm feed ID

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

// Analog pin which we're monitoring (0 and 1 are used by the Ethernet shield)
int sensorPin = 2;

unsigned long lastConnectionTime = 0;                // last time we connected to Cosm
const unsigned long connectionInterval = 15000;      // delay between connecting to Cosm in milliseconds

// Initialize the Cosm library

// Define the string for our datastream ID
char sensorId[] = "sensor_reading";

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

// Wrap the datastream into a feed
CosmFeed feed(FEED_ID, datastreams, 1 /* number of datastreams */);

EthernetClient client;
CosmClient cosmclient(client);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  Serial.println("Cosm Sensor Client Example");
  Serial.println("==========================");

  Serial.println("Initializing network");
  while (Ethernet.begin(mac) != 1) {
    Serial.println("Error getting IP address via DHCP, trying again...");
    delay(15000);
  }

  Serial.println("Network initialized");
  Serial.println();
}

void loop() {
  // main program loop
  if (millis() - lastConnectionTime > connectionInterval) {
    // read a value from the pin
    int sensorValue = analogRead(sensorPin);
    sensorValue = (5.0 * sensorValue * 100.0)/1024.0; 
    // send it to Cosm
    sendData(sensorValue);
    // read the datastream back from Cosm
    getData();
    // update connection time so we wait before connecting again
    lastConnectionTime = millis();
  }
}

// send the supplied value to Cosm, printing some debug information as we go
void sendData(int sensorValue) {
  datastreams[0].setFloat(sensorValue);

  Serial.print("Read sensor value ");
  Serial.println(datastreams[0].getFloat());

  Serial.println("Uploading to Cosm");
  int ret = cosmclient.put(feed, API_KEY);
  Serial.print("PUT return code: ");
  Serial.println(ret);

  Serial.println();
}

// get the value of the datastream from Cosm, printing out the value we received
void getData() {
  Serial.println("Reading data from Cosm");

  int ret = cosmclient.get(feed, API_KEY);
  Serial.print("GET return code: ");
  Serial.println(ret);

  if (ret > 0) {
    Serial.print("Datastream is: ");
    Serial.println(feed[0]);

    Serial.print("Sensor value is: ");
    Serial.println(feed[0].getFloat());
  }

  Serial.println();
}

Noterete che sono richieste delle librerie particolari…..andate nella sezione SUPPORT/API e trovate il tutto.

Una volta programmato il tutto il sito vi riporta nella configurazione dei dati ricevuti….

cosm.com - configurazione dati
cosm.com – configurazione dati

In questo caso ho configurato solamente Unit e Symbol….e poi premete in basso Save!

Abbiamo finito!!!!!

Non resta altro che collegare arduino alla nostra rete e dare corrente…..automaticamente riceverà un indirizzo IP sfruttando il DHCP e inizierà a inviare i dati al sito …

questi erano i dati relativi alla temperatura di una mia stanza..

cosm.com - dati analizzati
cosm.com – dati analizzati

 

Semplice no???

Noterete che sotto la temperatura ci sono le scritte JSON… XML…CSV….i dati stessi possono essere esportati e utilizzati in tempo reale nei vostri siti … o nei vostri progetti…il tutto A GRATISSEEEE 🙂

Inutile dire che si possono analizzare più sensori presenti su arduino e che il sito non funziona solo in ricezione/pubblicazione ma anche in trasmissione….

E’ possibile inviare dati all’arduino e permettere che reagisca di conseguenza….

Si possono creare App da utilizzare nei nostri siti o nei nostri smartphone…..ma questa e’ un’altra storia….che troverete tra un po in queste pagine 🙂

Ciaooo

 

 

 

 

 

One thought on “Arduino + Cosm/Xively = Internet delle cose

  1. Buongiorno,
    ho letto questo articoloe con intersse.
    Sono riuscito a spedire quando ancora era Cosm una misura che si può vedere sul mio sito http://www.fotoarrigo.com
    Ora mi intersserebbe riuscire a spedire e formare il grafico anche di umidità e pressione barometrica.
    Per caso hai già provatoa fare spedizioni multiplr di ID e visualizzazioni?
    Grazie, Arrigo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *