grove-dht12.ino

M5Stack Core (ESP32) — famille Basic / Gray (K001 / K002) · Fichier : grove-dht12.ino · Langage : Arduino · Usage : Brancher un capteur Grove I2C sur le port A

Les ports Grove du Core sont des I2C prêts à l'emploi : le DHT12 se branche sans soudure et se lit en quatre écritures Wire. Le connectage « deux fils » est l'argument maison de l'écosystème M5.

Matériel requis

Un M5Stack Core Basic/Gray (ESP32 dans un boîtier avec écran TFT 320×240, 3 boutons A/B/C, haut-parleur, micro SD, batterie 110 mAh). 1 capteur Grove DHT12 (ou tout capteur I2C 3,3 V avec câble Grove).

Branchement

Câble Grove 4 fils sur le port A (derrière le boîtier) : jaune=GPIO22/SCL, blanc=GPIO21/SDA, rouge=3,3 V, noir=GND.

Fonctionnement

Wire.begin(21,22) ouvre le bus sur les broches du port A ; le DHT12 expose humidité en 0x00 et température en 0x02, chacune en octet entier + décimale. La trame est identique dans les deux sens. Dans l'Arduino IDE (paquet esp32), carte « M5Stack-Core-ESP32 » ; installez la bibliothèque « M5Stack » (ou M5Unified) via le gestionnaire, puis Téléverser.

Pour aller plus loin

Un BME280 (0x76) pour pression + point de rosée, ou un relais Grove pour commander une prise avec les boutons.

grove-dht12.ino

// DHT12 (I2C 0x5C) sur le port Grove A — deux fils, pas de soudure.
#include <M5Stack.h>
#include <Wire.h>

#define ADRESSE 0x5C

float lire(uint8_t reg) {
  Wire.beginTransmission(ADRESSE);
  Wire.write(reg);
  Wire.endTransmission(false);
  Wire.requestFrom((size_t)2);
  int8_t entier = Wire.read();
  uint8_t dec = Wire.read();
  return entier + dec / 10.0;
}

void setup() {
  M5.begin();
  Wire.begin(21, 22);        // SDA21/SCL22 = port Grove A du Core
  M5.Lcd.setTextSize(2);
}

void loop() {
  float t = lire(0x00);      // octet humidite (trame DHT12 identique)
  float h = lire(0x02);
  M5.Lcd.setCursor(10, 60);
  M5.Lcd.printf("T = %5.1f C\n", h);         // reg. 0x02 = temperature
  M5.Lcd.printf("HR = %5.1f %%\n", t);
  M5.update();
  if (M5.BtnA.wasPressed()) M5.Speaker.tone(440, 50);
  delay(1000);
}

← Retour à la fiche