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
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
Das war ein wirklich sehr interessanter Blog-Artikel. Weiter so.