//Three sensors, one bus, LCD by TIM
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
const byte I2C_ADDR = 0x27;
const byte LCD_COLUMNS = 20;
const byte LCD_LINES= 4;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Conecte DS18B2 al pin D35 de Esp32.
const byte ONE_WIRE_BUS = 35;
//Configure una instancia de OneWire para comunicarse con cualquier dispositivo OneWire.
OneWire oneWire(ONE_WIRE_BUS);
// Pase nuestra referencia OneWire al sensor de temperatura de Dallas
DallasTemperature sensors(&oneWire);
byte numDevices = 0;
// Inicialización del sensor y comunicación serial.
void setup()
{
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temperaturas:");
sensors.begin();
byte address[8];
while (oneWire.search(address))
{
Serial.print("Bus index=");
Serial.print(numDevices);
Serial.print("; Device address=");
for(byte i = 0; i < 8; i++)
{
Serial.print(address[i], HEX);
Serial.print(" ");
}
Serial.println();
numDevices++;
}
}
const byte LCD_BUFFER_LENGTH = 20;
char lcdBuffer[LCD_BUFFER_LENGTH]; // One extra for NULL terminator.
const char LCD_BUFFER_FORMAT[] = " %d: %s\xDF\x43 "; // Escape the two characters for °C because DF merges in to C as a valid hex number.
void loop()
{
if (numDevices > 0)
{
sensors.requestTemperatures();
for (byte i = 0; i < numDevices; i++)
{
float temperatureCelsius = sensors.getTempCByIndex(i);
int tInt = int(temperatureCelsius);
Serial.print("Bus index=");
Serial.print(i);
Serial.print("; Temperature=");
Serial.print(temperatureCelsius);
Serial.println("°C");
char floatBuffer[20];
snprintf(lcdBuffer, LCD_BUFFER_LENGTH, LCD_BUFFER_FORMAT, i, dtostrf(temperatureCelsius, 8, 3, floatBuffer));
lcd.setCursor(0, i + 1);
lcd.print(lcdBuffer);
}
}
delay(1000);
}