Nous utilisons beaucoup de périphériques en I2C pour la robotique :
– carte de contrôle de consignes moteurs (servo, pas à pas)
– capteurs complexes (ultrasons, caméra)
Il était donc logique de continuer nos expérimentations du .NET Micro Framework et de notre carte Tahoe II de Device Solutions avec le pilotage de puces I2C.
Pour faciliter les expérimentations, j’ai choisi d’utiliser une led RGB (multicolore) programmable, la désormais célèbre BlinkM. Elle a déjà utilisée plusieurs fois avec des microcontrôleurs, et son protocole est très simple (’c’ pour couleur puis 3 octets pour chacune des 3 couleurs primaires).
La classe principale
En C#, on utilise la notion orientée objet de "classe" pour regrouper des fonctionnalités au sein d’une même entité. Il y a donc dans le framework MF une classe qui permet de gérer tous les aspects du protocole I2C : I2C Device qui propose :
– une configuration : adresse et vitesse
– une suite d’octets à envoyer : buffer
– des transmissions : écriture et lecture
I2CDevice.I2CTransmission, I2CReadTransmission, I2CWriteTransmission, Execute, Dispose, ... sont les mots-clés qu’on va retrouver tout au long de nos ateliers.
Premier essai
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.Threading;
/**
* Test de la connexion I2C avec le Micro Framework .NET
*/
namespace MFTestBlinkM
{
public class Program
{
public static void Main()
{
I2CDevice blinkm = new I2CDevice(new I2CDevice.Configuration(0x09, 100));
byte[] buffer = { (byte)'c', 0, 170, 60};
I2CDevice.I2CTransaction[] transactions = new I2CDevice.I2CTransaction[] { blinkm.CreateWriteTransaction(buffer) };
while (true)
{
buffer[1] = 30;
buffer[2] = 30;
buffer[3] = 30;
blinkm.Execute(transactions, 100);
Thread.Sleep(1500);
buffer[1] = 30;
buffer[2] = 230;
buffer[3] = 30;
blinkm.Execute(transactions, 100);
Thread.Sleep(1500);
buffer[1] = 230;
buffer[2] = 230;
buffer[3] = 230;
blinkm.Execute(transactions, 100);
Thread.Sleep(1500);
}
// blinkm.Dispose();
}
}
}
Ce code va tourner en boucle et changer 3 fois la couleur de la led RGB.