Teil 2 des Rasberry Pi I2C Projektes

Kommunikation und Programmierung in C

Kurze Anleitung wie die Kommunikation auf dem Raspberry Pi mit dem I2C BUS in der Programmiersprache C erfolgt.

Zur Vorbereitung auf die Programmierung sind ein paar Dinge grundsätzlich zu klären:

  • Prüfen ob ein Modul ansprechbar ist und welche ID es auf dem BUS hat
  • Gibt es ein Bibliothek in C
  • Wie wird die Bibliothek genutzt, gibt es Beispiele
Check den I2C Bus auf OS Ebene und zeige die IDs der gefundenen Module

Vorrausgesetzt im OS ist soweit der I2C Bus aktiviert kann mit entsprechenden Tools grundlegend überprüft werden, ob die Module ansprechbar sind. I2CDETECT zeigt die Ansicht wie im Foto zu sehen.

Es gibt mehere Bibliotheken, die Frage ist werden diese auch langfristig supported?

Ich habe im wesentlichen 2 Ansätze gefunden. Zum einen muss man wissen, die Steuerung der Peripherie wird über den Baustein BCM 2835 gemacht. Hierzu gibt es eine C Library die eingebunden werden kann und auch diverse Beipiele im Internet. Dann gibt es wiring.pi. Das Projekt von Gordon ist mitlerweile veraltet. Die useability ist sehr einfach und auch gut erklärt, jedoch vielleicht nicht die beste Lösung in Richtung Zukunft. Faktisch ist rationell dann die C Library zu dem BCM 2835 die bessere Wahl ….

Installation der Bibliothek

cd
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make && sudo make check && sudo make install

Links zu der aktuellen Bibliothek

http://www.airspayce.com/mikem/bcm2835/

http://www.airspayce.com/mikem/bcm2835/group__i2c.html

Code Beispiel

#include <bcm2835.h>  

int main(int argc, char **argv)  
{  
    char buf[1];

    if (!bcm2835_init())return 1;  
    bcm2835_i2c_begin();                //Start I2C operations.
    bcm2835_i2c_setSlaveAddress(0x20);  //I2C address
    bcm2835_i2c_set_baudrate(10000);    //1M baudrate

    while(1)  
    {   
        buf[0] = 0xEF;    //LED ON
        bcm2835_i2c_write(buf,1);
        bcm2835_delay(500);
        buf[0] = 0xFF;     //LED OFF
        bcm2835_i2c_write(buf,1);
        bcm2835_delay(500); 
    }    
    bcm2835_i2c_end();  
    bcm2835_close();  
    return 0;  
} 

Code Beispiel von: https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_I2C