Библиотека OneWire и DallasTemperature
- В менеджере библиотек
- OneWire by Jim Studt, Tom Pollard, Robin James и ещё 10
- Версия
- 2.3.8 · всего 9 версий, первая — 2.3.0
- Платы
- любые — автор не ограничивал
- В менеджере библиотек
- DallasTemperature by Miles Burton, Tim Newsome, Guil Barros и ещё 1
- Версия
- 4.0.6 · всего 12 версий, первая — 3.7.2
- Платы
- любые — автор не ограничивал
Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.
Термометры DS18B20: несколько датчиков на одном проводе, у каждого свой адрес.
DS18B20 говорит по шине 1-Wire: один провод данных, и на нём может висеть хоть десяток датчиков, каждый со своим 64-битным адресом. OneWire реализует саму шину, DallasTemperature — команды термометра поверх неё. Ставятся обе, включаются обе.
Измерение занимает до 750 мс при полном разрешении. По умолчанию requestTemperatures() ждёт это время сам; для отзывчивого скетча ожидание отключают и читают результат позже.
Как скачать и установить
- Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите
OneWireи найдите в списке строку «OneWire by Jim Studt, Tom Pollard, Robin James и ещё 10» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить». - Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
- Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте ZIP выше, затем Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите файл. Распаковывать не нужно.
Файл DallasTemperature.h отдельно не скачивают: он внутри библиотеки и появляется после установки. Если среда пишет DallasTemperature.h: No such file or directory — библиотека не установлена или установлена не та. Как устроен менеджер и куда складываются файлы — в общей статье про библиотеки.
Строка подключения:
#include <OneWire.h>
#include <DallasTemperature.h>Создание объекта — обычно до setup():
OneWire oneWire(2); // провод данных на D2
DallasTemperature sensors(&oneWire);
sensors.begin(); // в setup()Методы
Только то, что нужно в обычном скетче. Сигнатуры сверены по заголовкам: OneWire 2.3.8, DallasTemperature 4.0.6.
begin()- Найти датчики на шине.
getDeviceCount()- Сколько датчиков найдено.
requestTemperatures()- Запустить измерение на всех датчиках. Ждёт окончания, если ожидание не отключено.
getTempCByIndex(uint8_t i)- Температура i-го датчика по порядку обнаружения, °C. −127 — датчик не ответил.
getTempC(const uint8_t* address)- Температура по адресу — надёжнее индекса, если датчиков несколько.
getAddress(uint8_t* address, uint8_t i)- Узнать адрес i-го датчика, чтобы потом обращаться по нему.
setResolution(uint8_t bits)- Разрешение 9–12 бит: 9 — шаг 0,5° за 94 мс, 12 — шаг 0,0625° за 750 мс.
setWaitForConversion(bool wait)- false — requestTemperatures() возвращается сразу, результат читают позже.
isConversionComplete()- Готово ли измерение — для варианта без ожидания.
DEVICE_DISCONNECTED_C- Константа −127: столько возвращается, если датчика нет.
Пример
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(2);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
Serial.print("Датчиков: ");
Serial.println(sensors.getDeviceCount());
}
void loop() {
sensors.requestTemperatures();
float t = sensors.getTempCByIndex(0);
if (t == DEVICE_DISCONNECTED_C) {
Serial.println("Датчик не найден");
} else {
Serial.print(t, 2);
Serial.println(" C");
}
delay(1000);
}Резистор 4,7 кОм между данными и питанием обязателен. Без него датчик «находится», но отвечает −127 или 85.
На чём попадаются
Показывает 85,00
Значение по умолчанию после включения: измерение не прошло. Обычно паразитное питание или слишком короткая пауза. Проверьте резистор 4,7 кОм и питание.
Показывает −127
Датчик не отвечает: нет резистора, перепутаны выводы или обрыв. Выводы у DS18B20: плоской стороной к себе — GND, DATA, VDD.
Датчики меняются местами
Индекс зависит от порядка обнаружения. Для нескольких датчиков используйте адреса, полученные через getAddress().
Loop тормозит на 750 мс
requestTemperatures() ждёт измерение. setWaitForConversion(false) плюс проверка isConversionComplete() — и цикл свободен.