Utilisation de l'I2C
Exemple de gestion d'un gyroscope MPU6050
Le gyroscope est branché au raspberry selon le schéma suivant :
Configuration
Activer l'I2C
Ouvrir un terminal et saisir la commande :
sudo raspi-config
La fenêtre de configuration s'ouvre alors
Installer la bibliothèque de gestion du protocole I2C
sudo apt-get install libi2c-dev
sudo nano /etc/modules
A ce stade, le Raspberry devrait être configuré et on peut vérifier si le système détecte la présence de l'I2C par la commande :
sudo i2cdetect -y 1
La fenêtre devrait afficher :
On en déduit que l'adresse $68 est utilisée par le port I2C
sudo adduser pi i2c
Code partiel du programme
Préliminaire
La bibliothèque wiringPi doit être installée selon le procédé décrit dans la page de ce lien.
Le mode protégé de wirngPi impose de lancer QTCreator en mode sudo dans un terminal :
sudo /usr/bin/qtcreator
Programme
/******************************************************************************
*i2ctest.c
* Test du port I2C en utilisant la bibliothèque wiringPi.
* Programme testé sur Raspberry PI 2 en utilisant une carte GY 251
* à partir du code initial de Nahid Alam.
* <nahid.mahfuza.alam@gmail.com>
* code modifié par Norbert BRAUN (norbert@siloged.fr)
*******************************************************************************
* Texte relatif aux droits d'utilisation :
*i2ctest is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* i2ctest is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
***********************************************************
*/
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <QDebug>
int adresse=0x68;//adresse du port I2C. Utiliser i2cdetect pour trouver cette adresse (voir ci-dessus)
int fd;
//************************************************************************************
void lireTous()
{
//lecture de tous les registres du capteur MPY6050
short int temp;
for (int i=0x0D;i<0x76;i++)
{
//lecture d'un octet sur le fichier du port (fd) au registre d'adresse i
temp=wiringPiI2CReadReg8(fd,i);
qDebug()<<"Donnée="<<temp<<endl;
}
}
//------------------------------------------------------------------------------------------------
int main ()
{
//Initialisation de la bibliothèque wiringPi
wiringPiSetup () ;
//On associe à fd (file device) le port I2C dont l'adresse est spécifiée en attribut)
fd=wiringPiI2CSetup (adresse) ;
if (fd==-1)
{
qDebug("Le port I2C n'est pas joignable. Vérifiez les paramètres et connexions.");
return -1;
}
else
{
//Suppression de la gestion d'énergie (Power Management) par l'écriture de 0 à l'adresse $6B de fd
wiringPiI2CWriteReg8(fd,0x6B,0x00);//réveille le capteur en activant le power_mgmt
lireTous();
}
return 0;
}
Remarque :
Le capteur MPU6050 possède une fonction d'économie d'énergie. Lorsqu'elle est active elle réduit la consommation et ne délivre plus de valeurs.
Pour faire des mesures, il est nécessaire de mettre le registre 0x6B (Power Management) à 0.
Pour l'étude complète du GY521 aller vers le chapitre s'y rapportant.