===== 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