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.

Gebruikte componenten

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

Raspberry Pi 3 model B
Raspbian Jessie (2016-05-27 kernel 4.4)

Aansluitschema BMP180

Je kunt de BMP180 aansluiten op de Raspberry Pi volgens onderstaand schema. De pins 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, dan gebruiken we deze 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
# Gebaseerd op een script gemaakt door Matt Hawkins

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()

Je kunt dit script downloaden met behulp van:

wget https://raspberrytips.nl/files/oled128x64test.py

Voer hierna het script uit:

python bmp180sensor.py

BMP180 sensor raspberry pi

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

1 gedachte over “BMP180 luchtdruk en temperatuur sensor aansluiten op een Raspberry Pi

Een reactie plaatsen

%d bloggers liken dit: