ESP32 says I haven't wired the AHT20 sensor

I have a ESP32 WROVER B board and I try to connect a sensor to it, but although I think I followed the instructions, something is not right.

This is the pinout of the board.

This is the Adafruit AHT20 sensor:

How I wired:

  • AHT20 pin SCL -> ESP32 pin 21
  • AHT20 pin SDA -> ESP32 pin 22
  • AHT20 pin VIN-> ESP32 pin 5V
  • AHT20 pin GND-> ESP32 pin GND

This is the code I tried:

#include <Adafruit_AHTX0.h>

Adafruit_AHTX0 aht;

void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit AHT10/AHT20 demo!");

  if (! aht.begin()) {
    Serial.println("Could not find AHT? Check wiring");
    while (1) delay(10);
  }
  Serial.println("AHT10 or AHT20 found");
}

void loop() {
  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
  Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
  Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");

  delay(500);
}

When I run the code, I always get this message on the Serial Monitor:

Could not find AHT? Check wiring

What am I missing?

upload sketch "i2C_scaner". check the address.
in the library #define AHTX0_I2CADDR_DEFAULT 0x38 ///< AHT default i2c address

1 Like

I believe the ATH20 would rather be run at 3.3v and I'm not sure the ESP32 inputs are 5V tolerant.

1 Like

The sensor is 5V tolerant but the Adafruit-website says

Power Pins

The sensor on the breakout requires between a 2.7V and 5.5V, and can be easily used with most microcontrollers from an Arduino to a Feather or something else.

  • VIN - this is the power pin. To power the board, give it the same power as the logic level of your microcontroller - e.g. for a 5V micro like Arduino, use 5V
  • GND - common ground for power and logic.

So I suggest you connect the Sensors Vcc to the 3.3V-pin

If you look at the pinout-picture you see that
Pin 21 is SDA
and
Pin 22 is SCL
which is vice versa to what you have written
image

best regards Stefan

That's not quite relevant if the ESP32 is a 3.3V device. If the sensors is powered with 5V, its signals are 5V.

Thanks for all replies.
The truth is I tried connecting SCL and SDA from the sensor to each of 21 and 22 from the board. And also tried the 3.3V pin for power.

The led from the sensor is turned on when connected to power, so at least I know that it is powered.

I'm interested to try this, but I don't think I understand it:

You are right, I mistyped. But I tried both, anyway.

you should to know at which address the sensor answer.

 // --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(115200);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

say the what serial monitor show

2 Likes

I agree, as a rule you should run this program whenever you have a new hardware configuration.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.