Tuto : Comment fabriquer un notificateur de mails avec un Arduino

Non content d’avoir reçu ma première carte arduino (UNO) à Noël, je me suis mis en quête d’un projet plutôt simple à réaliser, et utilisant les composants de mon kit (acheté ici même, sur la boutique Semageek). Après quelques jours de recherche, une idée me vient à l’esprit : un Notificateur Gmail !
Je pensais que c’était quelque chose d’original, mais il se trouve que pas mal de monde l’avait déjà réalisé… et aussi avec arduino ! Les recherches continuent donc sur cette voie et bingo, je trouve un site avec un script python et un code pour la board. Ce n’est pas sans mal que j’ai réussi à faire fonctionner le tout, car il se trouve que la librairie possède un petit « bug » qui empêche le tout de fonctionner…
Sans plus attendre, le résultat final :
Vous aurez donc au final un moyen visuel pour savoir si vous avez de nouveaux messages non lus
dans votre boite mail Gmail.
Le matériel nécessaire
- une carte arduino uno ;
- un servo-moteur ou une led (avec une résistance appropriée)
- des câbles pour relier le tout.
I) Installation de python et des librairies.
1) Téléchargement.
- Téléchargez la version windows de python 2,7 : http://python.org/ftp/python/2.7.2/python-2.7.2.msi
- Setup tool (pour installer les librairies, enfin il me semble :p): http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe#md5=57e1e64f6b7c7f1d2eddfc9746bbaf20
- La librairie pyserial (pour interagir avec arduino par le port serie) : http://sourceforge.net/projects/pyserial/files/latest/download
- La librairie feedparser (connexion avec la boite gmail) : http://pypi.python.org/packages/source/f/feedparser/feedparser-5.1.zip#md5=5307442f686f773afee12aa6e4bfe257
Installez python, puis les librairies. Si vous rencontrez des difficultés, posez vos questions dans les commentaires, je ferai de mon possible pour vous aider.
Pour vérifier si les librairies sont bien installées, lancez la ligne de commande python (pyhton command line), et tapez les lignes suivantes l’une après l’autre :
- import feedparser
- import serial
Si vous avez une erreur du type « Import error : No module named… » c’est que la librairie en question est mal/pas installée.
2) Correction du « bug » de la librairie Pyserial.
Il se trouve que la librairie pyserial reset la carte arduino lors de l’ouverture du port et de sa fermeture. Je ne sais pas pourquoi, mais cela empêche la lecture des données reçues ce qui fait que le code, bien que correct, ne donnera pas le résultat voulu. Pour résoudre le problème, il faut vous
rendre dans se rendre dans /Lib/site-packages/serial du dossier Python et modifier la ligne du fichier serialWin32.py suivante :
self._dtrState = win32.DTR_CONTROL_ENABLE
par
self._dtrState = win32.DTR_CONTROL_DISABLE
et c’est fini ! Plus de soucis à se faire 😉
3) Le script python
Voici le script python avec des commentaires pour que vous sachiez qu’est-ce qui fait quoi :
print "Script loaded" import serial, sys, feedparser, time #Changez les informations suivantes en fonction de votre compte USERNAME="EMAIL@gmail.com" PASSWORD="*********" PROTO="https://" SERVER="mail.google.com" PATH="/gmail/feed/atom" SERIALPORT = "COM3" # Changez le port en fonction du votre # Set up serial port try: ser = serial.Serial(SERIALPORT, 9600) # Definit la connexion avec arduino except serial.SerialException: print "no device connected - exiting" sys.exit() newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"]) #se connecte a votre compte gmail et retourne 0 si il n y a pas de nouveaux mails, 1 s il y en a. print newmails # Output data to serial port if newmails > 0: ser.write('m') #envoie m a arduino = messages else: ser.write('n') #envoie n a arduino = no messages # Ferme le port ser.close()
II La partie arduino
1) Le code
Dans le matériel, il est fait référence à un servo moteur, mais si vous ne disposez pas d’un exemplaire, vous pouvez toujours le remplacer par une led, ou autre, un buzzer, que sais-je !
Le code en rouge s’adresse donc au possesseurs d’un servo, celui en vert à ceux qui possèdent une led.
Donc, voici le code à envoyer à l’arduino :
#include <Servo.h> #define outPin 11 Servo drapeau; void setup() { pinMode(outPin, OUTPUT); // sets the digital pin as output Serial.begin(9600); Serial.flush(); drapeau.attach(9); // servo sur la pin 9 drapeau.write(0); } void loop() { // Read from serial port if (Serial.available()) { val = Serial.read(); delay(1); if (val == 'm') { digitalWrite(outPin, HIGH); // On allume la led drapeau.write(88); // On leve le drapeau } else if (val == 'n') { digitalWrite(outPin, LOW); // On eteint la led drapeau.write(0); // On baisse le drapeau } } }Notez que les angles utilisés ici me conviennent personnellement, vous pourrez avoir besoin de les modifier, mais je vous laisse vous débrouiller pour ça.
2) Le montage
Pour le servo, vous avez normalement 3 fils :
- un noir / marron ? GND
- un rouge ? +5V
- un blanc / orange ? pin 9
(cf le cours sur les servo de pobot : http://www.pobot.org/Debuter-avec-une-carte-Arduino.html )
Pour ceux qui ont une led :
- pin 11 ? résistance 330ohms ? Led ? GND.
Voilà, vous n’avez plus qu’à envoyer le code sur l’arduino, en ayant bien tout vérifié avant !
III) Créer un batch pour lancer automatiquement le script.
Un fichier batch permet le lancement de scripts ou d’applications, à l’aide de la fonction sleep, à télécharger ici : http://ipl001.free.fr/LaboWeb/Download/Sleep.exe et à mettre dans C:/Windows/System32.
Le code à mettre dans le txt est le suivant :
@echo off :start script.py Sleep 60 goto start
script.py est le nom du fichier avec le script python, ce dernier se trouve dans le même dossier que le fichier batch. Si ce n’est pas votre cas, indiquer le chemin exact vers le fichier.
Sleep 60 permet d’attendre 60s avant de faire un nouveau test sur la boite mail. Vous pouvez modifier cette valeur si vous le souhaitez.
Enregistrer le fichier au format « .bat ».
Voilà, c’est terminé, j’espère que ce tutoriel vous aura plu, et que vous aurez réussi à tout faire sans rencontrer autant de problèmes que moi. Vous trouverez en pièce jointe les trois fichiers (script python, code arduino et batch).
Merci à vous, et bonne lecture sur Semageek !