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
[…] shield para wemos D1 mini DS18B20: http://www.esp8266learning.com/wemos-mini-compatible-ds18b20-shield.php […]