Quand un geek se met aux fourneaux, le moment critique est la cuisson. Plus précisément, l'attente de la cuisson. Il est souvent tentant d'aller lire un article sur l'iPad, traîner devant le PC ou discuter avec les invités plutôt que de rester devant le four à surveiller une viande qui cuit. Et immanquablement, on mange de la viande un peu trop cuite. Mais grâce à une petite recette à base de Yocto-Thermocouple et de Raspberry Pi, ce problème va être résolu. Notre Raspberry Pi va surveiller la température de la viande pour nous, et nous envoyer un email dès que la temperature idéale sera atteinte. Et vive les smartphones!
Le matériel
Pour la partie matérielle on va utiliser :
- une pointe thermocouple, que l'on va piquer dans la viande (~ EUR 20.-, mais fournie en standard avec de nombreux fours).
- un Raspberry Pi pour exécuter notre script de surveillance écrit en Python (~ EUR 30.-)
- un Yocto-Thermocouple pour lire le thermocouple avec le Raspberry Pi (~ EUR 38.-)
- un chargeur USB pour alimenter le Raspberry Pi (~ EUR 10.-, mais vous pouvez utiliser un chargeur de téléphone portable)
- un câble USB et un peu de visserie (~ EUR 5.-)
- une RaspBox pour assembler le tout (~ EUR 12.-)
Comme le tout va finir caché dans une armoire, il n'est pas nécessaire de faire un boîtier bien compliqué. On va simplement monter le Yocto-Thermocouple sur la RaspBox en utilisant les trous prévus à cet effet.
Le Rasspberry Pi dans une RaspBox, avec un Yocto-termocouple monté dessus.
Le Raspberry Pi
Le Raspberry Pi est un micro PC de la taille d'une carte de crédit et vendu bon marché, utilisant un processeur ARM et un OS Linux. L'installation de l'image recommandée est très bien documentée (http://elinux.org/RPi_Easy_SD_Card_Setup) et ne pose pas de problème.
Le Raspberry Pi souffre malheureusement d’un support USB buggé perfectible et nous allons devoir le configurer pour qu'il soit fiable. En effet le Raspberry Pi perd de temps en temps des paquets USB pour les périphérique "full-speed" (claviers, souris, modems, certains devices audio, etc) lorsqu'il travaille dans le mode "high-speed" standard. Ce problème se produit moins fréquemment avec les dernières mises à jours du firmware, mais n'est pas encore complètement résolu. La seule solution fiable est de forcer tous les périphériques à fonctionner en mode "full-speed". L'effet de bord regrettable est que tous les périphériques USB (y compris la carte réseau onboard) seront limités à 1.5 Mo/s, mais quoi qu'il en soit, le Raspberry Pi n'a pas été conçu pour être une bête de course...
Pour forcer USB à fonctionner en "full-speed", il faut rajouter dwc_otg.speed=1 dans le ficher /boot/cmdline.txt, comme suit:
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
Édit: L'option "dwc_otg.speed" n'est plus nécessaire pour les Raspberry Pi B+ et suivants.
Configuration du Yocto-Thermocouple
Avant d'aller plus loin, on vérifie que notre thermocouple est bien configuré. Pour ce faire il faut lancer sur le Raspberry Pi le programme VirtualHub fourni avec le Yocto-Thermocouple et se connecter sur l'interface web (port 4444 par défaut). Le type du thermocouple doit être changé si nécessaire (nous utilisons ici le type "K", le plus courant). On en profite aussi pour donner le nom logique "food_sensor" à l'entrée sur laquelle on a branché notre thermocouple.
Notre thermocouple correctement configuré
Le software
Notre application va devoir envoyer des emails, répondre à des requêtes HTTP (pour l'interface de contrôle) et dessiner des graphiques de température. Le langage python est idéal dans ce cas, car il possède nativement le support pour envoyer des email et répondre à des requêtes HTTP. De plus, il est installé en standard sur l'image du Raspberry Pi. Pour dessiner un graphique, il existe la libraire Matplotlib qui s'installe très facilement avec la commande :
> sudo apt-get install python-matplotlib
Il faut ensuite installer la libraire Yoctopuce [edit: maintenant disponible sur PyPI: Voir cet article].
Le code python est relativement simple et est téléchageable ici. Nous n'allons détailler ici que les parties qui sont spécifique à nos modules.
Il faut tout d'abord importer le module yocto_api pour pouvoir utiliser la librairie, et le module yocto_temperature pour avoir accès à la classe YTemperature qui nous permettra de récupérer la température du thermocouple.
from yocto_api import *
from yocto_temperature import *
Au début du programme, il faut initialiser l'API pour se connecter au module USB.
""" Main function, deals with arguments and launch program"""
....
errmsg=YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
sys.exit("init error"+errmsg.value)
Le coeur du programme se situe dans la fonction run, qui est exécuté dans un thread séparé et qui va vérifier la température de la viande toutes les secondes.
def run(self):
temp_sensor = YTemperature.FindTemperature("food_sensor")
....
while not self._mustStop :
# verify that our device is still connected
if not temp_sensor.isOnline():
sendResult('No temperature sensor connected !',0)
if options.verbose : print "Temperature sensor 'food_sensor' not found"
return
cur_temp = temp_sensor.get_currentValue()
if options.verbose : print "current value is %2.1f" % cur_temp
...
...
Le reste du code va répondre au requêtes HTTP avec la dernière valeur mesurée.
Testing party
Si vous lancez l'application telle quelle, il y a de grandes chances que l'envoi des emails ne fonctionne pas (sauf si vous avez configuré un serveur SMTP sur votre Raspberry Pi). Il faut passer sur la ligne de commande le nom de votre serveur SMTP ainsi que vos informations d'authentification. Si vous lancez l'application avec le paramètre --help, la liste complète des options sera affichée.
Voici par exemple les options à passer pour utiliser le serveur SMTP de gmail:
> ./picooker.py --smtp_host=smtp.gmail.com --smtp_port=465 --smtp_user=myemail@gmail.com --smtp_pass=mypassword
En se connectant sur l'interface web (par défaut sur le port 8888), on peux configurer la température a laquelle on veux envoyer un email d'alerte, et le destinataire. Il ne reste plus qu'a planter le thermocouple dans la viande et appuyer sur le bouton Start Recording.
L'interface web du programme
Quand la viande atteindra la température fixée l'email sera envoyé avec le graphique de la cuisson.
Voilà l’émail qui est envoyé en fin de cuisson
Voilà une petite démo en vidéo.
Bon, c'est pas tout ça, mais il faut j'aille faire un peu de social avec mes invités...
Mise à jour: 19 avril 2013
Nous avons amélioré le Pi Cooker. Il est maintenant possible d'utiliser plusieurs capteurs de température Yoctopuce. Voir Yoctopuce libraries, GitHub, PyPI, and Raspberry Pi.