Подключение DS18B20 к ESP32/ESP8266

DS18B20 удобный цифровой термосенсор. В промышленной эксплуатации обычно используются датчики в водонепроницаемой капсуле из нержавеющей стали. Характеристики датчиков:

  • Диапазон измеряемых температур -55 ° ~ +125 °.
  • Напряжение питания 3.0V ~ 5.5V
  • Низкая стоимость (~1,3 USD)
  • Однопроводной интерфейс 1Wire.
  • Точность ±0.5°C в диапазоне от -10°C до +85°C.
  • Программируемое разрешение от 9 Bits до 12 Bits.
  • Уникальный 64 битный серийный номер у каждого датчика исключающий конфликты на одной шине.
  • Можно напрямую подключать к микроконтроллерам без дополнительных конвертеров.
Распиновка DS18B20
Распиновка DS18B20

Выходы у датчика в нержавейке : Red (VCC), yellow (DATA), black (GND)

Схема подключения крайне простая. Датчик подключается к цифровому входу через резистор 4,7 К на +питания.

Получение адресов датчиков DS18B20

#include <OneWire.h>

OneWire ds(15);  //data wire connected to GPIO15

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

void loop(void) {
  byte i;
  byte addr[8];
  
  if (!ds.search(addr)) {
    Serial.println(" No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  Serial.print(" ROM =");
  for (i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
}

Опрос датчиков DS18B20

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is connected to GPIO15
#define ONE_WIRE_BUS 15
// Setup a oneWire instance to communicate with a OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

DeviceAddress sensor1 = { 0x28, 0xB1, 0x13, 0x46, 0x92, 0xD, 0x2, 0xA7 };

void setup(void)
{
  Serial.begin(115200);
  sensors.begin();
}

void loop(void)
{ 
  //Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  //Serial.println("DONE");
  
  Serial.print("Sensor 1: ");
  Serial.print(String(sensors.getTempC(sensor1)) + " C, "); 
  Serial.println(String(sensors.getTempF(sensor1)) + " F"); 

  //  tempSensor.requestTemperaturesByIndex(0);
  //Get single sensor value
  Serial.print("Temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" C, ");
  Serial.print(sensors.getTempFByIndex(0));
  Serial.println(" F");
  delay(1000);
}

Полезные ссылки

Spread the love
Запись опубликована в рубрике Размышления о бизнесе. Добавьте в закладки постоянную ссылку.