Обзор
DS18B20 — это высокоточный цифровой датчик температуры от Dallas Semiconductor (Maxim Integrated). Он использует протокол 1-Wire для связи, требуя только одну линию данных. Датчик широко применяется в промышленных системах, метеостанциях и IoT-проектах благодаря широкому диапазону температур и настраиваемому разрешению.
DS18B20 — цифровой датчик температуры с интерфейсом 1-Wire. Обеспечивает высокую точность ±0.5°C и широкий диапазон измерений от -55°C до +125°C. Доступен в корпусе TO-92 и водонепроницаемых исполнениях.
О датчике DS18B20
DS18B20 — это высокоточный цифровой датчик температуры от Dallas Semiconductor (Maxim Integrated). Он использует проприетарный протокол 1-Wire для связи с микроконтроллером, требуя только одну линию данных (плюс землю). Это делает его идеальным выбором для проектов, где нужно минимизировать количество проводов.
⚡ Ключевые особенности
- Высокая точность — ±0.5°C в диапазоне от -10°C до +85°C.
- Широкий диапазон — измеряет от -55°C до +125°C.
- Протокол 1-Wire —只需要 одну линию данных для связи.
- Настраиваемое разрешение — от 9 до 12 бит (0.5°C до 0.0625°C).
- Уникальный адрес — 64-битный ROM позволяет подключить несколько датчиков на одну шину.
- Режим паразитного питания — датчик может питаться от линии данных.
Приобретите DS18B20
Характеристики DS18B20
Полные технические характеристики датчика температуры DS18B20.
Распиновка DS18B20
Датчик DS18B20 имеет три вывода: землю (GND), линию данных (DQ) и питание (VDD). Также поддерживает режим паразитного питания.
- Диапазон: -55°C до +125°C
- Точность: ±0.5°C от -10°C до +85°C
- Подтяжка: резистор 4.7кОм к VCC
- Адрес: 64-битный уникальный ROM
| № | Название | Тип | Описание | Примечания |
|---|---|---|---|---|
| 1 | GND | Земля | Подключение земли | Общая земля |
| 2 | DQ | Данные 1-Wire | Линия данных | Требует подтяжку 4.7кОм |
| 3 | VDD | Питание | Питание 3.0–5.5В | Или GND для паразитного питания |
Подключение DS18B20 к ESP32
Подключите DS18B20 к ESP32 через протокол 1-Wire. Требуется подтягивающий резистор 4.7кОм между линией данных DQ и VCC (3.3В или 5В).
| Вывод DS18B20 | Подключение | Вывод ESP32 | Описание |
|---|---|---|---|
| GND обязательно | → | GND | Общая земля |
| VDD обязательно | → | 3.3V или 5V | Питание |
| DQ обязательно | → | GPIO4 | Линия данных 1-Wire (с подтяжкой 4.7кОм) |
Устранение неполадок DS18B20
Распространённые проблемы и решения для запуска датчика.
Датчик показывает +85°C
Значение по умолчанию при включении
Проблема: датчик возвращает 85°C — значение по умолчанию, которое означает что преобразование ещё не завершено.
Решение: вызовите sensors.requestTemperatures() для запуска измерения, подождите 750мс (для 12-битного разрешения), затем считайте температуру через getTempCByIndex(0).
Датчик показывает -127°C
Датчик не обнаружен
Причины: датчик не обнаружен, проблемы с подключением, отсутствует резистор подтяжки 4.7кОм.
Решение: проверьте подключение, убедитесь что резистор 4.7кОм установлен между DQ и VCC, проверьте питание (3.0-5.5В). Используйте сканер OneWire для поиска устройств.
Показания скачут или неточные
Нестабильные показания
Причины: длинные провода без экранирования, помехи, неправильное значение подтяжки.
Решение: используйте экранированный кабель для длинных линий, убедитесь в наличии резистора 4.7кОм, добавьте конденсатор 100нФ между VCC и GND рядом с датчиком.
CRC Error при чтении
Ошибка контрольной суммы
Причина: нарушение временных диаграмм 1-Wire из-за длинных проводов или помех.
Решение: сократите длину линии, добавьте конденсатор 100нФ между VCC и GND, используйте более толстые провода, увеличьте время между запросами.
Советы по отладке
Serial монитор
Проверка логов и ошибок
Проверка напряжения
Мультиметр и целостность цепи
Дополнительные ресурсы
Примеры программирования DS18B20
Готовые к использованию примеры кода для различных платформ и фреймворков.
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
C++
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
Serial.println("DS18B20 Test");
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
if (tempC != DEVICE_DISCONNECTED_C) {
Serial.print("Температура: ");
Serial.print(tempC);
Serial.println(" °C");
} else {
Serial.println("Ошибка чтения");
}
delay(1000);
}
Необходимые библиотеки: OneWire и DallasTemperature. Установите через Arduino Library Manager.
Пример для ESP-IDF
Официальный фреймворк Espressif
C++
Пример для ESP-IDF
Официальный фреймворк Espressif
#include "ds18b20.h"
#include "onewire_bus.h"
#define ONE_WIRE_GPIO 4
void app_main() {
onewire_bus_handle_t bus;
onewire_bus_config_t config = { .bus_gpio_num = ONE_WIRE_GPIO };
onewire_bus_rmt_config_t rmt_config = {};
onewire_new_bus_rmt(&config, &rmt_config, &bus);
ds18b20_device_handle_t ds18b20;
ds18b20_config_t ds_cfg = {};
// Поиск и инициализация датчика
// ... (полный код в оригинальной статье)
}
Требуемые компоненты: espressif/onewire_bus и espressif/ds18b20 через idf.py add-dependency.
Пример для ESPHome
Конфигурация для Home Assistant
YAML
Пример для ESPHome
Конфигурация для Home Assistant
sensor:
- platform: dallas_temp
address: 0x1234567812345678
name: "Температура DS18B20"
update_interval: 60s
Примечание: Укажите уникальный адрес датчика (64-битный ROM). Можно использовать autodiscovery: для автоматического определения.
Пример для PlatformIO
Профессиональная среда разработки
C++
Пример для PlatformIO
Профессиональная среда разработки
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
paulstoffregen/OneWire@^2.3.7
milesburton/DallasTemperature@^3.11.0
// main.cpp - код аналогичен примеру для Arduino
#include <OneWire.h>
#include <DallasTemperature.h>
// ... тот же код
Пример для MicroPython
Python для микроконтроллеров
Python
Пример для MicroPython
Python для микроконтроллеров
import machine
import onewire
import ds18x20
import time
ds_pin = machine.Pin(4)
ow = onewire.OneWire(ds_pin)
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
print("Found devices:", roms)
while True:
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
temp = ds.read_temp(rom)
print("Temperature:", temp, "°C")
time.sleep(2)
В заключение о DS18B20
DS18B20 — это высокоточный и надёжный цифровой датчик температуры с интерфейсом 1-Wire. Благодаря широкому диапазону измерений, настраиваемому разрешению и возможности подключения нескольких датчиков на одну шину, он является отличным выбором для проектов мониторинга температуры.
Для стабильной работы всегда используйте подтягивающий резистор 4.7кОм. При длинных проводах добавьте конденсатор 100нФ между VCC и GND.
Проверяйте напряжение питания (3.0-5.5В) перед подключением. Не превышайте максимальное напряжение для избежания повреждения датчика.