
De BME680 is een van de nauwkeurigste en veelzijdigste sensoren om temperatuur, luchtvochtigheid, luchtdruk en de gaswaarde te meten. Er is alleen één nadeel, alleen met de originele bibliotheek van Bosch, de ontwikkelaar van de sensor, wordt de juiste temperatuur getoond. Omdat de door Bosch geleverde driver een C-bestand is, heeft programmeur twartzek (zie GitHub) een klein C-programma beschikbaar gesteld om met de sensor in Python te communiceren.
In deze tutorial laat ik zien hoe je gebruik maakt van de BME680 sensor in combinatie met de Bosch bibliotheek waardoor je zuivere waarden met de sensor in Python kunt meten.
Daar gaan we….
Sensor verbinden met de Pi
De BME680 is reeds eerder op Picademie.nl uitgelegd. Klik hier om op de juiste pagina terecht te komen. Hier vind je in detail hoe je de sensormodule met de Raspberry Pi verbind.

Het samenstellen van het programma
Maak als eerste op de Raspberry Pi een directorie aan genaamd BME680 en ga erin staan.
mkdir BME680
cd BME680
Download nu op GitHub het BME680 stuurprogramma van Bosch via:
wget https://github.com/BoschSensortec/BME680_driver
In de map staat nu het bestand BME680_driver
Heb je het bestand op een andere manier gedownload, zet het dan in dezelfde directorie waar het later aangeroepen wordt. In dit voorbeeld vanuit de BME680-directorie.
I2C – Gebruik je bus 0?
Standaard gebruikt de Pi bus 1, maar als je bus 0 wilt gebruiken moet je de code aanpassen m.b.t. de I2C-bus in de regel:
g_i2cFid = open(“/ dev/i2c-1“, O_RDWR); naar g_i2cFid = open(“/dev/i2c-0“, O_RDWR);
Het I2C-adres (0x77) van de sensor
De opgegeven code gebruikt adres: BME680_I2C_ADDR_SECONDARY (0x77)
Compileren
Na deze aanpassing kun je het programma compileren met:
gcc bme680_main.c bme680.c -o bme680
Meer over het gcc-compileerprogramma vind je hier: https://man7.org/linux/man-pages/man1/gcc.1.html
Je bent nu klaar met het voorbereiden van de sensor, de software en de bibliotheek.
Opdrachtregels
Het programma kan met maximaal drie parameters worden opgeroepen.
- Commando: ./bme680
Hiermee worden drie meetresultaten afgedrukt met het tijdstip van de meting. De vertraging tussen elke meting bedraagt (standaard) 3 seconden.

- Commando ./bme680 5 2
De eerste parameter 5 definieert de vertraging (seconden) tussen elke meting. De tweede parameter 2 definieert het aantal metingen voordat het programma wordt beëindigd.
• Om 60 metingen in een uur te doen gebruik je: ./bme680 60 60
• Voor 24 uur 60 metingen per uur te doen gebruik je: ./bm680 60 1440

- Commando ./bme680 5 2 output.txt
Je kunt ook een derde argument opgeven, dat zal worden gebruikt om de metingen naar een bestand te schrijven. De gegevens kun je in een spreadsheet tot mooie grafieken verwerken.

Gebruik in Python
Als je het programma bme680 in Python wilt gebruiken, kun je het aanroepen met check_output
. Het heeft even bij me geduurd voordat ik begreep hoe de notatie moest zijn. Daarom heb ik ter verduidelijking er een (rode) commentaarregel aan toegevoegd.
from subprocess import check_output
#out = check_output(["padnaar/bme680", str(vertraginginsecs), str(aantalmetingen)], text=True)
out = check_output(["bme680", str(measDelay), str(nMeas)])
Commentaarregel uitgelegd
“padnaar/bme680” – hier vermeld je het volledige pad naar het bme680-programma, bijvoorbeeld: /home/pi/BME680/bme680
str(vertraginginsecs) – hier geef je de vertraging in seconden op, dus bijvoorbeeld: str(3)
str(aantalmetingen) – hier geef je het aantal metingen op dat je wilt doen, dus bijvoorbeeld: str(5)
.lock-programma
Als er problemen optreden met gelijktijdig gebruik van de I2C-bus, kun je controleren of het bestand ~bme680i2c.lock bestaat, aangezien dit aan het begin van het programma wordt aangemaakt en kort voor beëindiging wordt verwijderd. Het .lock-programma zorgt ervoor dat het programma slechts één maal van de I2C-bus gebruik kan maken.
Voorbeeldscript
Met het script, ik heb het bme680_v1.py genoemd, lees ik iedere 3 seconden de sensor uit, en dat 5 maal. Het resultaat wordt in een keer afgebeeld. Het resultaat zie je hieronder.
from subprocess import check_output
import subprocess
# Hier worden de gemeten waarden van de BME680 uitgelezen
out = check_output(["/home/pi/BME680/bme680", str(3), str(5)], text=True)
print (out)

Uitgebreid script
Inmiddels ben ik wat verder met de code en heb een uitgebreider script gemaakt waarbij na opgegeven grenswaarden een ventilator ingeschakeld kan worden. De (relais)aansturing moet je er zelf even in zetten. Doe er je voordeel mee!
Have A Nice Day!
Laat een reactie achter