Изчитане на температура с DS18B20 и ESP8266

Изчитане на температура с DS18B20 и ESP8266

Температурният сензор DS18B20 е широко използван благодарение на своята точност и простота. Той комуникира с микроконтролера чрез протокола 1-Wire, което означава, че само един пин е необходим за комуникация. В тази статия ще разгледаме как да свържем и програмираме DS18B20 с ESP8266. Ще предоставим схема за свързване и пълно описание на кода.

Необходими компоненти

  • ESP8266 (например ESP8266 D1 mini)
  • Температурен датчик DS18B20
  • Резистор 4.7kΩ (за “pull-up“)
  • Breadboard и кабели

Схема на свързване

ПИН на DS18B20ПИН на ESP8266
GNDGND
VCC3.3V
Data (DQ)D1

Между Data (DQ) и VCC пина на сензора поставяме 4.7kΩ резистор за “pull-up“, което е необходимо за правилната работа на протокола 1-Wire. За да свържете коректно схемата ще ви е необходима диаграма на пиновете (pinout) на ESP8266 D1 mini. Тази диаграма (също така и спецификация на платформата) може да намерите в нашата статия: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер. Посетете и нашия раздем Ревюта, за да наметите дикументация и на други хардуерни платформи като ESP32, ESP8266, Arduino, PicoIP, RaspberryPi и др.

Необходими библиотеки

Ще използваме две важни библиотеки за комуникация с DS18B20:

  1. OneWire – за комуникация с 1-Wire устройствата.
  2. DallasTemperature – за специфично управление на DS18B20.

Може да ги инсталирате чрез Arduino IDE, като отидете в Sketch -> Include Library -> Manage Libraries… и потърсите за “OneWire” и “DallasTemperature“.

Изчитане на температура с DS18B20 и ESP8266 библиотека Arduino IDE

Може и да ги свалите от тук: DallasTemperature, OneWire. Ако не знаете как да инсталирате библиотеките ръчно, посетете нашата статия: Arduino IDE бърз преглед. Там ще намерите нужната информация за работа с Arduino IDE.

Код за четене на температура от DS18B20

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D1

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

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

void loop(void) { 

  sensors.requestTemperatures();

  float tempC = sensors.getTempCByIndex(0);

  if(tempC != DEVICE_DISCONNECTED_C) {
    Serial.print("Temperature = ");
    Serial.print(tempC);
    Serial.println("*C");
  } 
  else {
    Serial.println("Sensor not found");
    delay(2000);
  }
}

Обяснение на кода

  1. Включване на библиотеките:
    • #include <OneWire.h> – тази библиотека е отговорна за комуникацията с устройствата по 1-Wire протокола.
    • #include <DallasTemperature.h> – специфична библиотека за работа с температурни сензори като DS18B20.

Дефиниране на пин:

#define ONE_WIRE_BUS D1
  1. Тук дефинираме пина на ESP8266, към който е свързан сензорът (в този случай D1).
  2. Инициализация на обекти:
    • OneWire oneWire(ONE_WIRE_BUS); – създаваме обект oneWire, който ще работи с 1-Wire устройствата.
    • DallasTemperature sensors(&oneWire); – създаваме обект sensors, който ще използва 1-Wire за управление на DS18B20 сензора.
  3. Настройка в setup():
    • Serial.begin(9600); – стартираме серийната комуникация със скорост 9600 baud, за да можем да видим резултатите в серийния монитор.
    • sensors.begin(); – инициализираме библиотеката за работа със сензора.
  4. Четене на температура в loop():
    • sensors.requestTemperatures(); – изпращаме команда към сензора да направи измерване на температурата.
    • float tempC = sensors.getTempCByIndex(0); – извличаме температурата в градуси по Целзий от първия (и единствен) сензор в системата. Ако имате повече от един сензор, можете да промените индекса.

Проверяваме дали сензорът е свързан правилно с:

if (tempC != DEVICE_DISCONNECTED_C) {
  • Ако температурата е различна от стойността DEVICE_DISCONNECTED_C, сензорът е свързан и работи нормално.

В случай на успех, резултатът се показва:

Serial.print("Temperature = ");

Serial.print(tempC);

Serial.println("*C");

Ако сензорът не е намерен, се извежда съобщение за грешка:

Serial.println("Sensor not found");

delay(2000);

Кратка видео презентация на кода

Заключение

DS18B20 е удобен и лесен за използване температурен датчик, който предоставя точни измервания и се нуждае от минимални ресурси за интеграция с ESP8266. С помощта на библиотеки като OneWire и DallasTemperature можем лесно да четем и използваме данните от сензора. Това решение е подходящо за разнообразни проекти, като домашна автоматизация или климатични системи.