BMP180 Luchtdruk en temperatuur sensor aansluiten op een Raspberry Pi

Op de electronica markt zijn veel verschillende temperatuur sensoren te koop die heel eenvoudig op een Raspberry Pi zijn aan te sluiten. In dit stappenplan gaan we aan de slag met een BMP180 sensor, deze meet naast de actuele temperatuur ook de luchtdruk.

Met behulp van een Python script lezen we de data uit en converteren we deze naar leesbare waarden die we voor verschillende doeleinden kunnen gebruiken.

Gebruikte componenten

BMP180 Luchtdruk en temperatuur sensor (2€)
4x Dupont verbindingskabel (female/female)

Raspberry Pi 3 model B
Raspbian Strech (November 2018 kernel 4.14)

Aansluitschema BMP180 sensor

Je kunt de BMP180 sensor aansluiten op de Raspberry Pi volgens onderstaand schema. De pinnen op de module kunnen verschillende labels hebben, bijvoorbeeld VCC in plaats van VIN. Let op dat de pin volgorde per gebruikte module kan verschillen. Mocht er op de module een pin ‘3Vo' aanwezig zijn, gebruiken deze dan niet.

BMP180 Raspberry PI

Raspberry Pi Kleur BMP Module
3.3V (PIN #1) rood VIN (VCC)
GPIO2 SDA1 I2C (PIN #3) groen SDA
GPIO3 SCL1 I2C (PIN #5) geel SCL
GND (PIN #6) zwart GND

I2C interface activeren

Om de waardes van de BPM180 uit te kunnen lezen gebruiken we een Python script dat via de I2C interface de sensor aanstuurt. Om toegang te krijgen tot de I2C interface dient deze in de Raspberry Pi geactiveerd te zijn, dit kan je doen met de raspi-config tool.

sudo raspi-config

Ga naar ‘Advanced options' en ‘enable' de I2C optie.

Python script

Het script om de sensor waarden uit te lezen maakt alleen gebruik van libraries die standaard aanwezig zijn.

#!/usr/bin/python
# BMP180 luchtdruk + temperatuur sensor
# https://www.raspberrytips.nl
import smbus
import time
from ctypes import c_short
DEVICE = 0x77
bus = smbus.SMBus(1)
def convertToString(data):
return str((data[1] + (256 * data[0])) / 1.2)
def getShort(data, index):
return c_short((data[index] << 8) + data[index + 1]).value
def getUshort(data, index):
return (data[index] << 8) + data[index + 1]
def readBmp180(addr=DEVICE):
REG_CALIB = 0xAA
REG_MEAS = 0xF4
REG_MSB = 0xF6
REG_LSB = 0xF7
CRV_TEMP = 0x2E
CRV_PRES = 0x34
OVERSAMPLE = 3
cal = bus.read_i2c_block_data(addr, REG_CALIB, 22)
AC1 = getShort(cal, 0)
AC2 = getShort(cal, 2)
AC3 = getShort(cal, 4)
AC4 = getUshort(cal, 6)
AC5 = getUshort(cal, 8)
AC6 = getUshort(cal, 10)
B1 = getShort(cal, 12)
B2 = getShort(cal, 14)
MB = getShort(cal, 16)
MC = getShort(cal, 18)
MD = getShort(cal, 20)
# Lees Temperatuur
bus.write_byte_data(addr, REG_MEAS, CRV_TEMP)
time.sleep(0.005)
(msb, lsb) = bus.read_i2c_block_data(addr, REG_MSB, 2)
UT = (msb << 8) + lsb
# Lees Luchtdruk
bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6))
time.sleep(0.04)
(msb, lsb, xsb) = bus.read_i2c_block_data(addr, REG_MSB, 3)
UP = ((msb << 16) + (lsb << 8) + xsb) >> (8 - OVERSAMPLE)
# Opmaak temperatuur
X1 = ((UT - AC6) * AC5) >> 15
X2 = (MC << 11) / (X1 + MD)
B5 = X1 + X2
temperature = (B5 + 8) >> 4
# Opmaak luchtdruk
B6 = B5 - 4000
B62 = B6 * B6 >> 12
X1 = (B2 * B62) >> 11
X2 = AC2 * B6 >> 11
X3 = X1 + X2
B3 = (((AC1 * 4 + X3) << OVERSAMPLE) + 2) >> 2
X1 = AC3 * B6 >> 13
X2 = (B1 * B62) >> 16
X3 = ((X1 + X2) + 2) >> 2
B4 = (AC4 * (X3 + 32768)) >> 15
B7 = (UP - B3) * (50000 >> OVERSAMPLE)
P = (B7 * 2) / B4
X1 = (P >> 8) * (P >> 8)
X1 = (X1 * 3038) >> 16
X2 = (-7357 * P) >> 16
pressure = P + ((X1 + X2 + 3791) >> 4)
return (temperature/10.0,pressure/ 100.0)
def main():
deg = u'\xb0'
(temperature,pressure)=readBmp180()
print "Temperatuur : ", temperature,deg.encode('utf8'), "C"
print "Luchtdruk : ", pressure, "mbar"
if __name__=="__main__":
main()
view raw bmp180.py hosted with ❤ by GitHub

Je kunt dit script downloaden met behulp van:

wget https://raspberrytips.nl/bmp180sensor.py

Voer hierna het script uit:

python bmp180sensor.py

BMP180 sensor raspberry pi

In het terminal venster zal nu de temperatuur in celsius en de gemeten luchtdruk milibar worden weergegeven.

2 gedachten over “BMP180 Luchtdruk en temperatuur sensor aansluiten op een Raspberry Pi”

Een reactie plaatsen

%d bloggers liken dit: