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