В качестве датчика измерения температуры в любительской станции используется DS18B20. Рассмотрим, что из себя представляет этот датчик, каким образом его можно подключить к контроллеру, а также приведем пример программы, получающей значение температуры с датчика и выводящего его в последовательный порт.
Описание
Цифровой термометр DS18B20 обеспечивает 9-12-ти битное измерение температуры в градусах Цельсия и имеет функцию сигнализации с энергонезависимой программируемой пользователем верхней и нижней точками срабатывания.

DS18B20 обменивается данными по шине 1-Wire, которой требуется только одна линия данных (и заземление) для связи с контроллером. Кроме того, DS18B20 может получать питание непосредственно от линии передачи данных («паразитное питание»), что устраняет необходимость во внешнем источнике питания. Каждый DS18B20 имеет уникальный 64-битный серийный код, который позволяет нескольким DS18B20 работать на одной и той же шине 1-Wire. Таким образом, можно легко использовать один контроллер для управления несколькими DS18B20.
DS18B20 осуществляет измерение температуры и преобразует полученный результат в цифровой код. Установив количество бит точности от 9 до 12, можно получить разрешающую способность 0,5 °С, 0,25 °С, 0,125 °С и 0,0625 °С.
Характеристики датчика
- Диапазон измерения: -55...+125 °C.
- Точность: ±0.5°C в диапазоне -10... +85°C.
- Разрешающая способность измерения 9... 12 бит.
- Напряжение питания: 3...5.5 В.
- Распиновка : желтый провод (DATA), красный провод (VCC), черный провод (GND).
- Водонепроницаемый корпус из нержавеющей стали.
- Длина кабеля: 1000 мм.
Структурная схема

Подключение датчика к контроллеру
Между линией данных (желтый провод) и питанием (красный провод) необходимо подключить подтягивающий резистор 4,7 кОм. Для удобства подключения к тестовой плате контроллера также подпаиваются коннекторы.

После чего красный провод подключается к пину 3,3V, черный к GND, желтый к IO0 (или GPIO0, или D3, что одно и то же):

Программа получения температуры
Для обмена данными с датчиком используются библиотеки DallasTemperature и OneWire. Достаточно произвести установку первой, вторая подтянется в Arduino IDE как зависимость. Библиотеку подключаем через "Скетч - Подключить библиотеку - Управлять библиотеками". В открывшемся окошке ищем и устанавливаем библиотеку DallasTemperature, соглашаясь на установку необходимых зависимостей.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 0 // Пин подключения OneWire шины, gpio0 (D3)
OneWire oneWire(ONE_WIRE_BUS); // Подключаем бибилиотеку OneWire
DallasTemperature sensors(&oneWire); // Подключаем бибилиотеку DallasTemperature
DeviceAddress temperatureSensors[1]; // Размер массива определяем исходя из количества установленных датчиков
uint8_t deviceCount = 0;
// Функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX); // Выводим адрес датчика в HEX формате
}
}
void setup() {
Serial.begin(115200); // Задаем скорость соединения с последовательным портом
sensors.begin(); // Иницилизируем датчики
deviceCount = sensors.getDeviceCount(); // Получаем количество обнаруженных датчиков
for (uint8_t index = 0; index < deviceCount; index++)
{
sensors.getAddress(temperatureSensors[index], index);
}
}
void loop() {
Serial.println();
sensors.requestTemperatures();
for (int i = 0; i < deviceCount; i++)
{
printAddress(temperatureSensors[i]); // Выводим название датчика
Serial.print(": ");
Serial.println(sensors.getTempC(temperatureSensors[i])); // Выводим температуру с датчика
}
delay(5000);
}
Поскольку на один порт можно подключить несколько датчиков температуры, необходимо задать, какое их количество будет использоваться в данный момент. Это происходит в строке:
DeviceAddress temperatureSensors[1]; // Размер массива определяем исходя из количества установленных датчиков
Где 1 - количество датчиков в схеме.
Прошиваем контроллер и открываем монитор порта.
Пример вывода в порт:
