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