Gmail notifier sans Ethernet Shield

C'est moi qui ai fais une bétise :P ! Il y avait un conflit de nom entre le module "serial" et la variable "serial" que j'avais mis au début.

Voilà le code corrigé :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import feedparser
import serial
import time

# ------------------------------------------------------------------------------ #

request = 'https://user:password@mail.google.com/gmail/feed/atom'
serial_port = 'COM3'
delay = 2

# ------------------------------------------------------------------------------ #

def check_gmail (request):
    try:
        newmails = int(feedparser.parse(request)['feed']['fullcount'])
    except:
        return 'ERROR'
    else:
        return newmails

# ------------------------------------------------------------------------------ #

try:
    ser = serial.Serial(serial_port, 9600)
except serial.SerialException:
    print 'No device connected !'
else:
    while True:
        reply = check_gmail(request)
        if reply == 'ERROR':
            ser.write(-1)
            print reply
        else:
            if reply > 0: 
               ser.write(1)
            else: 
               ser.write(0)
            print str(reply) + ' new mail(s) !'
        time.sleep(delay)

J'ai changé la variable "serial" en "serial_port".

Ah bah nikel celui la fonctionne :), je m'en vais l'éplucher pour mieux comprendre ce que j'avais zaper ....

Bon maintenant il me reste a faire la partie "arduino" :D

franchement merci beaucoup pour ton aide :grin:

Pas de quoi.

Pour la partie Arduino tu peux le faire avec une seule LED sinon. 1 --> LED allumée. 0 --> LED éteinte. -1 --> LED qui clignote.

Enjoy it !

Je suis parti sur ce concept en fait:

No mail => LED éteinte ( variable "n" ) Mails => LED clignotante ( variable "m" ) ERROR => LED fixe (variable "-1" )

J'ai déjà fait "la base" il me reste a implanter le clignotement, j'attaque ça de suite

// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12 int mail = LOW; // Is there new mail? int val; // Value read from the serial port void setup() { pinMode(outPin, OUTPUT); // sets the digital pin as output Serial.begin(9600); Serial.flush(); mail = LOW; // start off with lights out }

void loop() { // Read from serial port if (Serial.available()) { val = Serial.read(); Serial.println(val, BYTE);

if (val == 110) // n = 110 in dec { mail = LOW; // HIGH is off because led is connected to +5v on the other side } if (val == -1) // n = 110 in dec { mail = LOW; // HIGH is off because led is connected to +5v on the other side }

else if (val == 109) //109 = m in dec { mail = HIGH; // LOW is on because led is connected to +5v on the other side } }

// Set the status of the output pin digitalWrite(outPin, mail); }

Partie "clignotante" implémenté mais ça clignote pas outchhh ^^

// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12 int mail = LOW; // Is there new mail? int val; // Value read from the serial port void setup() { pinMode(outPin, OUTPUT); // sets the digital pin as output Serial.begin(9600); Serial.flush(); mail = LOW; // start off with lights out }

void loop() { // Read from serial port if (Serial.available()) { val = Serial.read(); Serial.println(val, BYTE);

if (val == 110) // n = 110 in dec { mail = LOW; // HIGH is off because led is connected to +5v on the other side } if (val == -1) // n = 110 in dec { mail = HIGH; // HIGH is off because led is connected to +5v on the other side }

else if (val == 109) //109 = m in dec { mail = LOW; // LOW is on because led is connected to +5v on the other side delay(1000); mail = HIGH; // LOW is on because led is connected to +5v on the other side delay(1000); } }

// Set the status of the output pin digitalWrite(outPin, mail); }

Arff j'ai besoin de vous :roll_eyes:, ma LED ne veut pas clignoter j'ai beau chercher je vois pas ! Elle reste fixe au lieu de clignoter pourtant j'ai bien mis un "delay" d'allumage et d'extinction :blush:

// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12 int mail = LOW; // Is there new mail? int val; // Value read from the serial port void setup() { pinMode(outPin, OUTPUT); // sets the digital pin as output Serial.begin(9600); Serial.flush(); mail = LOW; // start off with lights out }

void loop() { // Read from serial port if (Serial.available()) { val = Serial.read(); Serial.println(val, BYTE);

if (val == 110) // n = 110 in dec { mail = LOW; // HIGH is off because led is connected to +5v on the other side } if (val == -1) // n = 110 in dec { mail = HIGH; // HIGH is off because led is connected to +5v on the other side }

else if (val == 109) //109 = m in dec { mail = LOW; // LOW is on because led is connected to +5v on the other side delay(1000); mail = HIGH; // LOW is on because led is connected to +5v on the other side delay(1000); } }

// Set the status of the output pin digitalWrite(outPin, mail); }

merci a vous

C'est normal que ça ne marche pas...

Quand tu fais :

mail = LOW; // LOW is on because led is connected to +5v on the other side
delay(1000);
mail = HIGH; // LOW is on because led is connected to +5v on the other side
delay(1000);

Ce qui se traduit par :

Changement de la variable mail à LOW... Attente de 1 seconde... Changement de la variable mail à HIGH... Attente de 1 seconde...

Changement du statut de la LED avec la valeur de la variable mail.

En gros ta valeur n'a pas changé quand tu arrive à la modification du statut de la LED.

Dans ton cas, je ne ferais pas clignoter cette LED, c'est plus compliqué. Voilà ma version avec 3 LED (verte, rouge et bleu) :

int verte = 11;
int rouge = 12;
int blanche = 13;

int value = 0;

void setup()
{
  pinMode(verte, OUTPUT);
  pinMode(rouge, OUTPUT);
  pinMode(blanche, OUTPUT);
  
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    value = Serial.read();
    
    digitalWrite(verte, LOW);
    digitalWrite(rouge, LOW);
    digitalWrite(blanche, LOW);
    
    if (value == 79) // Nouveau message (O)
    {
      digitalWrite(verte, HIGH);
    }
    if (value == 78) // Pas de nouveau message (N)
    {
      digitalWrite(rouge, HIGH);
    }
    if (value == 69) // Erreur (E)
    {
      digitalWrite(blanche, HIGH);
    }
  }
  
}

Ah ok ;) pour le faire avec 3 LED c'est bon j'ai réussit le montage et ça fonctionne ( une bleu, une rouge et une verte ) mais je voulais essayer de la faire clignoter ;)

La faire clignoter c'est du genre vraiment compliqué ?

Si c'est le cas je laisse tombé ce premier projet, j'en est déjà un deuxième en tête. Fait réagir une série de LED ( RGB ou non suivant laquelle de ma commande ebay arrive en premier ) en fonction de la musique avec un petit micro electret ! j'ai d’ailleurs commencé un schémas ^^

j'aimerais avoir ce rendu : http://www.youtube.com/watch?v=HPhm8VTCWpg&feature=player_embedded

j'ai trouvé ce schémas:

que j'ai essayer de retranscrire en "visuel" comme ça :

mais pas sur que ce soit bon ^^

thanks a lot :)

Ce n'est pas non plus infaisable... C'est encore et toujours une histoire de boucle, d'agencement de ton code... Si tu y tiens tant que ça, fais le, mais c'est se compliquer la vie pour rien quand on peux faire si simple.

Re, j'ai une petite question a propos de ton code :

if (value == 79) // Nouveau message (O) { digitalWrite(verte, HIGH); } if (value == 78) // Pas de nouveau message (N) { digitalWrite(rouge, HIGH); } if (value == 69) // Erreur (E) { digitalWrite(blanche, HIGH);

En faite d'ou vienne les valeurs 79,78 et 69 ?

Dans mon code j'avais 110 pour "n" et pas 79 109 pour "m" et pas 78

EDIT: en fait je vient de capter que c'étais en majuscule dans ton code et en minuscule dans le miens, donc c'est OK ^^

Se sont les valeurs de la table ASCII. Tous les caractères ne sont que des nombre pour un ordinateur. Va voir sur Google.

oui oui c'est bon j'avais éditer ma réponse :) c'est car moi je suis en minuscule et toi en majuscule donc 78 a la place de 109 et 79 a la place de 110 :grin:

Je me fessais c***r cette après midi, donc voilà... Petit projet. Le but est de faire un joli petit radio réveil, avec RTC, capteur de température, un HP pour faire des sonneries en 8bit (genre Mario :D), et pourquoi pas un checker de mails, le tout dans une belle box en alu brossé... :)

Voilà un premier jet :

Sympas, c'est quoi le module en bas a droite ? la partie radio ? c'est quoi RTC ?

Bon projet, par contre a la place du LCD moi je mettrait des LED, ça fait plus classe je trouve ^^

genre ça:

un cube heure, un cube minutes et un cube info ( température qui s'affiche et genre un pti logo qui s'allume pour les mails )

Le truc en bas à droite c'est la RTC (Real Time Clock). C'est une horloge pour faire simple. Si tu débranche l'alim de l'Arduino, la date et l'heure est conservée pendant très très longtemps grâce à une petite pile (consommation, 500 nano Ampéres :D).

Après oui, c'est plus design. Mais là c'est du fait avec ce que j'ai sous la main, pour le fun. Pas envi d’invertir.

OK ok, j'ai cru que c'été un projet a "long terme" c'est pour ça :)

Sinon sympas comme petite bidouille !

J'essaye de continuer a m’entraîner avec python et donc je souhaiterais recup les variables d'un fichier g.txt sur mon PC et non plus sur le serveur Gmail.

J'ai donc fait ce code:

import feedparser import serial import time

------------------------------------------------------------------------------

request = open('C:\Users\chicotore\Desktop\g.txt') serial_port = 'COM3' delay = 5

------------------------------------------------------------------------------

def recup (request): try: open("C:\Users\chicotore\Desktop\g.txt") except: return 'ERROR'

------------------------------------------------------------------------------

try: ser = serial.Serial("COM3", 9600) except serial.SerialException: print 'No device connected !' else: while True: reply = recup(request) if reply == 'ERROR': ser.write(-1) print reply else: if reply > 0: ser.write("m") else: ser.write("n") print str(reply) + ' new mail(s) !' time.sleep(delay)

Le programme python ce lance mais en faite j'ai toujours comme retour "no mails" suivant que je mette "erreur", "0", ou "1 ou 2 ou 3 bref un nombre >0 )

Ou est-je encore merdé ? xD

merci

personne ? :roll_eyes: