Temperatur,Luftfeuchtigkeit, Luftdruck (BME280)

Einige Monate lag der BME280 rum. Jetzt Bastellaune gehabt - und es hat nichts mit der Corona-Pandemie zu tun! Anschluß nur von 4 Pins und 3.3V (wegen I2C). Man kann ihn auch mit SPI anschliessen. Dafür dann die anderen Pins.

Fehler: Auf meinem Prototype-Hat erst nur Pin '27' gefunden, da es ja an Pin 27,28 angeschlossen werden sollte. Fehler rechtzeitig bemerkt! Musste es an die Pins SDA und SDL anschliessen. Bei den ganzen Bildern der Pins im Internet muss man auf die Sicht achten. Man schaut wohl 'von unten' drauf. Meine Pins waren belegt. Ich musste mittels Overlay (s.u.) zwei andere Pins nehmen (GPIO27,GPIO08)

Man muss I2C im Raspberry erst in raspi-config aktivieren, installieren alleine reicht nicht.

sudo raspi-config
(Interfacing options (5)->P5 I2C Enablen)

sudo nano /etc/modules
i2c-bcm2708
i2c-dev

sudo apt-get install i2c-tools

sudo nano /boot/config.txt
dtparam=i2c_arm=on
dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=4,i2c_gpio_sda=8,i2c_gpio_scl=27

sudo i2cdetect -y 3
(dann steht irgendwo, welches device er gefunden hat)

sudo i2cdump -y 3 0x76 b
(die 0x76 entspricht der Zahl aus dem i2cdetect)

sudo i2cget -y 3 0x76 0x80 w
(um die zwei Bytes an der Position 0x80 zu lesen)

Auslesen mit Python: Man muss entweder smbus oder smbus2 installieren. Mit smbus muss man die Daten erst aufwändig lesen und zusammensetzen. Geht aber schneller!

sudo apt-get install python-smbus
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py

Mit smbus2 geht es in wenigen Zeilen, allerdings mit python3.

sudo pip install smbus2
sudo pip install RPi.bme280
Sollte ein Fehler ('extras_require') kommen, muss man erst:
sudo pip install --user --upgrade setuptools

sudo python3 bme280_smbus2.py

import smbus2
import bme280

port = 1
address = 0x76
bus = smbus2.SMBus(port)

calibration_params = bme280.load_calibration_params(bus, address)

# the sample method will take a single reading and return a
# compensated_reading object
data = bme280.sample(bus, address, calibration_params)

# the compensated_reading class has the following attributes
print(data.id)
print(data.timestamp)
print(data.temperature)
print(data.pressure)
print(data.humidity)

# there is a handy string representation too
print(data)

Wie man andere Pins als I2C nutzt (Overlay): https://www.instructables.com/id/Raspberry-PI-Multiple-I2c-Devices/ https://www.disk91.com/2013/technology/hardware/raspberry-pi-gpio-and-temperature-sensor/ https://raspberry-projects.com/pi/programming-in-python/i2c-programming-in-python/using-the-i2c-interface-2

in boot/conf.txt was eingebaut (damit eeprom Pins gehen) - wird aber auch von der camera genutzt - schlechte ideee

Ich wollte es aus einem C-Programm aufrufen,

Treiber gibt es hier: https://github.com/BoschSensortec/BME280_driver

gcc  -L. -c bme280.c -o bme280
gcc linux_userspace.c ../bme280.c -I ../ -o bme280
sudo ./bme280 /dev/i2c-3

geht aber nicht. Kommt immer „Failed to initialize the device (code -2).“.

Mit dem richtigen Sourcecode, wenn auch nicht vom Original Bosch geht es dann aber: http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-BMP280/index.html