Un indicateur d'email USB

Un indicateur d'email USB

Un des problèmes courants liés à internet consiste à savoir si on a reçu un email en un coup d'œil sans avoir à explicitement consulter un équipement informatique. Nous vous proposons cette semaine de résoudre le problème en allumant une Yocto-PowerColor quand un mail non lu vous attend dans votre mail box. En fait, le vrai problème consiste à intégrer le Yocto-PowerColor dans un élément de décoration, histoire que le résultat soit visuellement acceptable.


Vous connaissez probablement ces lampes fabriquées à partir de fibres optiques. L'idée consiste à en modifier une pour qu'elle puisse changer de couleur en fonction de certains évènements, comme la réception d'un email.

Ok, c'est un peu kitch, mais si on la pilotait par USB?
Ok, c'est un peu kitch, mais si on la pilotait par USB?



On a trouvé une de ces lampes pour moins de dix francs dans un magasin de gadgets électroniques bon marché. On a joué avec pendant trois minutes, et évidement on l'a démonté. A l'intérieur il n'y a le minimum syndical: trois piles, quatre leds et quatre résistances.

On l'a payée CHF 9.90 mais ça ne vaut pas plus
On l'a payée CHF 9.90 mais ça ne vaut pas plus



Bref il y a dans le pied de la lampe largement la place d'installer un Yocto-PowerColor pour autant qu'on sépare la led du driver. On a construit une armature en verre acrylique, pour placer la led à l'endroit idéal dans la lampe, mais vous pouvez utiliser des matières plus faciles à travailler comme du contre-plaqué. Pensez à faire des ouvertures pour qu'il y ai un peu d'air qui passe pour refroidir la led.

Si on sépare la led du driver, ça va rentrer
Si on sépare la led du driver, ça va rentrer


Pour améliorer le rendement lumineux, on a placé une optique Led-Engine sur la led. Le résultat est plutôt concluant.

L'électronique originale
L'électronique originale


La version Yoctopuce
La version Yoctopuce


Pour le câblage, on a relié le driver à la LED avec un câble Picoflex, et on a simplement coupé un câble USB ordinaire qu'on a soudé directement sur le module sur les pads prévus à cet effet.

C'est quand même un peu plus...
C'est quand même un peu plus...



.. spectaculaire que l'original
.. spectaculaire que l'original



Une fois que la lampe fonctionne, il suffit de coder la partie qui vérifie la présence d'email dans notre boîte aux lettres. On va faire ça en C# étant donné que c'est apparemment le langage qui a le plus de succès auprès des utilisateurs de modules Yoctopuce.

En fait, la programmation est des plus simple: On utilise l'excellente librairie ImapX qui permet de résumer la partie "check mail" à une série d'appels. La mise à jour de la led quand à elle prend 2 lignes.

Voici le code de la fonction principale de l'application. Elle se connecte sur le serveur de mail, compte les mails non lus, puis cherche une led RGB avec le nom logique MailIndicator et la passe en rouge s'il y a des mails non lu, en vert sinon.

private void checkForNewMail()
     {
 
      log("Checking...");

      // connect to the mail server, you might need to tweak the parameters
      // to make it work on your own mail server
      ImapX.ImapClient client = new ImapX.ImapClient(server.Text, 143, false);

      bool result = false;
      result = client.Connection();

      if (!result)
      { log("Connection failed");
        return ;
      }

      log("Connected");

      // logon
      result = client.LogIn(username.Text, password.Text);

      if (!result)
      { log("Login failed");
        return  ;
      }

      log("Login ok");

      // retreive messages
      ImapX.MessageCollection messages = client.Folders["INBOX"].Messages;

      log(messages.Count+" mails found in inbox");

      // count unread messages
      int UnreadMessages = 0;
      for (int i = 0; i < messages.Count; i++)
      { messages[i].ProcessFlags();
        if (!messages[i].Flags.Contains(ImapFlags.SEEN))  UnreadMessages++;
      }

      log(UnreadMessages + " unread messages");
      client.LogOut();

      // update the led status, We look for a led with logical name
      // set to "MailIndicator" (the function  name, not the
      // Module name)
      YColorLed led = YColorLed.FindColorLed("MailIndicator");
      if (led.isOnline())
        led.rgbMove(UnreadMessages > 0 ? 0xFF0000 : 0x00FF00, 1000);
      else
        log("No 'MailIndicator' led found");
    }



Vous remarquerez que cette fonction marche aussi bien avec un Yocto-Color. Vous pouvez télécharger le projet complet ici.




Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.