Auteur :

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.

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 !

  • Il est possible de le faire avec yahoo ?
    Twitter ? Oui je sais j’en pause des questions, mais je te remercie de me répondre.

  • Bien sûr que c’est possible, mais va falloir changer le contenu du script python pour qu’il aille voir yahoo et twitter au lieu de gmail.

  • konfiot

    Et a quand une implémentation direct en ethernet ???

  • BBenj

    Le reset est « normal » dans la mesure où il permet la programmation de l’Arduino sans reset manuel grâce à la ligne DTR (l’activation de la ligne provoque un reset hard sur la carte).
    Ce n’est donc pas un bug de la librairie PySerial !

  • pierre alfred

    comment fait-on pour installer une librairie dans sous python parce que perso sa me marque toujours le message d’erreur comme quoi la librairie est introuvable. merci

  • Maxime99-

    Salut, quel code il faut taper pour hotmail ?

  • Renard

    bonjour, il m’est impossible d’installer la librairie python feedparser, si quelqu’un a des indications plus détaillées ce serait avec plaisir !

  • Pedro-96

    aujourdhui pour faire ce projet innovant je vous recommande gobetwuino l’interface est simplifié si vous le demandez je ferai un tuto =)
     

  • RemiGascou

    je n’arrive pas à le faire marcher mon ordi me dit que la commande sleep n’est pas reconnue et je n’arrive pas à installer la librairie feedparser.

  • RemiGascou

    Ton systeme ne marche pas

  • RemiGascou

    Si quelqu’un à réussi à faire marcher ce projet, pourrais t-il mettre un lien de téléchargement pour les fichiers. (le code python et le .bat)
    car la commande « sleep » n’est pas reconnue dans le fichier .bat

  • DezMax

    J’ai pas pu m’empêcher de rire n’empêche très pratique, si on le fais avec un shield wifi et un afficheur sa doit être encore plus pratique !

  • WDingenery

    Bonjour impossible de telecharger feedparser. Pouvez vous m aidez?

  • piodosx

    Merci c’est trop cool 😀

  • sofiane

    le logiciel de l’arduino 1.0.6 dis que le programme est faux