Raspberry Pi i szyna I2C

Jedną z wielkich zalet Rasbperry Pi jest to, że została wyposażona w ciekawy zestaw portów a jeden z nich to i2c. Jest to szyna, która pozwala na bardzo łatwą (potrzebuje 4 przewody) komunikację z innymi układami scalonymi, czujnikami czy wręcz całymi urządzeniami. Na rynku jest od lat i dlatego nie ma problemu znaleźć masę zabawek, które możemy wykorzystać.

Aby rozpocząć przygodę z i2c należy uruchomić i2c na malince.

sudo nano /etc/modules i dodajemy moduł i2c-dev

image

a następnie

sudo apt-get install i2c-tools
sudo apt-get install python-smbus

To doda nam narzędzia do i2c oraz bibliotekę smbus dla pythona, która przyda się do komunikacji.

Na koniec:

sudo adduser pi i2c

Po restarcie można już cieszyć się tym, że i2c działa. Szybka kontrola:

i2cdetect –y 1 i mamy:

image

i2cdetect pozwala odczytać adresy urządzeń podpiętych do szyny (w przypadku malinki rev2 –y 1, w przypadku rev1 –y 0). Na powyższej rycinie widać, że są podpięte 3 urządzenia o adresach 0x48, 0x4F u 0x77. Jeśli nic nie podepniemy, będzie pusto. Jednak jest to pierwszy krok, który pozwoli sprawdzić czy to to w ogóle u nas działa.

Szyna i2c pozwala podpiąć ponad setkę urządzeń. Każde z nich ma swój adres (niektóre mają konfigurowalny adres) który warto znać, żeby się z danym urządzeniem komunikować. Jak wcześniej pisałem, rycina pokazuje 3 takie urządzenia:

0x48 i 0x4F to termometry LM75A, w których 3 ostatnie bity adresu można ustawić, możemy zatem podpiąć 8 różnych termometrów. Szczegółowe dane techniczne znajdują się tutaj

0x77 to  BMP085 czyli czujnik temeratury i cisnienia atmosferycznego. Szczegółowe dane techniczne znajdują się tutaj.

W kolejnych postach pokażę jak podpiąć powyższe czujniki do malinki  i jak cokolwiek z nich odczytać a później pokażę prosty sposób na wypchnięcie danych na zewnątrz do google docs lub do własnej aplikacji webowej.

 

Aktualizacja:

Jeden z czytelników napisał, że potrzebował dopisać w pliku /etc/modules  linijkę i2c-bcm2708. Więc jeśli to co napisałem w Twoim przypadku to za mało  to może tego brakuje. W mojej malince wystarczyło wpisać i2c-dev ale może to wynika z faktu, że używam raspbmc a nie raspbiana. Dzięki Marek za uwagę.