Especificações de hardware, barramento I2C Grove Port A, pinagem nos controladores (Cardputer ADV, StickC Plus2, AtomS3, StampS3), código C++ M5Unified, configuração ESPHome e integrador MQTT para o lab de telemetria.
Seleção dos sensores oficiais M5Stack compatíveis diretamente com a porta Grove padrão:
Sensor de alta resolução de 4ª geração: Sensirion SHT40 (±0.2°C, 0~100% RH) e Bosch BMP280 (300~1100 hPa). Ideal para monitoramento de clima e cisterna.
Sensor ambiental consagrado com chip Sensirion SHT30 e sensor barométrico QMP6988. Totalmente suportado por bibliotecas legadas e ESPHome nativo.
Módulo 4-em-1 com IA: temperatura, umidade, pressão e scanner de gases (VOC, VSC, IAQ). Perfeito para detectar qualidade do ar e gases na casa de bombas.
Termômetro infravermelho óptico sem contato (-70°C a +380°C). Apontado para a carcaça da bomba para alarme imediato de aquecimento mecânico e elétrico.
Matriz termográfica de 32×24 pixels. Gera imagem térmica ao vivo direto no ecrã do Cardputer ADV ou CoreS3 para inspeção de disjuntores e contatoras.
Interface para termopar Tipo K com isolador galvânico digital. Suporta de -200°C a +1350°C com total imunidade a transientes do motor da bomba.
Simule as leituras do sensor para calcular o Ponto de Orvalho (Dew Point), índice de calor e o risco de condensação de umidade na carcaça metálica da bomba ou quadros da cisterna:
Todos os sensores M5Stack I2C utilizam o cabo padrão Grove 4 vias HY2.0-4P:
Fio Preto
Fio Vermelho
Fio Amarelo
Fio Branco
| Dispositivo | SoC | SDA (Fio Branco) | SCL (Fio Amarelo) | Porta Física |
|---|---|---|---|---|
| M5Stack Cardputer ADV | ESP32-S3 | GPIO 2 | GPIO 1 | Grove Superior |
| M5StickC Plus 2 | ESP32-PICO-V3-02 | GPIO 32 | GPIO 33 | Grove Topo |
| AtomS3 / AtomS3 Lite | ESP32-S3 | GPIO 2 | GPIO 1 | Grove Fundo |
| M5CoreS3 / Core2 | ESP32-S3 / ESP32 | GPIO 2 | GPIO 1 | Port A (Vermelha) |
| Dispositivo / Unit | Chipset | Endereço I2C | Grandeza Medida | Frequência Barramento |
|---|---|---|---|---|
| Unit ENV IV | Sensirion SHT40 | 0x44 (7-bit) | Temperatura (-40~125°C) & Umidade (0~100%) | 100 kHz ~ 400 kHz (Fast Mode) |
| Unit ENV IV | Bosch BMP280 | 0x76 (7-bit) | Pressão Atmosférica (300~1100 hPa) | 100 kHz ~ 400 kHz |
| Unit ENV III | Sensirion SHT30 | 0x44 (7-bit) | Temperatura & Umidade | 100 kHz ~ 400 kHz |
| Unit ENV III | QST QMP6988 | 0x70 (7-bit) | Pressão Barométrica | 100 kHz ~ 400 kHz |
| Unit ENV Pro | Bosch BME688 | 0x77 (7-bit) | Temp, Umid, Pressão, VOC, IAQ (Gases) | 100 kHz ~ 400 kHz |
| Unit NCIR 2 | Melexis MLX90614 | 0x5A (7-bit) | Temperatura de Superfície IR (-70~380°C) | 100 kHz (SMBus) |
| Unit Thermal2 | Melexis MLX90640 | 0x33 (7-bit) | Termografia Matricial (768 pontos) | 400 kHz ~ 1 MHz |
# Configuração I2C para Unit ENV IV no ESPHome
i2c:
sda: GPIO2 # G2 no Cardputer ADV / AtomS3 (G32 no StickC Plus2)
scl: GPIO1 # G1 no Cardputer ADV / AtomS3 (G33 no StickC Plus2)
scan: true
frequency: 100kHz
sensor:
# Sensor SHT40 (Temperatura e Umidade)
- platform: sht4x
temperature:
name: "Cisterna Temperatura Ambiente"
id: cisterna_temp
accuracy_decimals: 2
humidity:
name: "Cisterna Umidade Relativa"
id: cisterna_hum
accuracy_decimals: 1
address: 0x44
update_interval: 15s
# Sensor BMP280 (Pressão Barométrica)
- platform: bmp280
temperature:
name: "BMP280 Temp Interna"
pressure:
name: "Cisterna Pressão Atmosférica"
id: cisterna_press
address: 0x76
update_interval: 30s
#include <M5Unified.h>
#include <Wire.h>
#include <SensirionI2CSht4x.h>
#include <Adafruit_BMP280.h>
SensirionI2CSht4x sht4x;
Adafruit_BMP280 bmp;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
// Inicializa I2C na porta Grove com os pinos corretos do hardware
Wire.begin(M5.getPin(m5::pin_name_t::port_a_sda), M5.getPin(m5::pin_name_t::port_a_scl), 400000);
sht4x.begin(Wire, 0x44);
bmp.begin(0x76);
M5.Display.setTextSize(2);
M5.Display.println("M5 ENV IV Monitor");
}
void loop() {
M5.update();
float temp = 0.0f;
float hum = 0.0f;
sht4x.measureHighPrecision(temp, hum);
float press = bmp.readPressure() / 100.0F; // em hPa
M5.Display.clear();
M5.Display.setCursor(0, 10);
M5.Display.printf("Temp: %.2f C\n", temp);
M5.Display.printf("Umid: %.1f %%\n", hum);
M5.Display.printf("Pres: %.1f hPa\n", press);
delay(2000);