Рубрики
Проекты на ESP8266

Подключение датчика температуры DS18B20 к ESP8266

Это подробное руководство по подключению датчика температуры DS18B20 к модулю ESP8266 с использованием Arduino IDE. Мы рассмотрим, как подключить датчик, установить необходимые библиотеки и написать код для получения показаний датчика с одного и нескольких датчиков. Наконец, мы создадим простой веб-сервер для отображения показаний датчика.

В этом уроке мы рассмотрим следующие темы:

  1. Считывание температуры с одного датчика температуры DS18B20;
  2. Считывание температуры с нескольких датчиков температуры DS18B20;
  3. Отображение показаний датчика DS18B20 на веб-сервере.

Также ранее на нашем сайте мы рассматривали подключение датчика температуры DS18B20 к другим микроконтроллерам и платам:

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

  1. Модуль ESP8266 (купить на AliExpress).
  2. Maxim Integrated DS18B20 Programmable Resolution (цифровой датчик температуры DS18B20) (купить на AliExpress).
  3. Резистор 4,7 кОм (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Датчик температуры DS18B20

Датчик  температуры DS18B20  — это однопроводной цифровой датчик температуры. Это означает, что для связи с ESP8266 ему требуется всего одна линия данных (и GND).

Он может питаться от внешнего источника питания или может получать питание от линии передачи данных (так называемый «паразитный режим»), что устраняет необходимость во внешнем источнике питания.

Каждый датчик температуры DS18B20 имеет уникальный 64-битный последовательный код. Это позволяет подключать несколько датчиков к одному и тому же проводу данных. Таким образом, вы можете получать температуру от нескольких датчиков, используя всего один GPIO (контакт ввода/вывода данных).

Датчик температуры DS18B20 также доступен в  водонепроницаемом исполнении.

Ниже приведен краткий обзор наиболее важных характеристик датчика температуры DS18B20:

  • Обмен данными по однопроводной шине.
  • Диапазон напряжения питания: от 3,0 В до 5,5 В.
  • Диапазон рабочих температур: от -55ºC до +125ºC.
  • Точность +/-0,5 ºC (в диапазоне от -10ºC до 85ºC).

Более подробную информацию можно найти в техническом описании DS18B20.

Принципиальная схема подключения DS18B20 к ESP8266

Как упоминалось ранее, датчик температуры DS18B20 может питаться через вывод VDD ( нормальный режим ), или он может получать питание от линии данных (паразитный режим ). Вы можете выбрать любой из режимов.

Режим паразита (Parasite Mode)

Нормальный режим (Normal Mode)

Установка в Arduino IDE библиотек для DS18B20

Мы будем программировать ESP8266 с помощью Arduino IDE, поэтому прежде чем продолжить убедитесь, что у вас установлено дополнение ESP8266.

Для взаимодействия с датчиком температуры DS18B20 вам необходимо установить библиотеку One Wire Пола Стоффрегена и библиотеку Dallas Temperature. Выполните следующие шаги для установки этих библиотек.

1. Откройте Arduino IDE и перейдите в  Sketch  >  Include Library  >  Manage Libraries. Должен открыться менеджер библиотек.

2. Введите «onewire» в поле поиска и установите библиотеку OneWire от Пола Стоффрегена.

3. Затем введите «Dallas» и установите библиотеку Dallas Temperature от Майлза Бертона.

После установки библиотек перезапустите Arduino IDE.

Код программы для подключения одного датчика DS18B20

После установки необходимых библиотек вы можете загрузить следующий код в ESP8266. Код считывает температуру с датчика температуры DS18B20 и отображает показания в последовательном мониторе Arduino IDE.

Существует много разных способов получить температуру от датчиков температуры DS18B20. Однако, если вы используете только один датчик, это один из самых простых и легких способов.

Как работает код

Начните с подключения библиотек OneWire и DallasTemperature.

Создайте экземпляры классов, необходимые для датчика температуры. Датчик температуры подключен к GPIO 4.

В функции setup() инициализируйте последовательный монитор со скоростью передачи данных 115200 бод.

Инициализируйте датчик температуры DS18B20:

Прежде чем измерить температуру, вам нужно вызвать метод requestTemperatures().

Затем получите температуру в градусах Цельсия, используя метод getTempCByIndex() как показано ниже:

Или используйте getTempFByIndex() чтобы получить температуру в градусах Фаренгейта.

Методы getTempCByIndex() и getTempFByIndex() принимают индекс датчика температуры. Поскольку мы используем только один датчик, его индекс равен 0. Если вы хотите считать более одного датчика, вы используете индекс 0 для одного датчика, индекс 1 для другого датчика и так далее.

Наконец, выведите считанные результаты в последовательном мониторе.

Новые показания температуры запрашиваются каждые 5 секунд.

Тестирование работы проекта с одним датчиком DS18B20

После загрузки кода откройте последовательный монитор Arduino IDE на скорости 115200 бод. Вы должны увидеть в нем температуру, отображаемую как в градусах Цельсия, так и в градусах Фаренгейта:

Получение температуры от нескольких датчиков температуры DS18B20

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

Схема

Чтобы считывать температуру с нескольких датчиков, вам просто нужно соединить все линии данных вместе, как показано на следующей принципиальной схеме:

Код программы для нескольких датчиков DS18B20

Затем загрузите следующий код. Он сканирует все устройства на контакте GPIO4 и печатает температуру для каждого из них. Этот скетч основан на примере, предоставленном библиотекой DallasTemperature.

Как работает код

В коде используется несколько полезных методов для обработки нескольких датчиков DS18B20.

Вы используете метод getDeviceCount() для получения количества датчиков DS18B20 на линии данных.

Метод getAddress() находит адреса датчиков:

Адрес уникален для каждого датчика. Таким образом, каждый датчик можно идентифицировать по его адресу.

Затем вы используете метод getTempC(), который принимает в качестве аргумента адрес устройства. С помощью этого метода можно получить температуру с определенного датчика:

Чтобы получить температуру в градусах Фаренгейта, вы можете использовать метод getTempF(). Кроме того, вы можете преобразовать температуру из градусов Цельсия в градусы Фаренгейта следующим образом:

Тестирование работы проекта с несколькими датчиками DS18B20

После загрузки кода откройте последовательный монитор на скорости передачи данных 115200 бод. Вы должны получить показания всех датчиков, как показано ниже:

Отображение показаний температуры DS18B20 на веб-сервере

Для создания веб-сервера мы будем использовать библиотеку ESPAsyncWebServer, которая обеспечивает простой способ создания асинхронного веб-сервера. Создание асинхронного веб-сервера имеет несколько преимуществ. Мы рекомендуем быстро просмотреть документацию библиотеки на ее странице GitHub.

Установка библиотеки ESPAsyncWebServer

Библиотека ESPAsyncWebServer недоступна для установки в менеджере библиотек Arduino IDE. Поэтому вам необходимо установить ее вручную.

Для установки библиотеки ESPAsyncWebServer выполните следующие шаги:

  1. Нажмите здесь, чтобы загрузить библиотеку ESPAsyncWebServer. У вас должна быть папка .zip в папке Downloads.
  2. Распакуйте папку .zip, и вы должны получить  папку ESPAsyncWebServer-master .
  3. Переименуйте вашу папку из ESPAsyncWebServer-мастер в  ESPAsyncWebServer.
  4. Переместите папку ESPAsyncWebServer  в папку с библиотеками установки Arduino IDE.

Установка библиотеки ESPAsync TCP

Библиотека ESPAsyncWebServer требует для работы библиотеки ESPAsyncTCP . Выполните следующие шаги для установки этой библиотеки:

  1. Нажмите здесь, чтобы загрузить библиотеку ESPAsyncTCP. У вас должна быть папка .zip в папке Downloads.
  2. Распакуйте папку .zip и вы должны получить  папку ESPAsyncTCP-master.
  3. Переименуйте вашу папку из ESPAsyncTCP-мастерв ESPAsyncTCP.
  4. Переместите  папку ESPAsyncTCP в папку с библиотеками установки Arduino IDE.
  5. Наконец, снова откройте Arduino IDE.

Код (асинхронный веб-сервер DS18B20)

Откройте Arduino IDE и скопируйте следующий код.

Вставьте свои сетевые учетные данные в следующие переменные, и код сразу же заработает.

Как работает код

В следующих параграфах мы объясним, как работает код.

Импорт библиотек

Сначала импортируйте необходимые библиотеки.

Создание экземпляра датчика DS18B20

Определите GPIO, к которому подключен вывод данных DS18B20. В нашем случае он подключен к GPIO 4 (D1).

Создайте экземпляры, необходимые для инициализации датчика:

Создайте переменные, которые будут хранить температуру и влажность в виде строковых значений:

Мы будем получать новые показания датчиков каждые 30 секунд. Вы можете изменить это в переменной timerDelay.

Настройка сетевых учетных данных

Введите свои сетевые учетные данные в следующие переменные, чтобы ESP8266 мог подключиться к вашей локальной сети.

Создайте объект AsyncWebServer на порту 80.

Функции чтения температуры

Затем мы создаем две функции для считывания температуры.

Функция readDSTemperatureC() возвращает показания в градусах Цельсия.

В случае, если датчик не может получить допустимые показания, он возвращает -127. Таким образом, у нас есть оператор if, который возвращает два тире (–-) в случае, если датчик не может получить показания.

Функция reaDSTemperatureF() работает аналогичным образом, но возвращает показания в градусах Фаренгейта.

Показания возвращаются как строковый тип. Чтобы преобразовать float в строку, используйте функцию String().

Создание веб-страницы

Следующий шаг — создание веб-страницы. HTML и CSS, необходимые для создания веб-страницы, сохраняются в переменной index_html.

В HTML-тексте мы имеем TEMPERATUREC и TEMPERATUREF между знаками %. Это заполнитель для значений температуры.

Это означает, что текст %TEMPERATUREC% — это как переменная, которая будет заменена фактическим значением температуры с датчика. Заполнители в тексте HTML должны находиться между знаками %.

Процессор

Теперь нам нужно создать функцию processor(), которая заменит заполнители в нашем HTML-тексте фактическими значениями температуры.

При запросе веб-страницы мы проверяем, есть ли в HTML-коде какие-либо заполнители. Если он находит заполнитель %TEMPERATUREC%, мы возвращаем температуру в градусах Цельсия, вызывая функцию readDSTemperatureC() созданную ранее.

Если заполнитель — %TEMPERATUREF%, мы возвращаем температуру в градусах Фаренгейта.

setup()

В функции setup() инициализируйте последовательный монитор для целей отладки.

Инициализируйте датчик температуры DS18B20.

Получите текущие значения температуры:

Подключитесь к локальной сети и распечатайте IP-адрес ESP8266.

Наконец, добавьте следующие строки кода для управления веб-сервером.

Когда мы делаем запрос по корневому URL, мы отправляем HTML-текст, который хранится в переменной index_html. Нам также нужно передать функцию processor, которая заменит все заполнители правильными значениями.

Нам нужно добавить два дополнительных обработчика для обновления показаний температуры. Когда мы получаем запрос на  URL /temperature c, нам просто нужно отправить обновленное значение температуры. Это простой текст, и его следует отправлять как символ, поэтому мы используем метод c_str().

Тот же процесс повторяется для температуры в градусах Фаренгейта.

Наконец, мы можем запустить сервер.

В функции loop() мы будем обновлять значения температуры каждые 30 секунд (переменная timerDelay).

Тестирование работы проекта с веб-сервером

После загрузки кода откройте последовательный монитор Arduino IDE на скорости передачи данных 115200 бод. Через несколько секунд должен отобразиться ваш IP-адрес.

В локальной сети откройте браузер и введите IP-адрес ESP8266.

Теперь вы можете видеть температуру в градусах Цельсия и Фаренгейта на вашем веб-сервере. Показания датчика обновляются автоматически без необходимости обновления веб-страницы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *