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
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:
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ę.