Mysensort mit DHT12 (i2C)

  • Hello

    Does anyone built up an Mysenors Humidity Node with an DHT12 it is an I2C sensor...

    but I2C is needet for the NRF24+ or?


  • Mod

    @michlb1982 the nrf radio uses SPI, not I2C.

    I haven't seen anyone using the dht12, but there are examples that use other i2c sensors.

  • Well i did it... i've got a working MYSENSOR with DHT12...
    here the Code ... its not nice but it works...

    // Enable debug prints
    #define MY_DEBUG
    // Define Node ID
    #define MY_NODE_ID 128
    // Enable and select radio type attached 
    #define MY_RADIO_NRF24
    #include <SPI.h>
    #include <MySensors.h>  
    #include <DHT12.h>
    #include <Wire.h>
    DHT12 dht12;
    #define SENSOR_TEMP_OFFSET 0
    // Sleep time between sensor updates (in milliseconds)
    // Must be >1000ms for DHT22 and >2000ms for DHT11
    static const uint64_t UPDATE_INTERVAL = 30000;
    static const uint8_t FORCE_UPDATE_N_READS = 10;
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    float lastTemp;
    float lastHum;
    uint8_t nNoUpdatesTemp;
    uint8_t nNoUpdatesHum;
    bool metric = true;
    MyMessage msgHum(CHILD_ID_HUM, V_HUM);
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    void presentation()  
      // Send the sketch version information to the gateway
      sendSketchInfo("DHT12", "1.1");
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID_HUM, S_HUM);
      present(CHILD_ID_TEMP, S_TEMP);
      //metric = getControllerConfig().isMetric;
    void setup()
    void loop()      
      // Force reading sensor, so it works also after sleep()
      // Get temperature from DHT library
      float temperature = dht12.readTemperature();
      if (isnan(temperature)) {
        Serial.println("Failed reading temperature from DHT!");
      } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
        // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
        lastTemp = temperature;
        // apply the offset before converting to something different than Celsius degrees
        temperature += SENSOR_TEMP_OFFSET;
        if (!metric) {
          temperature = dht12.readTemperature();
        // Reset no updates counter
        nNoUpdatesTemp = 0;
        send(msgTemp.set(temperature, 1));
        #ifdef MY_DEBUG
        Serial.print("T: ");
      } else {
        // Increase no update counter if the temperature stayed the same
      // Get humidity from DHT library
      float humidity = dht12.readHumidity();
      if (isnan(humidity)) {
        Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
        // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
        lastHum = humidity;
        // Reset no updates counter
        nNoUpdatesHum = 0;
        send(msgHum.set(humidity, 1));
        #ifdef MY_DEBUG
        Serial.print("H: ");
      } else {
        // Increase no update counter if the humidity stayed the same
      // Sleep for a while to save energy
      //wait(UPDATE_INTERVAL); //for repeaters

    i Used this library:

    here the datasheet of the dht12: