===== Temperatur,Luftfeuchtigkeit, Luftdruck (BME280) =====
Einige Monate lag der[[https://startingelectronics.org/pinout/GY-BMP280-pressure-sensor-module/| 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 [[https://de.pinout.xyz/pinout/i2c#|Pin 27,28]] angeschlossen werden sollte. Fehler rechtzeitig bemerkt! Musste es an die Pins SDA und SDL anschliessen. Bei den ganzen [[https://thierrys-blog.ch/index.php/2017/01/30/raspberry-pi-pin-belegung/|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 ([[gpio|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