ESP8266 - Sensor de CO2 SCD40
Este tutorial ensina você a usar o ESP8266 para medir o nível de CO2 de um ambiente com o sensor Sensirion SCD40. Em detalhes, vamos aprender:
- Como conectar o ESP8266 NodeMCU ao módulo sensor de CO2 SCD40 por I2C
- Como programar o ESP8266 para ler o valor de CO2 em ppm e mostrar se o ar está bom ou parado
- Como obter a temperatura e a umidade do mesmo módulo SCD40
Sugerimos:
- Utilizar o sensor de gás MQ2 se você quer detectar fumaça ou vazamentos de gás em vez de CO2.
- Utilizar o sensor DHT11 se você só precisa de temperatura e umidade a baixo custo.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de CO2 SCD40
Muitos sensores baratos de "qualidade do ar" apenas estimam o nível de CO2 (eles dão um valor "eCO2"). O SCD40 da Sensirion realmente mede o CO2. Ele usa sensoriamento NDIR fotoacústico: uma minúscula luz infravermelha pulsa dentro da câmara do sensor, as moléculas de CO2 absorvem parte dessa luz e criam um "som" de pressão muito pequeno, e um microfone embutido o mede. Mais CO2 significa um sinal mais forte. O módulo também tem dentro dele um sensor de temperatura e umidade, que ele usa para corrigir o valor de CO2.
| SCD40 | ||
|---|---|---|
| Tensão de alimentação | 2.4V a 5.5V | |
| Interface | I2C, endereço 0x62 | |
| Faixa de saída de CO2 | 0 a 40,000 ppm | |
| Precisão de CO2 | ±(50 ppm + 5% da leitura), de 400 a 2,000 ppm | |
| Taxa de leitura | um novo valor a cada 5 segundos (modo de baixo consumo | a cada 30 segundos) |
| Precisão de temperatura | ±0.8°C (15°C a 35°C) | |
| Precisão de umidade | ±6 %RH (15°C a 35°C, 20 a 65 %RH) | |
| Corrente média | cerca de 15 mA a 3.3V |
Pinagem do Sensor de CO2 SCD40

O módulo SCD40 tem quatro pinos:
- Pino VCC: deve ser conectado ao 3.3V do ESP8266 (o módulo aceita de 2.4V a 5.5V)
- Pino GND: deve ser conectado ao GND (0V)
- Pino SCL: a linha de clock I2C, deve ser conectado ao pino SCL do ESP8266
- Pino SDA: a linha de dados I2C, deve ser conectado ao pino SDA do ESP8266
A maioria dos módulos breakout SCD40 já tem resistores de pull-up em SCL e SDA, então nenhum resistor extra é necessário.
※ Nota:
A ordem dos pinos não é a mesma em todos os módulos. Algumas placas imprimem VIN em vez de VCC. Sempre olhe os rótulos do seu próprio módulo antes de ligar.
O Que Significa o Valor de CO2?
O CO2 é medido em ppm (partes por milhão). O ar fresco externo fica em torno de 400 ppm. Em um ambiente fechado, cada pessoa expira CO2, então o número sobe.
| Nível de CO2 | Qualidade do ar | O que fazer |
|---|---|---|
| cerca de 400 ppm | Ar externo | nada |
| 400 - 1000 ppm | Bom ar interno | nada |
| 1000 - 2000 ppm | Abafado | abra uma janela |
| acima de 2000 ppm | Ruim | ventile agora, dor de cabeça e sonolência são possíveis |
Calibração e Aquecimento
A autocalibração automática (ASC) vem ATIVADA por padrão. Ela assume que o sensor vê ar fresco, de nível externo (cerca de 400 ppm), pelo menos uma vez por semana, idealmente por uma hora ou mais. Então coloque o sensor onde o ar fresco chegue até ele de vez em quando, por exemplo perto de uma janela que você abre todo dia. Além disso, as primeiras leituras depois de ligar podem ser menos precisas. Isso é normal.
Diagrama de Ligação
O ESP8266 é uma placa de 3.3V, então alimente o SCD40 pelo pino 3V3. Conecte as linhas I2C aos pinos I2C padrão do NodeMCU: D2 (GPIO4) é o SDA e D1 (GPIO5) é o SCL.

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
| Módulo SCD40 | ESP8266 NodeMCU |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | D2 (GPIO4) |
| SCL | D1 (GPIO5) |
Como Programar o Sensor de CO2 SCD40
- O primeiro passo é incluir as bibliotecas:
- Crie o objeto do sensor:
- Inicie o barramento I2C nos pinos padrão do ESP8266 e diga à biblioteca onde está o sensor:
- Faça um início limpo e depois comece a medição periódica (uma leitura a cada 5 segundos):
- No loop(), verifique se uma nova leitura está pronta e depois leia-a:
Toda função retorna um código de erro. Se ele não for 0, errorToString() o transforma em uma mensagem legível, como você verá no código completo.
Código ESP8266 para o SCD40 - Ler o CO2
Este código imprime apenas o valor de CO2 e uma palavra curta sobre a qualidade do ar: Good, Moderate ou Poor.
Passos Rápidos
Para começar com o ESP8266 na Arduino IDE, siga estes passos:
- Confira o tutorial como configurar o ambiente para o ESP8266 na Arduino IDE se esta é a sua primeira vez usando o ESP8266.
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa ESP8266 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
- Clique no ícone Libraries na barra à esquerda da Arduino IDE.
- Pesquise "SCD4x" e depois localize a biblioteca Sensirion I2C SCD4x da Sensirion.
- Pressione o botão Install. Quando for solicitado que você instale a dependência Sensirion Core, clique em Install All.
- Search for Sensirion I2C SCD4x created by Sensirion and click the Install button.
- Copie o código acima e abra-o com a Arduino IDE.
- Clique no botão Upload na Arduino IDE para compilar e fazer o upload do código para o ESP8266.
- Abra o Serial Monitor e espere cerca de 5 segundos pelo primeiro valor.
- Respire suavemente em direção ao sensor, ou feche a porta de uma sala pequena, e observe o valor de CO2 subir.
※ Nota:
Se você vir uma mensagem de erro em vez de números, verifique se o SDA vai para o D2 e o SCL vai para o D1. Trocar esses dois fios é o erro mais comum.
Lendo a Temperatura e a Umidade do SCD40
O SCD40 fornece três valores em cada leitura: CO2, temperatura e umidade. No código acima, readMeasurement() já preenche as variáveis de temperatura e umidade, só não as imprimimos. O código abaixo imprime os três valores. Observe que o sensor fica sobre uma placa quente, então sua temperatura pode ser um pouco mais alta do que a temperatura real do ambiente.
Faça o upload da mesma forma e abra o Serial Monitor:
Vídeo
Conhecimento Adicional
Vamos comparar o SCD40 com o sensor de gás MQ2 usado no tutorial ESP8266 - Sensor de Gás.
| SCD40 | MQ2 | |
|---|---|---|
| O que mede | CO2 real em ppm | uma mistura de gases (GLP, fumaça, metano...) |
| Saída | valor digital I2C | tensão analógica + limiar digital |
| Unidade | ppm | sem unidade (valor bruto) |
| Dados extras | temperatura e umidade | nenhum |
| Aquecimento | algumas leituras | vários minutos (24 - 48 horas quando novo) |
| Melhor para | ventilação de ambientes, salas de aula, escritórios | alarmes de vazamento de gás e fumaça |
É evidente que o SCD40 é a escolha certa quando você precisa de um número verdadeiro de CO2 para saber quando abrir uma janela, enquanto o MQ2 é melhor para detectar gás perigoso ou fumaça.