O BME680 é um sensor ambiental que combina sensores de gás, pressão, umidade e temperatura. O sensor de gás pode detectar uma ampla gama de gases, como compostos orgânicos voláteis (VOC). Por esse motivo, o BME680 pode ser usado no controle da qualidade do ar interno.
MicroPython: BME680 com ESP32 e ESP8266 (temperatura, umidade, pressão, gás)
Apresentando o módulo de sensor ambiental BME680
O BME680 é um sensor ambiental que combina sensores de gás, pressão, umidade e temperatura. O sensor de gás pode detectar uma ampla gama de gases, como compostos orgânicos voláteis (VOC). Por esse motivo, o BME680 pode ser usado no controle da qualidade do ar interno.
BME680 Measurements
O BME680 é um sensor digital 4 em 1 que mede:
- Temperatura
- Umidade
- Pressão barométrica
- Gás: Compostos orgânicos voláteis (VOC), como etanol e monóxido de carbono
Sensor de gás
O BME680 contém um sensor MOX (Metal-oxide) que detecta VOCs no ar. Esse sensor lhe dá uma ideia qualitativa da soma de COVs/contaminantes no ar circundante – ele não é específico para uma molécula de gás específica.
Os sensores MOX são compostos por uma superfície de óxido metálico, um chip sensor para medir alterações na condutividade e um aquecedor. Ele detecta VOCs por meio da adsorção de moléculas de oxigênio em sua camada sensível. O BME680 reage à maioria dos COVs que poluem o ar interno (exceto CO2).
Quando o sensor entra em contato com os gases redutores, as moléculas de oxigênio reagem e aumentam a condutividade na superfície. Como um sinal bruto, o BME680 emite valores de resistência. Esses valores mudam devido a variações nas concentrações de VOC:
- Maior concentração de VOCs » Menor resistência
- Menor concentração de VOCs » Maior resistência
As reações que ocorrem na superfície do sensor (portanto, a resistência) são influenciadas por outros parâmetros além da concentração de VOC, como temperatura e umidade.
Informações relevantes sobre o sensor de gás
O sensor de gás lhe dá uma ideia qualitativa dos gases VOCs no ar ambiente. Assim, você pode obter tendências, comparar seus resultados e ver se a qualidade do ar está aumentando ou diminuindo. Para obter medições precisas, você precisa calibrar o sensor com fontes conhecidas e criar uma curva de calibração.
Ao adquirir o sensor pela primeira vez, é recomendável operá-lo por 48 horas depois de começar a coletar dados “reais”. Depois disso, também é recomendável operar o sensor por 30 minutos antes de obter uma leitura de gás.
Precisão do BME680
Aqui está a precisão dos sensores de temperatura, umidade e pressão do BME680:
Faixa de operação do BME680
A tabela a seguir mostra a faixa de operação dos sensores de temperatura, umidade e pressão do BME680.
Pinagem do BME680
Aqui está a pinagem do BME680:
Interface do BME680
O BME680 é compatível com as interfaces I2C e SPI.
BME680 I2C
Esse sensor se comunica usando o protocolo de comunicação I2C, portanto, a ligação é muito simples. Você pode usar os pinos I2C padrão do ESP32 ou ESP8266, conforme mostrado na tabela a seguir:
Peças necessárias
Para este projeto, você precisa conectar o módulo de sensor BME680 aos pinos I2C do ESP8266. Aqui está uma lista das peças necessárias para este capitulo:
- Módulo de sensor BME680
- ESP8266 (Qualquer modelo, preferencialmente os mais recentes)
- ProtoBoard
- Fios de jumper
Esquema – ESP8266
Siga o próximo diagrama esquemático se estiver usando uma placa ESP8266:
Biblioteca MicroPython BME680
A biblioteca para leitura do sensor BME680 não faz parte da biblioteca MicroPython padrão por padrão. Portanto, você precisa carregar a biblioteca a seguir em sua placa ESP8266 (salve-a com o nome bme680.py).
Aqui abaixo voce vera parte do código, o restante será encontrado no GitHub, no Final do Ebook.
import time import math from micropython import const from ubinascii import hexlify as hex try: import struct except ImportError: import ustruct as struct _BME680_CHIPID = const(0x61) _BME680_REG_CHIPID = const(0xD0) _BME680_BME680_COEFF_ADDR1 = const(0x89) _BME680_BME680_COEFF_ADDR2 = const(0xE1) _BME680_BME680_RES_HEAT_0 = const(0x5A) _BME680_BME680_GAS_WAIT_0 = const(0x64) _BME680_REG_SOFTRESET = const(0xE0) _BME680_REG_CTRL_GAS = const(0x71) _BME680_REG_CTRL_HUM = const(0x72) _BME280_REG_STATUS = const(0xF3) _BME680_REG_CTRL_MEAS = const(0x74) _BME680_REG_CONFIG = const(0x75) _BME680_REG_PAGE_SELECT = const(0x73) _BME680_REG_MEAS_STATUS = const(0x1D) _BME680_REG_PDATA = const(0x1F) _BME680_REG_TDATA = const(0x22) _BME680_REG_HDATA = const(0x25) _BME680_SAMPLERATES = (0, 1, 2, 4, 8, 16) _BME680_FILTERSIZES = (0, 1, 3, 7, 15, 31, 63, 127) _BME680_RUNGAS = const(0x10) _LOOKUP_TABLE_1 = (2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0, 2147483647.0, 2126008810.0, 2147483647.0, 2130303777.0, 2147483647.0, 2147483647.0, 2143188679.0, 2136746228.0, 2147483647.0, 2126008810.0, 2147483647.0, 2147483647.0) _LOOKUP_TABLE_2 = (4096000000.0, 2048000000.0, 1024000000.0, 512000000.0, 255744255.0, 127110228.0, 64000000.0, 32258064.0, 16016016.0, 8000000.0, 4000000.0, 2000000.0, 1000000.0, 500000.0, 250000.0, 125000.0)
Fazer upload da biblioteca BME680 com o Thonny IDE
Se estiver usando o Thonny IDE, siga as próximas etapas:
- Copie o código da biblioteca em um novo arquivo. O código da biblioteca BME680 pode ser encontrado aqui.
- Vá para File > Save as…
3. Selecione salvar no “dispositivo MicroPython”:
4. Nomeie seu arquivo como bme680.py e pressione o botão OK:
E é isso. A biblioteca foi carregada em sua placa. Para ter certeza de que o upload foi bem-sucedido, vá para File > Save as… e selecione o dispositivo MicroPython. Seu arquivo deve estar listado lá:
Depois de carregar a biblioteca em seu quadro, você pode usar as funcionalidades da biblioteca em seu código importando a biblioteca.
Código – BME680 Temperature, Humidity, Pressure, and Gas Air Quality
Depois de carregar a biblioteca no ESP8266, copie o código a seguir para o arquivo main.py ou boot.py. Ele simplesmente imprime a temperatura, a umidade, a pressão e a resistência do gás no shell a cada 5 segundos.
from machine import Pin, I2C from time import sleep from bme680 import * # ESP32 - Pin assignment i2c = I2C(scl=Pin(22), sda=Pin(21)) # ESP8266 - Pin assignment #i2c = I2C(scl=Pin(5), sda=Pin(4)) bme = BME680_I2C(i2c=i2c) while True: try: temp = str(round(bme.temperature, 2)) + ' C' #temp = (bme.temperature) * (9/5) + 32 #temp = str(round(temp, 2)) + 'F' hum = str(round(bme.humidity, 2)) + ' %' pres = str(round(bme.pressure, 2)) + ' hPa' gas = str(round(bme.gas/1000, 2)) + ' KOhms' print('Temperature:', temp) print('Humidity:', hum) print('Pressure:', pres) print('Gas:', gas) print('-------') except OSError as e: print('Failed to read sensor.') sleep(5)
Como o código funciona
Primeiro, você precisa importar as bibliotecas necessárias, incluindo o módulo BME680 que você importou anteriormente.
from machine import Pin, I2C from time import sleep from bme680 import *
Defina os pinos I2C. Nesse caso, estamos usando os pinos I2C padrão. Se estiver usando o ESP8266, comente a linha anterior e descomente a seguinte para que você tenha:
i2c = I2C(scl=Pin(5), sda=Pin(4))
No loop while, crie um objeto BME680 chamado bme com os pinos I2C definidos anteriormente:
bme = BME680_I2C(i2c=i2c)
Você está gostando do projeto, ele completo é encontrado no Ebook com este e outros, abaixo.
Guia de Esp8266 com sensores e módulos