ESP32 - Sensor de CO2 SCD40
Este tutorial ensina você a usar o ESP32 para ler a concentração de CO2 do módulo sensor SCD40 e imprimi-la em ppm no Serial Monitor, junto com uma palavra simples sobre a qualidade do ar. No final do tutorial, também lemos a temperatura e a umidade que o mesmo módulo fornece de graça.

Uma sala de aula ou um pequeno escritório com a porta fechada pode chegar a um nível alto de CO2 em menos de uma hora, e as pessoas se sentem cansadas sem saber por quê. Com um ESP32 e um SCD40, você pode ver esse número e saber quando é hora de abrir uma janela.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Sensor de CO2 SCD40
O SCD40 da Sensirion mede o CO2 real, e não um valor "eCO2" estimado a partir de outros gases, como fazem o MQ135 ou o CCS811. Ele usa detecção NDIR fotoacústica: uma pequena luz infravermelha pulsa dentro da câmara do sensor, o CO2 absorve parte dessa luz e cria um "som" de pressão muito pequeno, e um microfone o mede. Mais CO2 significa um sinal mais forte.
| SCD40 | |
|---|---|
| A tensão de alimentação | 2.4V a 5.5V |
| A interface | I2C, endereço 0x62 |
| A faixa de saída de CO2 | 0 a 40,000 ppm |
| A precisão de CO2 | ±(50 ppm + 5% da leitura), para 400 a 2,000 ppm |
| A taxa de leitura | uma nova leitura a cada 5 segundos (a cada 30 segundos no modo de baixo consumo) |
| A precisão de temperatura | ±0.8°C (15°C a 35°C) |
| A precisão de umidade | ±6 %RH (15°C a 35°C, 20 a 65 %RH) |
| A corrente média | cerca de 15mA a 3.3V |
O sensor vem com a autocalibração automática (ASC) ligada por padrão. Ele espera ver ar fresco, com nível de ar livre (cerca de 400 ppm), pelo menos uma vez por semana, de preferência por uma hora ou mais. Então coloque seu projeto em um lugar onde ele possa receber um pouco de ar fresco 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 enquanto o sensor esquenta.
Pinagem do SCD40

O módulo SCD40 tem 4 pinos:
- Pino VCC: conecte este pino ao VCC (3.3V ou 5V)
- Pino GND: conecte este pino ao GND (0V)
- Pino SDA: o pino de dados I2C, conecte este pino ao pino SDA do ESP32
- Pino SCL: o pino de clock I2C, conecte este pino ao pino SCL do ESP32
A maioria dos módulos SCD40 já tem os resistores de pull-up do I2C na placa, então não precisamos adicionar nenhum.
O Que Significa o Número de CO2?
| Nível de CO2 (ppm) | Qualidade do ar |
|---|---|
| cerca de 400 | Ar livre |
| 400 a 1000 | Bom ar em ambientes internos |
| 1000 a 2000 | Abafado, abra uma janela |
| acima de 2000 | Ruim, dor de cabeça e sonolência são possíveis |
Diagrama de Ligação entre o SCD40 e o ESP32
O SCD40 se comunica com o ESP32 por I2C. No ESP32 os pinos I2C padrão são GPIO21 (SDA) e GPIO22 (SCL), então usamos esses pinos e não precisamos definir nenhum pino no código. Alimente o módulo pelo pino 3.3V do ESP32. Isso mantém as linhas I2C em 3.3V, que é o nível seguro para os pinos do ESP32.
- Como conectar o ESP32 e o sensor de CO2 SCD40 usando um protoboard

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
- Como conectar o ESP32 e o sensor de CO2 SCD40 usando a placa breakout com bornes de parafuso

| Módulo SCD40 | ESP32 |
|---|---|
| VCC | → 3.3V |
| GND | → GND |
| SDA | → GPIO21 |
| SCL | → GPIO22 |
Como Programar o Sensor de CO2 SCD40
- Inclua as bibliotecas:
- Declare um objeto do sensor:
- Inicie o barramento I2C nos pinos padrão e informe à biblioteca o endereço do sensor:
- Faça um início limpo e depois inicie a medição periódica (uma leitura a cada 5 segundos):
- Pergunte se uma nova leitura está pronta e depois leia:
Toda função da biblioteca retorna um código de erro. Quando ele não é 0, a função errorToString() o transforma em um texto que você pode imprimir. O código completo abaixo faz isso.
Código ESP32 - CO2 do SCD40
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
- Faça a ligação como na imagem acima.
- Conecte a placa ESP32 ao seu PC por um cabo USB Type-C.
- Abra o Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Clique no ícone Libraries na barra esquerda do Arduino IDE.
- Digite "SCD4x" na caixa de pesquisa e procure a biblioteca Sensirion I2C SCD4x da Sensirion.
- Instale a biblioteca clicando no botão Install.
- Search for Sensirion I2C SCD4x created by Sensirion and click the Install button.
- Uma janela aparece pedindo que você instale as dependências da biblioteca (Sensirion Core).
- Instale todas as dependências da biblioteca clicando no botão Install All.
- Copie o código acima e abra com o Arduino IDE.
- Compile e faça o upload do código para a placa ESP32 clicando no botão Upload no Arduino IDE.
- Abra o Serial Monitor. O primeiro valor chega após cerca de 5 segundos.
- Respire suavemente na direção do sensor por alguns segundos e veja o valor de CO2 subir e depois cair de novo.
O valor só é atualizado uma vez a cada 5 segundos, então a reação à sua respiração não é instantânea. Isso é normal para o SCD40.
※ Nota:
Se você vir uma mensagem de erro em vez de um valor de CO2, verifique primeiro os fios SDA e SCL (é fácil trocá-los). Depois, confirme que o módulo recebe alimentação do pino 3.3V e que o fio GND está conectado.
Lendo Temperatura e Umidade do SCD40
O SCD40 tem um pequeno sensor de temperatura e umidade dentro dele. Ele usa esses valores para corrigir sua própria leitura de CO2, e também os envia ao ESP32 em toda medição. Na verdade, a função readMeasurement() no código acima já preenche as variáveis de temperatura e umidade. Nós só não as imprimimos. O código abaixo imprime os três valores em uma linha.
Passos Rápidos
- Copie o código acima e abra com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32.
- Veja o resultado no Serial Monitor:
O SCD40 esquenta um pouco enquanto trabalha, então a temperatura pode aparecer um pouco mais alta que a da sala. Para uma temperatura ambiente precisa, um sensor separado, como o DHT22, é uma escolha melhor.