Wemos Mini compatible Ds18B20 shield

I already have a Ds18B20 example on this site but i was interested to see that searching through popular electronic component sites a DS18B20 shield for the Wemos mini, I couldn’t find a link on the Wemos site so I was intrigued and purchased one, I had planned on actually designing one (night still do this as an experiment)

Here is what the shield looks like
DS18B20 Shield for Wemos D1 mini DS18B20

Looking at the shield I could see that it used D2 as the input

 

Code

We already had an example but it used D4, this shield uses D2 so it was easy to change this and test

[codesyntax lang=”cpp”]

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example

OneWire  ds(D2);  // on pin D4 (a 4.7K resistor is necessary)

void setup(void) 
{
  Serial.begin(9600);
}

void loop(void) 
{
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) 
  {
    ds.reset_search();
    delay(250);
    return;
  }

  if (OneWire::crc8(addr, 7) != addr[7]) 
  {
      Serial.println("CRC is not valid!");
      return;
  }
 
  // the first ROM byte indicates which chip
  switch (addr[0]) 
  {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end  
  delay(1000);
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) 
  {           
    data[i] = ds.read();
  }

  // Convert the data to actual temperature
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) 
    {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } 
  else 
  {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

[/codesyntax]

 

Testing

OPen the serial monitor

Temperature = 26.56 Celsius, 79.81 Fahrenheit
Temperature = 26.81 Celsius, 80.26 Fahrenheit
Temperature = 27.81 Celsius, 82.06 Fahrenheit
Temperature = 28.44 Celsius, 83.19 Fahrenheit
Temperature = 28.81 Celsius, 83.86 Fahrenheit
Temperature = 29.19 Celsius, 84.54 Fahrenheit
Temperature = 29.44 Celsius, 84.99 Fahrenheit
Temperature = 29.62 Celsius, 85.32 Fahrenheit
Temperature = 29.81 Celsius, 85.66 Fahrenheit
Temperature = 29.94 Celsius, 85.89 Fahrenheit
Temperature = 29.75 Celsius, 85.55 Fahrenheit

 

Links

This comes in at only $2.20

AliExpress.com Product – Free shipping DS18B20 Shield for Wemos D1 mini DS18B20