tutorialspinouttools
Sensors · ESP32-C3

AHT20 on OLED: Temperature & Humidity

Free ESP32 & Arduino tutorial · wiring, code & parts · gokul.builds

Overview & Wiring

What it is: The AHT20 is a small, cheap, accurate I2C temperature and humidity sensor (±0.3 °C, ±2 % RH). It's a popular modern replacement for the DHT22 and is often sold on the same board as a BMP280. How it works: Pure I2C, fixed address 0x38, so it shares the OLED's SDA/SCL. The Adafruit AHTX0 library returns temperature and humidity as sensor events. Wiring (shared I2C bus with the OLED): AHT20 SDA -> GPIO4 AHT20 SCL -> GPIO5 AHT20 VCC -> 3V3 AHT20 GND -> GND OLED VCC=3V3, GND=GND, SDA=GPIO4, SCL=GPIO5 Libraries: "Adafruit AHTX0" (installs "Adafruit BusIO" and "Adafruit Unified Sensor"), plus "Adafruit SSD1306" and "Adafruit GFX Library". On screen / Serial: temperature (°C) and humidity (%), one decimal. Gotchas: The AHT20's address (0x38) is fixed and can't be changed, so you can't put two on one bus. It shares a bus fine with the OLED (0x3C) and a BMP280 (0x76).

Circuit Diagram

AHT20 on OLED: Temperature & Humidity wiring diagram for ESP32-C3

Parts You Need

ESP32-C3 SuperMiniBuy →
0.96" SSD1306 OLEDBuy →

Source Code (Arduino / ESP32)

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_AHTX0.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1);
Adafruit_AHTX0 aht;

void setup() {
  Serial.begin(115200);
  Wire.begin(4, 5);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  if (!aht.begin()) {
    Serial.println("AHT20 not found");
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 28); display.println("AHT20 not found");
    display.display();
    while (1) delay(10);
  }
}

void loop() {
  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);            // fills both structs

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("AHT20");
  display.setTextSize(2);
  display.setCursor(0, 18); display.printf("%.1f C", temp.temperature);
  display.setCursor(0, 42); display.printf("%.1f %%", humidity.relative_humidity);
  display.display();

  Serial.printf("Temp %.1f C  Hum %.1f %%\n", temp.temperature, humidity.relative_humidity);
  delay(1000);
}
Browse all tutorials ESP32-C3 pinout Calculators