Je vais maintenant utiliser Carriots pour faire du data logging: l'Arduino, muni de son shield ethernet, va envoyer des mesures au serveur de Carriots à intervalles réguliers, de façon à ce qu'elles y soient enregistrées. Ces données seront ensuite accessibles à partir de n'importe quel ordinateur branché à internet (à condition d'avoir les autorisations d'accès nécessaires, bien entendu).
Marche à suivre:
1) Ouvrir un compte gratuit chez Carriots.
2) Accéder au "control panel" de Carriots et prendre en note votre "Full Privileges APIkey" (en passant par My Settings / My Account). Vous aurez besoin de cet identifiant dans le sketch de l'Arduino.
3) Noter également le nom de l'appareil (device developer ID). Vous avez droit de brancher jusqu'à 10 appareils gratuitement sur Carriots. Si vous utilisez l'appareil qui a été créé par défaut lors de votre inscription, cet ID sera de la forme "defaultDevice@votre_nom_d'utilisateur".
4) Le montage est constitué d'un Arduino muni de son shield Ethernet, auquel j'ai ajouté trois potentiomètres branchés aux entrées A0, A1 et A2, afin de simuler des capteurs analogiques. Le shield ethernet est évidemment branché à internet, par l'entremise d'un câble ethernet.
5) Le sketch ci-dessous envoie à Carriots trois mesures (prises par des capteurs analogiques branchés aux entrées A0, A1 et A2) toutes les 30 secondes. Je crois qu'il sera facile de modifier ce sketch pour qu'il réponde à vos besoins spécifiques (en modifiant, par exemple, le délai entre les différentes prises de mesures).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************* Carriots_Data_Logger.ino *********************** | |
* | |
* Exemple de Data Logger avec carriots.com | |
* | |
* Les valeurs de trois capteurs analogiques branchés à A0, A1 et A2 | |
* sont envoyées à carriots.com à intervalles réguliers | |
* | |
* http://electroniqueamateur.blogspot.com/2013/08/data-logging-avec-carriots-arduino-et.html | |
* | |
**********************************************************************/ | |
#include <SPI.h> | |
#include <Ethernet.h> | |
// Votre "full device APIKey" se trouve dans le control panel de carriots.com: My Settings -> My Account | |
// "id_developer" de votre "device" est de la forme defaultDevice@votre_login | |
const String APIKEY = "Mettre ici votre Full Privileges Apikey"; // Mettre ici votre Full Privileges Apikey | |
const String DEVICE = "Mettre le id_developer de votre appareil"; // Mettre le "id_developer" de votre "device" | |
// Adresse MAC de votre Shield Ethernet. Il faut simplement éviter que deux appareils de votre réseau | |
// local aient la même adresse MAC (vous pouvez laisser la ligne suivante telle quelle dans la plupart | |
// des cas. | |
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |
IPAddress server(82,223,244,60); // C'est l'adresse IP de api.carriots.com | |
EthernetClient client; | |
int capteurPin1 = A0; // premier capteur à la pin A0 | |
int capteurPin2 = A1; // premier capteur à la pin A1 | |
int capteurPin3 = A2; // premier capteur à la pin A2 | |
long previousMillis = 0; | |
long interval = 30000; // nombre de millisecondes entre 2 prises de mesure consécutives | |
void setup() { | |
Serial.begin(9600); | |
Serial.println("Demarrage"); | |
// DHCP (dynamic host configuration protocol): on cherche une adresse ip pour | |
// notre shield Ethernet. | |
if (Ethernet.begin(mac) == 0) { | |
Serial.println("Echec de la configuration DHCP Ethernet"); | |
while(true); // alors pas la peine d'aller plus loin | |
} | |
Serial.println("Reussite de la configuration DHCP Ethernet"); | |
delay(1000); // on se laisse le temps de souffler | |
} | |
void loop() { | |
unsigned long currentMillis = millis(); | |
if(currentMillis - previousMillis > interval) { | |
previousMillis = currentMillis; | |
sendStream(); // on envoie les données au serveur carriots | |
} | |
// Si on reçoit des données de l'internet, on les envoit au moniteur | |
// série (utile pour déboguer). | |
while (client.available()) { | |
char c = client.read(); | |
Serial.print(c); | |
} | |
if (!client.connected()) { | |
client.stop(); | |
} | |
} | |
// Envoi des données | |
void sendStream() | |
{ | |
int valeur; | |
// on lit les valeurs des capteurs et on en fait des strings | |
valeur = analogRead(capteurPin1); | |
String txt1 = String(valeur); //String contenant la valeur du premier capteur | |
Serial.print("Valeur du premier capteur: " ); | |
Serial.println(txt1); // pour débogage | |
valeur = analogRead(capteurPin2); | |
String txt2 = String(valeur); //String contenant la valeur du deuxieme capteur | |
Serial.print("Valeur du deuxieme capteur: " ); | |
Serial.println(txt2); // pour débogage | |
valeur = analogRead(capteurPin3); | |
String txt3 = String(valeur); //String contenant la valeur du troisieme capteur | |
Serial.print("Valeur du troisieme capteur: " ); | |
Serial.println(txt3); // pour débogage | |
if (client.connect(server, 80)) { // Si la connexion fonctionne | |
Serial.println("Connection etablie"); | |
String json = "{\"protocol\":\"v2\",\"device\":\""+DEVICE+"\",\"at\":\"now\",\"data\":{\"valeur1\":\""+txt1+"\",\"valeur2\":\""+txt2+"\",\"valeur3\":\""+txt3+"\"}}"; | |
// HTTP request | |
client.println("POST /streams HTTP/1.1"); | |
client.println("Host: api.carriots.com"); | |
client.println("Accept: application/json"); | |
client.println("User-Agent: Arduino-Carriots"); | |
client.println("Content-Type: application/json"); | |
client.print("carriots.apikey: "); | |
client.println(APIKEY); | |
client.print("Content-Length: "); | |
int thisLength = json.length(); | |
client.println(thisLength); | |
client.println("Connection: close"); | |
client.println(); | |
client.println(json); | |
} | |
else { | |
// la connexion n'a pas fonctionné | |
Serial.println("Echec de la connexion!"); | |
} | |
} | |
Le moniteur série vous permettra de vérifier si le transfert de données s'effectue correctement (30 secondes après le démarrage du sketch, si vous n'y avez rien changé). Vous pouvez également consulter les données envoyées en allant dans la section "Data Streams" du control panel de Carriots (il faut rafraîchir la page pour voir les données s'ajouter).
Pour afficher les données sous forme de graphique, Carriots met à notre disposition un Wizard Widget Graphs (dans la section Publish Data). Cet outil construit pour vous un bout de script que vous pouvez ensuite coller dans une page web (j'ai utilisé le logiciel KompoZer). Voici le résultat obtenu avec mes données:
Ça fonctionne très bien. Par contre il serait utile de pouvoir visionner les graphique en cliquant un simple bouton directement sur le control panel de Carriots, sans qu'il nous soit nécessaire de créer une page web.
Qu'arrive-t-il si vous voulez récupérer vos données brutes afin, par exemple, de les traiter dans Excel? Ici ça se complique un peu. Comme je l'ai déjà mentionné, vous pouvez toujours aller les lire dans la section "Data Streams" du control panel de Carriots, mais ce n'est pas très pratique (surtout si vous avez une grande quantité de données à traiter).
Une autre option consiste à utiliser la commande "LIST" de l'API de Carriots. Pour ce faire, je suis allé sur la page "hurl.it" et j'y ai entré les informations suivantes:
J'ai obtenu en retour la totalité de mes données enregistrée sous la forme suivante:
{ "_id": "5218a0467c5d75dd148b5478", "_t": "str", "at": 1377345608, "device": "DataLogger@xyz", "protocol": "v2", "data": { "valeur2": "271", "valeur3": "1023", "valeur1": "0" }, "id_developer": "blablabla", "created_at": 1377345607, "owner": "xyz" },
À première vue, ça ne semble pas trop compliqué de faire un script en Python qui extraira les données pertinentes, mais ce serait quand même pratique d'avoir un bouton dans le control panel qui nous permettrait d'extraire les données rapidement sous la forme d'un fichier Excel.
Même difficulté pour effacer nos données: on peut les effacer une par une avec hurl.it. mais je n'ai pas trouvé de bouton dans le control panel de Carriots qui nous permettrait d'effacer facilement des données indésirables ou de tout effacer pour repartir à zéro. Ce serait bien utile!
Addendum:
Les gens de chez Carriots m'informent qu'un outil permettant d'exporter les données vers Excel sera bientôt disponible. :-)
Yves Pelletier (Twitter: @ElectroAmateur)
Aucun commentaire:
Enregistrer un commentaire