Temperature & Humidity
Interfacing AHT10 Temperature & Humidity with ESP32
What is the AHT10?
AHT10 practical reference
A compact I2C temperature/humidity sensor that replaced the DHT11/DHT22 in many designs thanks to its digital calibration and low power draw.
Key specifications
- Supply voltage: 2.2V–5.5V (breakout modules commonly run at 3.3V or 5V via onboard regulation)
- Operating current: ~0.25 mA during measurement, <0.01 mA average in idle/standby
- Humidity range: 0-100% RH
- Humidity accuracy: ±2% RH (typical, 0-100% range)
- Temperature range: -40°C to +85°C
- Temperature accuracy: ±0.3°C (typical)
- Resolution: 0.024% RH, 0.01°C
- Interface: I2C, up to 400kHz (Fast mode)
- I2C address: 0x38 (fixed, not configurable)
- Response time: ~8 seconds to 63% of a step change
Pinout and connection notes
Fixed I2C address — the AHT10 has no address-select pin, so its 0x38 address cannot be changed. If your project needs two AHT10s on one bus, you'll need an I2C multiplexer (e.g. TCA9548A) rather than an address pin trick.
Pull-up resistors — most breakout boards already include their own 10kΩ pull-ups on SDA/SCL. If you're combining several I2C breakouts on one bus, having pull-ups on every single board isn't harmful but is redundant — it just lowers the effective resistance a bit. It only becomes a real problem with many boards stacked at once.
Initialization matters — unlike the DHT11/22, the AHT10 expects a specific init sequence after power-up (a calibration-enable command, typically 0xE1 0x08 0x00) before its first reading is trustworthy. Most libraries (Adafruit_AHTX0, etc.) handle this automatically — if you're talking to it with raw Wire.h calls, check the datasheet command table first.
Check the calibration bit — each status byte returned by the sensor includes a "calibrated" flag. Skip acting on the very first reading after power-up until that bit is set, or you risk reading pre-calibration noise as valid data.
- VCC: Power, 2.2–5.5V DC depending on breakout
- GND: Ground
- SCL: I2C clock line
- SDA: I2C data line
Integration checklist
- Confirm the exact part number and breakout-board revision.
- Verify supply voltage, current demand, logic levels, and signal direction against the datasheet.
- Check controller pin assignments and bus address or interface mode against the example code.
- Power up with external loads disconnected, then test signals before full integration.
- If readings or communication fail, check power and ground first, then pin mapping, interface settings, and library initialization.
Troubleshooting and reproducibility
Record the board used, wiring, library/version, supply arrangement, and measured behavior. Use the selected board-specific wiring example as the source of truth. Never assume visually similar modules share identical voltage tolerance or pin order.
Setting Up AHT10 with ESP32
Library
Adafruit AHTX0 by Adafruit
Search "Adafruit AHTX0" in Library Manager (Sketch > Include Library > Manage Libraries)
Wiring
| Component pin | ESP32 pin | Note |
|---|---|---|
| VCC | 3.3V | |
| GND | GND | |
| SCL | GPIO22 | |
| SDA | GPIO21 |
Swipe sideways to see every column →
Same library and API as the Uno — only the wiring and the explicit Wire.begin(21, 22) pin mapping change.
Related Components
Related Guides & Projects
MicroPython vs Arduino on ESP32: Which Should You Learn First?
An honest comparison for beginners: where MicroPython is easier, where Arduino C++ is faster, how libraries and memory differ, and how to choose based on your project instead of hype.
MicroPython ESP32 Web Server: Control an LED or Relay from Your Browser
Create a working web server with the socket module, parse requests, serve a responsive control page for an LED or a relay, keep the displayed state truthful, choose a safe relay startup state and make the server survive bad or repeated requests.
MicroPython on ESP32 and Raspberry Pi Pico W: The Complete Guide
A structured MicroPython learning path for ESP32 and Pico W. Set up your tools, control GPIO, read sensors, connect to WiFi, build web servers, publish MQTT data and make projects reliable. Start here, then follow the links by level.
boot.py vs main.py in MicroPython: What Runs, When and Why
Understand the difference between boot.py and main.py in MicroPython, startup order, Wi-Fi setup, project structure, and recovery from boot errors.