BMP180 to czujnik ciśnienia atmosferycznego.

Podłączamy go do magistrali I2C, którą należy włączyć. Cechy tej magistrali: tylko dwa przewody sygnałowe (urządzenia wymagają jeszcze dodatkowo + i GND), oraz możliwych wiele urządzeń podłączonych do tych samych dwóch pinów.

Przewody

Łączymy pin SDA (I2C dane) ze schematu pinów znany też jako GPIO2 z pinem DA w BMP180
Łączymy pin SCK (I2C clock) tj. GPIO3 z linią CL na czujniku BMP180.
Podłączamy 3,3V do +, a GND do – (zasilanie czujnika)
Ostatni pin BMP180 (IO) zostawiamy niepodłączony.

Włączenie obsługi I2C

RPi wymaga włączenia obsługi I2C w jądrze systemu. W konsoli Raspbiana:

1
sudo raspi-config

-> Interfacing Options -> P5 I2C Enabled.
Zapisujemy, restart nie zaszkodzi.

C++

Pobieramy bibliotekę obsługi np. taką:
BMP180 C++ Library

1
git clone https://github.com/lexruee/bmp180

w katalogu src wpisujemy

1
make

następnie

1
./test.o

Powinno wyświetlić: temperaturę (z dokładnością do 2 stopni), ciśnienie (tu bardzo dokładnie) oraz wysokość n.p.m. wyliczoną dla ciśnienia 1013.25 hPa. Ponieważ takie ciśnienie rzadko występuje, wpisujemy aktualną wartość ciśnienia z IMGW dla naszego regionu do stałej (#define) BMP180_SEA_LEVEL w pliku bmp180.c. Teraz – o ile jest to wartość poprawna i aktualna – pomiar pokaże też naszą aktualną wysokość nad poziomem morza. Dane te można pobrać w JSON ze stacji pogodowych w okolicznych miastach i np. badać rozbieżności w pomiarach ciśnienia naszym czujnikiem i danych IMGW.

Uwaga! Czujnik mierzy tzw. ciśnienie bezwzględne. IMGW podaje ciśnienie względne (teoretyczne ciśnienie w tym samym miejscu ale na wysokości poziomu morza).

Informacje i kalkulator przeliczania ciśnienia względnego i bezwzględnego.

W pliku test.c można też ustawić tryb pracy – 1 – normal, 2- high precision, 3- very high precision, 0 – low voltage. Jest to drugi argument (test.c):

1
bmp180_set_oss(bmp, 2);