![Изчитане на температура с DS18B20 и ESP8266](http://ardudevelop.eu/wp-content/uploads/2024/09/Изчитане-на-температура-с-DS18B20-и-ESP8266.png)
Температурният сензор DS18B20 е широко използван благодарение на своята точност и простота. Той комуникира с микроконтролера чрез протокола 1-Wire, което означава, че само един пин е необходим за комуникация. В тази статия ще разгледаме как да свържем и програмираме DS18B20 с ESP8266. Ще предоставим схема за свързване и пълно описание на кода.
Необходими компоненти
- ESP8266 (например ESP8266 D1 mini)
- Температурен датчик DS18B20
- Резистор 4.7kΩ (за “pull-up“)
- Breadboard и кабели
Схема на свързване
![](http://ardudevelop.eu/wp-content/uploads/2024/09/Изчитане-на-температура-с-DS18B20-и-ESP8266-Схема.png)
ПИН на DS18B20 | ПИН на ESP8266 |
GND | GND |
VCC | 3.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:
- OneWire – за комуникация с 1-Wire устройствата.
- DallasTemperature – за специфично управление на DS18B20.
Може да ги инсталирате чрез Arduino IDE, като отидете в Sketch -> Include Library -> Manage Libraries… и потърсите за “OneWire” и “DallasTemperature“.
![Изчитане на температура с DS18B20 и ESP8266 библиотека Arduino IDE](http://ardudevelop.eu/wp-content/uploads/2024/09/Изчитане-на-температура-с-DS18B20-и-ESP8266-библиотека-Arduino-IDE.png)
Може и да ги свалите от тук: 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);
}
}
Обяснение на кода
- Включване на библиотеките:
- #include <OneWire.h> – тази библиотека е отговорна за комуникацията с устройствата по 1-Wire протокола.
- #include <DallasTemperature.h> – специфична библиотека за работа с температурни сензори като DS18B20.
Дефиниране на пин:
#define ONE_WIRE_BUS D1
- Тук дефинираме пина на ESP8266, към който е свързан сензорът (в този случай D1).
- Инициализация на обекти:
- OneWire oneWire(ONE_WIRE_BUS); – създаваме обект oneWire, който ще работи с 1-Wire устройствата.
- DallasTemperature sensors(&oneWire); – създаваме обект sensors, който ще използва 1-Wire за управление на DS18B20 сензора.
- Настройка в setup():
- Serial.begin(9600); – стартираме серийната комуникация със скорост 9600 baud, за да можем да видим резултатите в серийния монитор.
- sensors.begin(); – инициализираме библиотеката за работа със сензора.
- Четене на температура в 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 можем лесно да четем и използваме данните от сензора. Това решение е подходящо за разнообразни проекти, като домашна автоматизация или климатични системи.