Capteur de pression, température, humidité et qualité d’air BME680

Ce tutoriel explique comment mettre en oeuvre un module Grove BME680 sur bus I2C en MicroPython. Le BME680 de Bosch est un capteur de pression atmosphérique, température, humidité et qualité d’air. Ce dernier point nécessite des explications supplémentaires, en l’occurence directement traduites depuis ce site.

Le capteur peut détecter une vaste gamme de Composés Organiques Volatils (COV) tels que l’éthanol ou le monoxyde de carbone (mais pas le CO2). Dans les environnements industriels ou urbains, les COV sont produits par la combustion des caburants fossiles et leurs émanations, c’est pour cela qu’on considère que ce capteur indique la qualité de l’air.

Il est conçu avec la technologie MOX pour “Metallic OXides”. Le principe de fonctionnement d’un capteur MOX est basé sur la variation de la conductivité d’une couche d’oxyde métallique lors de sa mise en contact avec un environnement gazeux. Plus précisément, lorsque certaines molécules de gaz s’adsorbent à la surface de cette couche, une réaction d’oxydo-réduction s’ensuit et sa résistance change proportionnellement à la concentration du gaz en question dans l’air.

Le capteur est donc constitué d’une couche d’un métal choisi pour réagir avec les molécules du (ou des) gaz que l’on souhaite détecter, d’une résistance chauffante et de circuits intégrés qui mesurent ses variations de résistance. Le capteur est très sensible mais il n’est pas capable de discriminer les différentes molécules susceptibles de réagir avec sa surface. Il faut en principe le calibrer selon un processus rigoureux pour relier la chute de résistance qu’il indique à la concentration ambiante de polluants organiques volatils.

Matériel requis

  1. Une carte d’extension de base Grove
  2. La carte NUCLEO-WB55
  3. Un module Grove BME680

Le module BME680 :

Grove bme680

Crédit image : Seeed Studio

Branchez le module sur l’un des connecteurs I2C du Grove base shield.

Le code MicroPython

Ce code est adapté de l’exemple fourni par le site Random Nerd Tutorials.

Les scripts présentés ci-après sont disponibles dans la zone de téléchargement.

Il faut ajouter le fichier bme680.py dans le répertoire du périphérique PYBLASH. Editez maintenant le script main.py et copiez dedans le code suivant :

# Objet du code : 
# Mise en oeuvre du module Grove BME680 capteur de température, humidité, pression et qualité d'air.
# Ressource adaptée du site : https://RandomNerdTutorials.com/micropython-bme680-esp32-esp8266/

from machine import Pin, I2C # Gestion des broches et de l'I2C
from time import sleep # Gestion des temporisations	
import bme680 # Pilotes du module Grove BME680 

# On utilise l'I2C n°1 de la carte NUCLEO-WB55 pour communiquer avec le capteur
i2c = I2C(1)

# Pause d'une seconde pour laisser à l'I2C le temps de s'initialiser
sleep(1)

# Liste des adresses I2C des périphériques présents
print("Adresses I2C utilisées : " + str(i2c.scan()) + "\n")

# Instanciation du capteur
bme = bme680.BME680_I2C(i2c=i2c)

# Décompte du nombre de séries de mesures
nbmes = 0

while True:
	
	# Affiche la série de mesures
	nbmes = nbmes + 1
	print('Série de mesures numéro : ', nbmes)

	# Structure pour intercepter d'éventuelles erreurs
	try: # Essaies de faire tout ce qui suit...

		# Arrondis et conversions en chaînes de caractères des mesures
		temp = str(round(bme.temperature, 1)) + ' C'
		hum = str(round(bme.humidity, 1)) + ' %'
		pres = str(round(bme.pressure, 1)) + ' hPa'
		gas = str(round(bme.gas/1000, 1)) + ' KOhms'

		# Affichage des mesures sur le terminale série de l'USB User
		print('Température :', temp)
		print('Humidité relative :', hum)
		print('Pression :', pres)
		print('Résistance sensible aux COV :', gas)
		print('-------------------')

	except OSError as e: # Si une erreur est survenue dans le bloc "try"...
		
		print('Erreur de lecture du capteur !')

	sleep(30) # Temporisation ; prochaine mesure dans 30 secondes.

Sortie sur le port série de l’USB USER

Appuyez sur CTRL+D dans le terminal PuTTY et observez les valeurs qui défilent :


bme680 terminal


Après une petite heure de mesures dans le même environnement, la résistance du capteur de COV est stabilisée autour de 19 KOhms. La chute de résistance observée à partir de la série de mesures numéro 16 est la conséquence de l’exposition du capteur à la respiration (contenant des traces de CO).