AM2320 will this work as a replacement for AM2302 / DHT22

  • I was looking for another humidity sensor and the AM2320 came up as a alternative to DHT22 / AM2302.
    Has anyone tried this unit already? Will this work as a direct replacement in the humidity sketch for a DHT22?

    Thanks in advance! 🙂

  • Contest Winner

    @brchevo I just googled for AM2320 and came accross the AdaFruit site. They say that the AM2302 is just a wired version of the DHT22. So it should work perfect since it is a DHT22.

  • I know, im responding to an old thread,

    AM2320 is not the same as AM2302, I might be wrong, the switcheroo between 20 an 02 is easily made,

    If Im correct;
    AM2320 = 1 = vcc / 2 = SDA / 3 = GND / 4 = SCL

    AM2302 = 1 = vcc / 2 = SDA / 3 = NC / 4 = GND

    Please correct me if im wrong, cuz I dont get the AM2320 properly working.

  • @Omemanti
    I think the AM2320 has got an "One-wire mode", at least if you look at the datasheet. I have not tried it though.

    I also had great difficulties in getting the AM2320 to work with I2C until I realised late last night that I had forgotten to include the pull-up resistors, 4k7 each from SDC and SDA to Vcc. All other I2C sensors I have used have had them included on the breakout board but this sensor does not have them built in the sensor body.
    Now it works like a charm, one measurement of temp and hum every 2 minutes.
    There are a few arduino-libraries for AM2320 floating around. I use this: (

    Here is my sketch:

     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     * Created by Henrik Ekblad <>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list:
     * Documentation:
     * Support Forum:
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     * Temperature and humidity measurement using the AM2320 with I2C interface
     * Battery voltage also monitored using internal reference
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    #define MY_NODE_ID 23
    #define BATTERY_SENSE_PIN A0  // Input pin for battery sense
    #define VMIN 1.0  // (Min input voltage to regulator according to datasheet or guessing. (?) )
    #define VMAX 3.22 // (Known or desired voltage of full batteries. If not, set to Vlim.)
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #include <SPI.h>
    #include <AM2320.h>
    #include <Wire.h>
    #include <MySensors.h>  
    #define DEBUG_PRINT 0  // Print temperature and humidity measurements on serial i/f. 1 = Yes 0 = No
    unsigned long SLEEP_TIME = 120000; // Sleep time between reads (in milliseconds)
    bool receivedConfig = false;
    bool metric = true;
    float temp, hum;
    // Create an AM2320 instance
    AM2320 th;
    // Initialize AM temperature message
    MyMessage msgt(CHILD_ID_TEMP,V_TEMP);
    // Initialize AM humidity message
    MyMessage msgh(CHILD_ID_HUM,V_HUM);
    void before()
      // use the 1.1 V internal reference
      #if defined(__AVR_ATmega2560__)
    void setup()  
    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Temp. Hum Sensor", "1.4");
      // Present temp/humidity sensor to controller
      present(CHILD_ID_TEMP, S_TEMP);
      present(CHILD_ID_HUM, S_HUM);
    void loop()     
      //Get temperature and humidity from AM2320
      switch(th.Read()) {
        case 2:
          Serial.println("CRC failed");
        case 1:
          Serial.println("Sensor offline");
        case 0:
          temp = th.t;
          send(msgt.set(temp, 1));
          hum = th.h;
          send(msgh.set(hum, 0));
          if (DEBUG_PRINT == 1) {
            Serial.print("humidity: "); 
            Serial.print("%, temperature: ");
      sleep (200);
      // get the battery voltage
      int batValue = analogRead(BATTERY_SENSE_PIN);    // Battery monitoring reading
      float Vbat  = batValue * 0.003363;
      int batteryPcnt = static_cast<int>(((Vbat-VMIN)/(VMAX-VMIN))*100.);   

Log in to reply

Suggested Topics