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.
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)
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 :
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.
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