Introduction: From Pressure Sensor to Internet

Le but de ce projet est d'enregistrer les données d'un capteur bmp085 sur un serveur et de les afficher sur une page web.

Matériel nécessaire :

  • Carte Arduino Uno + IDE Arduino
  • Capteur de pression bmp085
  • BLE shield nrf8001
  • Dongle Bluetooth usb
  • Raspberry Pi (à jour et connectée à internet)

Step 1: Détecter Son BLE SHiELD

Cette étape nous permet de nous assurer que le shield RedBearLab Bluetooth Low Energy est détecté par la Raspberry. Dans un premier temps, il faut brancher correctement les différents shields sur l'arduino (http://redbearlab.com/bleshield/). Une fois les shields installés, il faut téléverser sur la carte un programme qui active le BLE. Pour cela, téléchargez la dernière version du projet BLEShield (https://github.com/RedBearLab/BLEShield) et suivez les instructions du document LibraryManager.pdf afin d'installer correctement les librairies nécessaires. Après avoir installé les librairies, téléversez le fichier SimpleControls.ino sur la carte.

Ensuite, branchez le dongle bluetooth et installez bluez sur RPI à l'aide de la commande "sudo apt-get install bluez". Une fois bluez installé, il faut lancer un scan pour chercher les appareils connectés en BLE. Pour cela, lancez la commande sudo hcitool lescan (tapez CTRL+C pour interrompre le scan). Notez l'adresse de votre BLE shield (elle doit s'afficher sous la forme xx:xx:xx:xx:xx:xx). Une fois le shield détecté, tentez de vous y connecter à l'aide de la commandesudo gatttool -b xx:xx:xx:xx:xx:xx -t random -I. Vous verrez alors apparaître une ligne de commande interactive. Tapez la commande "connect" comme indiqué ci-dessous:

[xx:xx:xx:xx:xx:xx][LE]> connect

Attempting to connect to xx:xx:xx:xx:xx:xx

Connection successful

source : https://lilyhack.wordpress.com/2014/02/03/ble-read-write-arduino-raspberry-pi/

Step 2: Afficher Les Données Du Capteur Sur Un Terminal

Cette étape consiste à lire les données du capteur bmp085 et à les envoyer en bluetooth vers la raspberry. Pour cela, il faut modifier le script SimpleControls comme indiqué dans les fichiers joints et ajouter ces fichiers dans le dossier où se trouve SimpleControls. Une fois votre programme téléversé, votre arduino est censée envoyer les données de pression, de température et d'altitude via le BLE vers la raspberry.

Pour vérifier cela, lancez un terminal et connectez vous à votre BLE shield (voir étape 1). Les commandes qui vous permettent de recevoir et d'afficher les données envoyées par le BLE shield sont les suivantes sur la ligne de commande interactive:

[xx:xx:xx:xx:xx:xx][LE]>char-write-cmd 0x000b A00100
[xx:xx:xx:xx:xx:xx][LE]>char-write-req 0x000e 0100 –listen

Il se peut que vous ayez à changer les valeurs des handle 0x000b et 0x000e. Pour savoir quelle valeur mettre, tapez la commande [xx:xx:xx:xx:xx:xx][LE]>char-desc

handle: 0x000b, uuid: 713d0003-503e-4c75-ba94-3148f18d941e

handle: 0x000c, uuid: 2803

handle: 0x000d, uuid: 713d0002-503e-4c75-ba94-3148f18d941e

handle: 0x000e, uuid: 2902

Voyez ensuite quels handle correspondent aux adresses 713d0003-503e-4c75-ba94-3148f18d941e et 2902 (pour plus de détails, consultez la page https://lilyhack.wordpress.com/2014/02/03/ble-rea...

Après avoir lancé les deux dernières commandes, les données reçues devraient s'afficher sur le terminal.

Notification handle = 0x000d value: 0b 00 c0

Notification handle = 0x000d value: 0b 00 d0

Notification handle = 0x000d value: 0b 00 e4

Notification handle = 0x000d value: 0b 00 f0

Step 3: Afficher Les Données Sur Une Page Web

Après s'être assuré de la bonne réception des données par la Raspberry, on peut tenter de les afficher sur une page web. Commencez par créer un serveur sur votre RPI (http://raspbian-france.fr/installer-serveur-web-ra... Il s'agira d'écrire les données dans un fichier html à chaque réception. Pour cela, vous pouvez utiliser Python et le module pexpect, qui permet d'utiliser des commandes de terminal depuis un script python.

Installez le module pexpect à l'aide de la commande (sudo apt-get python-pexpect). Entrez le chemin complet du fichier "index.html" (page d'accueil du domaine que vous venez de créer) dans la fonction "writeData" (dans open(...)) du script ci-joint et remplacez la valeur de "ble_addr" par l'adresse de votre BLE Shield. Assurez vous que le BLE Shield soit actif et qu'il envoie des données, puis lancez le script python avec la commande sudo python myble.py (on exécute le code en tant qu'administrateur afin d'avoir accès en écriture au fichier index.html). Ouvrez ensuite un navigateur web et accédez à l'adresse de votre serveur. Les données du capteur bmp085 devraient y être affichées dans une page nommée "Arduino to Raspberry - BLE".

Attachments

Step 4: Afficher Vos Données Sur Ubidots

Tout d'abord, créez vous un compte ubidots (http://ubidots.com/). Téléchargez ensuite le module python ubidots:

$ sudo apt-get install python-setuptools

$ sudo easy_install pip

$ sudo pip install ubidots

Une fois votre compte ubidots créé, connectez vous, allez sur la page "Sources", cliquez sur "add data sources" (bouton orange) et selectionnez Raspberry Pi par exemple. Créez trois nouvelles variables (température, pression et altitude) dans votre "source" Raspberry Pi. Récupérez l'ID de ces variables (cliquez dessus puis regardez dans le champ à gauche de votre écran). Récupérez également votre "API key" (https://app.ubidots.com/userdata/api/). Pour envoyer vos données vers ubidots à partir de votre script python, modifiez le comme indiqué dans le fichier ci-joint, en prenant le soin de mettre les bons "ID".

source : http://ubidots.com/docs/devices/raspberrypi.html



Attachments

Step 5: Enregistrer Vos Données Dans Une Base De Données.

Dans un premier temps, il faut installer le Système de Gestion de Bases de Données (SGBD) MySQL (http://raspipress.com/2014/06/tutorial-install-mys... Une fois MySQL installé, connectez vous (mysql -uroot -hlocalhost -p) en entrant le mot de passe que vous avez mis lors de l'installation du SGBD. Si la connexion est réussie, une ligne de commande interactive devrait apparaître (mysql>). Créez une base de donnée en entrant la requête CREATE DATABASE nom_db; (choisissez un nom pertinent). Créez ensuite un utilisateur pour cette base de données : CREATE USER 'nom_user'@'localhost' IDENTIFIED BY 'password_here'; (choisissez un mot de passe compliqué et n'oubliez surtout pas le point virgule). Donnez les droits d'accès à votre base de données à l'utilisateur que vous venez de créer (GRANT ALL PRIVILEGES ON nom_db.* TO 'nom_user'@'localhost';). Il ne vous reste plus qu'à créer une table où seront rangées vos données:

Use nom_db;

CREATE TABLE nom_table (tstamp int, tdate datetime, temperature float, altitude float, pression float);

L'attribut tstamp (timestamp) est un entier représentant le temps. Il est important d'avoir cet attribut en plus de la date lorsqu'on veut tracer des graphiques à partir des entrées de la table. Pour récupérer le timestamp en python, il suffit d'écrire tstamp = int(time.time()).

Une fois la table créée, il faut pouvoir y accéder depuis un script python et y enregistrer les données au moment où on les reçoit. Le module MySQLdb permet cela. Pour l'installer, lancez la commandesudo apt-get install python-mysqldb.

Le script ci-joint montre comment se connecter à une base de données et comment insérer des entrées dans une table. Pour vérifier que vos données ont bien été entrées dans votre base de données, reconnectez vous à celle-ci depuis un terminal et affichez les entrées de votre table en lançant la requête "SELECT * FROM nom_table".