Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Actionneurs > Les afficheurs > Leds RGB sur bus I2C : BlinkM

Leds RGB sur bus I2C : BlinkM

dimanche 24 janvier 2010, par Julien H.

Présentation d’un module I2C qui permet de piloter une led multicolore avec 24 bits de couleurs différentes, avec deux modes possibles, RGB (rouge / vert / bleu) ou HSV (teinte, saturation, brillance).

Découvrez les relations entre couleurs RGB et HSV avec cette belle application en ligne : synthAxis.

Etude du circuit

Pour faire clignoter une led en utilisant le protocole I2C, on va utiliser une BlinkM, un petit circuit qui tient dans le creux de la main et qu’on a déjà utilisé pour quelques démos et autres infidélités à la robotique.

Exemple de BlinkM
une ICmega8, deux BlinkM, un bus I2C sur une breadboard et fiat lux !

La datasheet de cette "led intelligente" nous renseigne sur la gestion I2C du circuit :
 mode : esclave (’slave’)
 adresse par défaut : 0x09 mais compatible avec le broadcast (0x00)
 compatible avec les adapteurs USB-I2C (tant mieux)

Datasheet BlinkM

Pour le tester, le plus simple est d’utiliser une carte de prototypage rapide comme l’Arduino (ça tombe bien, on en a une) et d’utiliser une librairie qui va se charger de la communication, avec le code fourni par ThingM :


Wire.begin() ; // set up I2C
Wire.beginTransmission(0x09) ;// join I2C, talk to BlinkM 0x09
Wire.send(‘c’) ; // ‘c’ == fade to color
Wire.send(0xff) ; // value for red channel
Wire.send(0xc4) ; // value for blue channel
Wire.send(0x30) ; // value for green channel
Wire.endTransmission() ; // leave I2C bus

La BlinkM est pilotée par des commandes qui prennent la forme d’un octet (caractère ASCII pour se souvenir rapidement de leur signification) suivie de zéro à quelques octets comme arguments.

Par exemple pour lire la couleur actuellement prise par la led, il faut utiliser la commande ’g’ (comme "get", reçois) ou 0x67 en hexadecimal, sans aucun argument. On recevra alors 3 octets correspondant à chacune des composantes primaires soustractives de la lumière, Rouge, Vert, Bleu.

Le code C écrit sur l’Arduino ne permettant pas de savoir ce qui se passe réellement sur le bus I2C, on va espionner tout ça avec l’analyseur logique Saleae qui ne nous quitte plus.

Vous pouvez faire le même test sans matériel, en téléchargeant le logiciel Saleae Logic et en chargeant la sauvegarde de la session de notre test :

Session Logic - BlinkM
Dialogue I2C entre une Arduino et une BlinkM qui répond à la commande ’g’ en envoyant trois octets.

Voici ce qu’on peut voir : une écriture de la commande ’g’ suivie d’une lecture (réception des 3 octets). En fait c’est très important pour la suite. Même pour "lire" la couleur de la led, il faut passer par une écriture.

Première phase : écriture de la commande
Seconde phase : lecture des 3 octets

Vos commentaires

  • Le 10 mai 2014 à 23:45, par Eric P. En réponse à : Leds RGB sur bus I2C : BlinkM

    Bonsoir,
    Il semble que le code fourni dans la doc ThingM soit erroné car les méthodes Wire.send et Wire.receive n’existent pas. Il faut les remplacer par Wire.write et Wire.read (cf la doc en ligne de la lib Arduino).

    Répondre à ce message

  • Le 12 février 2010 à 14:15, par oldpapafox En réponse à : Leds RGB sur bus I2C : BlinkM

    bonjour,

    j’ai testé les blinkLed c’est rigolo à utiliser, un peu cher quand même. Je viens de commander 2LPCX Expresso, petits microcontroleurs qui ont l’air charmants. Déja L’IDE me plait (Eclipse)
    ainsi qu’une platine de test compatible avec mon MBED et les LPCX. un ensemble de gadgets bien amusants à utiliser

    cdlt

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.