dht22.ino
El protocolo de 1 hilo del DHT va temporizado en microsegundos: la librería Adafruit corre en el core STM32F1 pero la calibración de retardos depende de la velocidad de la CPU. Los fallos sistemáticos señalan ese ajuste.
Hardware necesario
Una placa de desarrollo GD32F103C8T6 (Cortex-M3 a 108 MHz, compatible pin a pin con Blue Pill), alimentada a 3,3 V/5 V, con un adaptador ST-Link o serie. 1 DHT22 + resistencia de 10 kΩ (módulo de 3 pines: ya integrada).
Cableado
VDD 3,3 V, DATA en PA4 con pull-up de 10 kΩ, GND. Cable corto (< 30 cm): el protocolo es sensible al ruido.
Funcionamiento
readTemperature marca impulsos con micros(); en núcleos rápidos la librería pasa a DWT/timer. Los NaN significan trama corrupta, no necesariamente un sensor muerto. Con Arduino: instale el core « STM32F1 » (Roger Clark, gestor de placas) y elija la placa « GD32F103C »; el LED de usuario es PC13 (activo en LOW). En C: biblioteca de firmware GD32F10x + ST-Link.
Para ir más lejos
Añadan la pantalla OLED del sketch anterior, o el umbral de alerta en un zumbador.
dht22.ino
// DHT22 sur PA4 — bibliotheque DHT sensor library (Adafruit).
#include <DHT.h>
#define DHTPIN PA4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long precedent = 0;
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println("DHT22 sur GD32 (2 s mini entre lectures)");
}
void loop() {
if (millis() - precedent < 2000) return;
precedent = millis();
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) { Serial.println("trame perdue"); return; }
Serial.printf("T=%.1f C HR=%.1f %%\n", t, h);
// Le GD32 etant 100x plus rapide, la bibliotheque doit calibrer ses
// microsecondes : si les lectures echouent toutes, voir note doc.
}