Actualités | Audio/Vidéo | Evènements | DIY | Domotique | Informatique | Maison | Mobile | Sécurité

Utilisation des Yoctopuces avec un Raspberry Pi

Envoyer Imprimer PDF
Note des utilisateurs: / 9
MauvaisTrès bien 

Un nouvel article sur les yoctopuces ! Je vous ai déjà montré comment utiliser ces puces sous Windows, et comment les coupler à votre box de domotique. Mais laisser son PC allumé n'est pas une solution viable pour tout le monde. Je propose ici de passer par un Raspberry Pi. Ca coute pas cher, ça consomme peu et c'est facile à installer.

Pour utiliser des Yoctopuces avec un Raspberry Pi, il faut absolument passer par un hub USB auto-alimenté, sinon, le Raspberry ne sera pas stable. Ensuite, je vous conseille de relire mon précédent article pour initialiser votre Raspberry. Il faut moins qu'on puisse se connecter dessus avec un client SSH.

Connectez vous ensuite sur le Raspberry avec votre compte root. Allez dans le répertoire /home/pi qui est le répertoire de votre utilisateur. Puis créez un répertoire yoctopuces en utilisant la commande :

mkdir yoctopuces
chown -R 755 *

Vous arrivez à la structure suivante.

Ensuite connectez-vous sur le site de yoctopuce.com et allez dans le menu Support, puis choisissez Virtualhub pour installer le logiciel qui sait communiquer avec ces puces.

Vous trouverez ici les 3 virtualhubs et leur documentation. Il existe une version pour chacun des OS majeurs. Copier l'url de la version Linux.

Allez sur votre client SSH et lancez le téléchargement et l'extraction en lançant les commandes suivantes. L'url à utiliser est celle que vous venez de copier sur le site yoctopuces.com.

wget http://www.yoctopuce.com/FR/downloads/VirtualHub.linux.10065.zip
unzip VirtualHub.linux.10065.zip

Le Wget permet de télécharger le virtual hub sur votre Raspberry Pi. Unzip permet d'extraire les fichiers du Zip. Vous vous retrouverez avec les sous répertoires suivants.

La documentation d'installation est décrite dans le fichier LISEZMOI.TXT. Mais si vous lisez cet article, vous n'aurez pas besoin d'ouvrir ce fichier.

La première action est de copier les urules dans le répertoire /etc/udev/rules.d/ afin que le système du Raspberry puisse reconnaitre les modules branchés en USB.

cp * /etc/udev/rules.d/

Ensuite vérifiez que tout à fonctionner avec la commande ls :

ls -l /etc/udev/rules.d/

Vous devez voir les fichiers copiés. Il n'y a pas de souci de droits car toutes ces manipulations sont faites avec le compte root.

Normalement, l'installation est finie ! Si vous utilisez les yoctopuces sur un PC Linux, celà fonctionne. Mais sur le Raspberry, il se trouve que le port USB est plus difficile à dompter.

Pour utiliser le Raspberry Pi, il vous faut configurer le port USB en mode "full-speed". Pour plus d'infos lisez ce post sur le forum de Raspberry Pi. Sinon, suivez mes instructions ...

Allez dans le répertoire /boot, vous trouverez le fichier cmdline.txt

Editez le fichier et rajouter dwc_otg.speed=1 comme dans l'exemple ci-dessous.

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 dwc_otg.speed=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Redémarrez en utilisant la commande reboot.

Voilà, l'installation est terminée, il est temps de lancer le VirtualHub pour voir si vos yoctopuces répondent.

Allez dans le répertoire /home/pi/yoctopuces/armhf et lancez ./Virtualhub &

Ouvrez un navigateur web et connectez-vous au VirtualHub avec l'adresse http://IP_raspberry:4444/

Si vous rencontrez une erreur de lecture des yoctopuces, essayez de mettre à jour leur firmware en parcourant cet article.

On voit sur l'écran ci-dessous que ma yoctopuce météo fonctionne ...

Maintenant que le Virtualhub fonctionne, nous allons voir comment programmer la yoctopuce météo pour pouvoir la connecter à une box de domotique. Dans cet exemple, je vais utiliser l'eedomus pour lire les infos de la puce.

Revenez sur le site yoctopuce.com, allez dans le menu support puis l'item Library. Dans cet article, je vais faire un programme en php, donc je récupère la librairie php, mais vous pouvez vous essayer aux autres langages...

Copiez l'url de la librairie php.

Allez sur votre Raspberry, dans le répertoire des pages web. Dans un précédent article, je vous avez montré comment installer apache et php. J'avais laissé le répertoire /var/www comme répertoire racine des pages web de mon Raspberry. Allez donc dans ce répertoire et installez la librairie en lançant ces commandes:

Wget http://www.yoctopuce.com/FR/downloads/YoctoLib.php.10105.zip
unzip YoctoLib.php.10105.zip

Vérifiez que les fichiers sont bien présents:

La copie d'écran ci-dessous montre l'extraction de la librairie.

Il faut maintenant mettre les droits d'exécution sur les fichiers que vous avez extraits. Lancez la commande suivante :

chmod -R 755 *

Les pages php extraites sont maintenant exécutables sur votre serveur Apache. Nous allons les tester sans tarder.

Dans le répertoire /var/www/Examples, on trouve tous les exemples de code php qui sont proposés par Yoctopuces. Chaque exemple est simple et permet d'accéder à un type de puce. En copiant collant un de ces codes, vous pouvez commencer votre programmation.

root@raspberrypi:/var/www/Examples# ls -l
total 100
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Amp
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-CO2
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Color
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Demo
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Humidity
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Knob
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Light
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-MaxiDisplay
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-MaxiRelay
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Meteo
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-PowerColor
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-PowerRelay
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Relay
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Servo
drwxr-xr-x 2 root root 4096 Mar  4 15:02 Doc-GettingStarted-Yocto-Temperature
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Thermocouple
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-VOC
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Volt
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-GettingStarted-Yocto-Watt
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-Inventory
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-ModuleControl
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Doc-SaveSettings
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Prog-DataLogger
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Prog-EventBased
drwxr-xr-x 2 root root 4096 Mar  4 13:35 Prog-HTTPCallback

J'utilise la Yoctopuce météo dans cet article, donc je vais tester et je vais modifier le code de la ligne en gras. Commençons par regarder l'exemple livré:

Voici le code, au cas ou vous souhaiteriez faire un copier/coller.

<HTML>
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<BODY>
<?php
include('../../Sources/yocto_api.php');
include('../../Sources/yocto_temperature.php');

// Use explicit error handling rather than exceptions
yDisableExceptions();

// Setup the API to use the VirtualHub on local machine
if(yRegisterHub('http://127.0.0.1:4444/',$errmsg) != YAPI_SUCCESS) {
die("Cannot contact VirtualHub on 127.0.0.1");
}

@$serial = $_GET['serial'];
if ($serial != '') {
// Check if a specified module is available online
$temp = yFindTemperature("$serial.temperature");
if (!$temp->isOnline()) {
die("Module not connected (check serial and USB cable)");
}
} else {
// or use any connected module suitable for the demo
$temp = yFirstTemperature();
if(is_null($temp)) {
die("No module connected (check USB cable)");
} else {
$serial = $temp->module()->get_serialnumber();
}
}
Print("Module to use: <input name='serial' value='$serial'><br>");

$tvalue = $temp->get_currentValue();
Print("Temperature: $tvalue &deg;C<br>");

// trigger auto-refresh after one second
Print("<script language='javascript1.5' type='text/JavaScript'>\n");
Print("setTimeout('window.location.reload()',1000);");
Print("</script>\n");
?>
</BODY>
</HTML>

Si vous ouvrez la page dans un navigateur web, vous voyez directement la valeur courant de la puce. Une puce météo propose la pression, l'humidité et la température. Il vous faudra prendre les trois bout de code pour faire une page personnalisée complète.

Mais ce qui m'intéresse, c'est de connecter ces infos à ma box pour en faire une sorte de station météo personnelle. Pour celà je copie le code d'origine et je vais le modifier pour générer un fichier xml compréhensible par la box eedomus.

Voici le code que je propose. Je traite ici que la température pour vous montrer, mais vous pouvez gérer toutes les valeurs avec cette méthode.

root@raspberrypi:/var/www/Examples/Doc-GettingStarted-Yocto-Temperature# cat 4eedomus.php
<YOCTOPUCE>
<?php
include('../../Sources/yocto_api.php');
include('../../Sources/yocto_temperature.php');

// Use explicit error handling rather than exceptions
yDisableExceptions();

// Setup the API to use the VirtualHub on local machine
if(yRegisterHub('http://127.0.0.1:4444/',$errmsg) != YAPI_SUCCESS) {
die("Cannot contact VirtualHub on 127.0.0.1");
}

@$serial = $_GET['serial'];
if ($serial != '') {
// Check if a specified module is available online
$temp = yFindTemperature("$serial.temperature");
if (!$temp->isOnline()) {
die("Module not connected (check serial and USB cable)");
}
} else {
// or use any connected module suitable for the demo
$temp = yFirstTemperature();
if(is_null($temp)) {
die("No module connected (check USB cable)");
} else {
$serial = $temp->module()->get_serialnumber();
}
}
//  Print("Module to use: <input name='serial' value='$serial'><br>");

$tvalue = $temp->get_currentValue();
Print("<TEMP>$tvalue</TEMP>");

// trigger auto-refresh after one second
Print("</YOCTOPUCE>");
?>

Maintenant, il faut tester mon fichier xml. Je n'ai pas mis d'unité pour que ce soit facilement utilisable par la box.

Sur l'eedomus, il faut créer un capteur http pour chacune des valeurs à récupérer. Il faut utiliser le XPath //YOCTOPUCE/TEMP et mettre la fréquence que vous souhaitez.

Avec cette configuration, c'est la box qui va aller chercher l'information sur le Raspberry Pi.

Et voilà, ca fonctionne au premier coup !

On bénéficie de toutes les fonctions de la box (historique, graphique, ...). On peut utiliser ces infos dans une règle eedomus pour programmer un chauffage, une climatisation, une VMC ...

 

En conclusion

Ce tutorial est réutilisable si vous utilisez une machine Linux qui n'est pas un Raspberry Pi. Ici, j'utilise une puce météo, mais celà fonctionne de la même façon pour les autres yoctopuces. Vous avez surement constaté que la programmation est relativement simple.

Les Yoctopuces ne sont pas directement utilisables par une box, mais en passant par un Raspberry, vous pouvez les intégrer simplement à votre installation de domotique tout en gardant une approche d'économie sur l'énergie nécessaire à votre installation.

Maintenant que j'ai préparé mon Raspberry Pi et que j'ai bien compris comment celà fonctionne, je vais vous préparer d'autres articles avec la yoctopuce Knob ou la yoctopuce PowerRelay. Si vous avez des idées d'utilisation, laissez moi un commentaire, j'essayerais de personnaliser mon prochain article.

Vous n'avez pas compris un point ? Vous vous posez une question ? Vous pouvez nous contacter via le bouton Assistance sur votre droite ou laissez nous un message au 09 75 18 51 41

Vous avez aimé cet article ? N’oubliez pas de le partager sur les réseaux sociaux pour soutenir TLD.

 

Cet article vous est proposé par Domotics: Domotics habite dans la région Toulousaine. Il est ingénieur en informatique et électronicien amateur. La domotique est pour lui une passion qu'il pratique depuis 1999. En 2003, il décide de partager ses expériences sur le magazine et le forum de touteladomotique.com

Mise à jour le Lundi, 04 Mars 2013 21:03  

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Recherche

Les Flux RSS de TLD
Instagram

Produits Partenaires

GCE Electronics est partenaire de Touteladomotique.com RFXCOM.com est partenaire de Touteladomotique.com



Liens Utiles

Boutiques Partenaires

Liens Utiles

Un don pour TLD ?

Pourquoi faire un don ?

Publicité

Espaces publicitaires à louer
Contactez-nous

Connexion