Arduino et Xively

Xively, pour quoi faire ?

Le site Xively permet de lire les valeurs courantes d’un ou de plusieurs capteurs reliés à Arduino, et de visualiser automatiquement leurs évolutions en fonction du temps sous la forme de graphiques.

Comment faire ?

– Télécharger les librairies suivantes, et les dézipper dans votre répertoire “libraries/” en faisant attention à ce que le nom des répertoires ne contiennent que des lettres :

https://github.com/xively/xively_arduino/archive/master.zip

https://github.com/amcewen/HttpClient/archive/master.zip

– Se créer un compte sur le site Xively.
– Aller dans le menu “DEVELOP”, puis ajouter un appareil “DEVICE” (par exemple : MyArduino).

Vous allez alors voir se créer dans la partie droite un numéro “FEED” et une clé “KEY” que vous devrez utiliser dans le code à utiliser par la suite.

Un exemple : le potentiomètre

Nous allons lire depuis internet une valeur définie par un potentiomètre branché au pin A0.

le code suivant devra être modifier :
– mettre une IP compatible avec le réseau ;
– changer la valeur de “xivelyKey[]” en prenant votre API KEY”
– changer le premier paramètre de “XivelyFeed feed()” en y mettant votre numéro personnel de feed ;
– le nom du “SensorId[]” sera le nom qui apparaîtra sur le site.

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

// The IP address will be dependent on your local network:
IPAddress ip(192,168,1,210);

// Your Xively key to let you upload data
char xivelyKey[] = "YsPUR0DSV425yvDSvFBzzdnYSoVM1baXnY36H3K0rOYYgzzW";

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

// Define the strings for our datastream IDs
char sensorId[] = "Potentiometre";
XivelyDatastream datastreams[] = {
  XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};
// Finally, wrap the datastreams into a feed
XivelyFeed feed(533380935, datastreams, 1 /* number of datastreams */);

EthernetClient client;
XivelyClient xivelyclient(client);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
  Serial.println("Starting single datastream upload to Xively...");
  Serial.println();


  Ethernet.begin(mac, ip);

}

void loop() {
  int sensorValue = analogRead(sensorPin);
  datastreams[0].setFloat(sensorValue);

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

  Serial.println("Uploading it to Xively");
  int ret = xivelyclient.put(feed, xivelyKey);
  Serial.print("xivelyclient.put returned ");
  Serial.println(ret);

  Serial.println();
  delay(1000);
}

Pour aller plus loin : des alertes avec Zapier

Pour l’instant, nos mesures sont enregistrées sur le site Xively. Mais en ajoutant ce qu’on appelle sur ce site un “trigger”, on peut créer une ou plusieurs alertes. On peut par exemple, dans notre cas, décider d’envoyer un email si notre valeur est supérieur à 1000.

Pour cela, on aura besoin d’un compte sur le site https://zapier.com/. Ensuite :
– Make a new zap
– On choisit pour la gauche : “Web Hook” et en dessous “Catch Hook”.
– On choisit pour la partie droite par exemple “Gmail”.
– On continue et on copie le lien.
– on termine cette partie en se laissant guider.

On revient sur le site Xively et on recopie le lien dans la partie “Add Trigger”.

Voila ! Et tout fonctionne sans aucune intervention de votre part. A chaque fois que votre valeur dépassera 1000, un email sera envoyé.


Niveau supérieur : Arduino, ethernet et internet