Aziz Bench

SHT40 / SHT41 / SHT43 / SHT45 I²C address

The SHT40 / SHT41 / SHT43 / SHT45 (temperature and humidity sensor) can answer on 0x44, 0x45, or 0x46: below is how to choose.

I²C address (7-bit)
0x44 / 0x45 / 0x46
3 possible addresses
Write / read (8-bit)
0x88 / 0x89
Binary
1000100
Shares an address with
6 devices
Where it sits on the bus its addresses reserved
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

How to set the address

The address depends on the exact part number, not on a pin: SHT4x-A… is 0x44, -B… 0x45, -C… 0x46. The 0x45 versions exist only for SHT40 and SHT43, the 0x46 version only for SHT40.

Devices that use the same addresses

Two devices on the same bus can’t answer on the same address. These modules from our list use at least one of these addresses:

DeviceWhat it isShared address
INA219current/voltage/power monitor0x44, 0x45, 0x46
INA226current/voltage/power monitor0x44, 0x45, 0x46
INA260current/voltage/power monitor with integrated shunt0x44, 0x45, 0x46
OPT3001ambient light sensor0x44, 0x45, 0x46
PCA968516-channel 12-bit PWM / servo driver0x44, 0x45, 0x46
SHT30 / SHT31 / SHT35temperature and humidity sensor0x44, 0x45

If two of them end up on the same address, move one with its address pin, put one behind a TCA9548A multiplexer (0x70–0x77), or use a second I²C bus: the ESP32, ESP32-S3 and RP2040 have two I²C controllers (the ESP32-C3 has one).

Check your whole bus →Add the SHT40 / SHT41 / SHT43 / SHT45 and your other modules: the checker finds conflicts, suggests free addresses and sizes the pull-ups.

7-bit and 8-bit address

I²C addresses are 7 bits long. Some datasheets and libraries write them as 8-bit numbers, with the read/write bit added on the right: that is why the same chip can appear as 0x44 or 0x88. Arduino’s Wire library and ESPHome use the 7-bit form.

7-bitBinary8-bit write8-bit read
0x4410001000x880x89
0x4510001010x8A0x8B
0x4610001100x8C0x8D

Check that it answers

Upload this sketch with the SHT40 / SHT41 / SHT43 / SHT45 wired to SDA and SCL: it tries every address the chip can use and prints the one that answers. On an ESP32 the default pins are GPIO21 (SDA) and GPIO22 (SCL); on an Arduino Uno, A4 and A5.

#include <Wire.h>

const byte ADDRS[] = {0x44, 0x45, 0x46};

void setup() {
  Serial.begin(115200);
  Wire.begin();
  for (byte a : ADDRS) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) {
      Serial.print("SHT4x answers at 0x");
      if (a < 0x10) Serial.print('0');
      Serial.println(a, HEX);
      return;
    }
  }
  Serial.println("No answer: check the wiring");
}

void loop() {}

In ESPHome the bus is scanned at boot (scan: true is the default): the log lists every address that answers.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

Pull-up resistors

SDA and SCL need pull-up resistors to the supply. Many breakout boards already carry them, often 4.7 kΩ or 10 kΩ, and with several boards on the bus they add up in parallel. The I²C checker works out the allowed range for your bus voltage and speed.

Frequently asked questions

What is the I2C address of the SHT40 / SHT41 / SHT43 / SHT45?

0x44, 0x45, or 0x46. The address depends on the exact part number, not on a pin: SHT4x-A… is 0x44, -B… 0x45, -C… 0x46. The 0x45 versions exist only for SHT40 and SHT43, the 0x46 version only for SHT40.

Can I use more than one SHT40 / SHT41 / SHT43 / SHT45 on the same bus?

Only if they are different versions: SHT4x-A… answers on 0x44, -B… on 0x45, -C… on 0x46, and not every model exists in every version. Two of the same version always clash: use a TCA9548A multiplexer or a second I²C bus.

Why doesn’t the SHT40 / SHT41 / SHT43 / SHT45 show up in an I2C scan?

Check, in this order: SDA and SCL not swapped; ground shared between the boards; pull-up resistors on SDA and SCL; the module powered at the voltage it is made for; and that your code uses the 7-bit address (0x44), not the 8-bit one (0x88).

Similar devices

Addresses checked against the SHT40 / SHT41 / SHT43 / SHT45 datasheet.