Raspberry Pi – I2C-bus gebruiken

i2c bus logo

raspberry pi logo

Wat is de I2C-bus?

De I2C-bus? (spreek uit als: I kwadraat C bus), eertijds aangeduid met IIC-bus (Inter-IC-bus), is een synchrone, seriële bus, ontwikkeld voor datacommunicatie tussen microprocessoren en andere IC’s, meestal op één enkele printplaat.

Meer informatie over de I2C-bus

Welke core versie heb ik?

Voordat je de I2C bus aanzet op de Raspberry Pi, controleer eerst de Linux core versie met het commando uname -a , de manier van inschakelen verschilt op bepaalde core versies.


Aanzetten van de I2C-bus op een Raspberry Pi met Core 3.18+:

Het aanzetten van de I2C bus op de raspberry pi met core 3.18 is makkelijker gemaakt, dit is aan te zetten via het configuratiemenu van de Raspberry Pi (het commando: sudo raspi-config ), onder advanced options –> I2C kun je i2c op de raspberry Pi 2 inschakelen.

raspi-config advanced options

raspi-config advanced options i2c bus aanzetten 01

raspi-config advanced options i2c bus aanzetten 02

Er wordt dan het volgende weggeschreven naar /boot/config.txt :

dtparam=i2c_arm=on

In scriptform via de bash:
sudo bash -c "echo 'dtparam=i2c_arm=on' >> /boot/config.txt"

Bron


Aanzetten van de I2C-bus op een Raspberry Pi met Core < 3.18:

Volg de bovenste stappen, als extra komt erbij dat je i2c-dev  toe moet voegen aan /etc/modules bewerk dit bestand met het commando:  sudo nano /etc/modules

Wanneer bovenstaande regel is toegevoegd voer het volgende commando uit: sudo modprobe i2c-dev


Controleren of I2C aan staat

Controleren of I2C aan staat kan met het commando: lsmod | grep i2c_

raspberry pi i2c lsmod

Of (uitgevoerd op de RPi2):


I2C hardware controleren/testen

1) Installeer i2c-tools met het commando:  sudo apt-get install i2c-tools

2) Zet de Raspberry Pi uit met het commando:  sudo shutdown -h now
3) Sluit de hardware aan op de juiste GPIO pinnen van de Raspberry Pi
4) Zet de Raspberry Pi aan en gebruik het volgende commando:

Rasberry Pi 2/3 :  sudo i2cdetect -y 1

Rasberry Pi 1:  sudo i2cdetect -y 0

Dan krijg je ziets als dit te zien (aangesloten is een lichtsensor BH1750 met 0x23):

Of zoals hier een BMP180 sensor:

Foutmeldingen

Krijg je foutmeldingen als deze (hardware aangesloten en Raspberry niet opnieuw opgestart?):

Probeer dan dit commando: sudo modprobe i2c-dev, dan verschijnt I2C in de devices:

raspberry pi i2c in dev


Gebruik van de I2C bus in Python

Om de I2C in Python te gebruiken moet je een module installeren, genaamd SMBUS, dit kan via APT-GET met het commando:

sudo apt-get install python-smbus

Je kan dan de module importeren in python door middel van: import smbus


I2C repeterende startcommando

Wat is het? (ENG):

A way to claim the bus
During an I2C transfer there is often the need to first send a command and then read back an answer right away. This has to be done without the risk of another (multimaster) device interrupting this atomic operation. The I2C protocol defines a so-called repeated start condition. After having sent the address byte (address and read/write bit) the master may send any number of bytes followed by a stop condition. Instead of sending the stop condition it is also allowed to send another start condition again followed by an address (and of course including a read/write bit) and more data. This is defined recursively allowing any number of start conditions to be sent. The purpose of this is to allow combined write/read operations to one or more devices without releasing the bus and thus with the guarantee that the operation is not interrupted.


Regardless of the number of start conditions sent during one transfer the transfer must be ended by exactly one stop condition.

Hier volgt een kleine handleiding om repeterende startcommando’s toe te laten op de I2C bus.

/sys/module/i2c_bcm2708/parameters/combined moet op Y staan, dat gaat met het commando:

sudo su -c 'echo "Y" > /sys/module/i2c_bcm2708/parameters/combined'

Controle met het commando:

cat /sys/module/i2c_bcm2708/parameters/combined

Daarna moet deze regel nog toegevoegd worden om instellingen bij het herstarten te behouden, deze regel:

options i2c-bcm2708 combined=1

moet dan staan in sudo nano /etc/modprobe.d/i2c.conf

Dan kan met het commando:

sudo bash -c "echo 'options i2c-bcm2708 combined=1' >> /etc/modprobe.d/i2c.conf"

Optioneel -> Reboot hierna de Raspberry pi met het commando: sudo reboot