Как подключить несколько датчиков DS18B20 к ESP8266. Как настроить ESP8266 в качестве веб-сервера для отображения данных температуры. Как реализовать точку доступа WiFi для настройки ESP8266. Какие библиотеки использовать для работы с DS18B20 и ESP8266. Как создать простой веб-интерфейс для отображения температуры на смартфоне.
Обзор проекта: создание многоканального термометра на ESP8266
В этой статье мы рассмотрим, как создать многоканальный термометр на базе популярного WiFi-модуля ESP8266 и цифровых датчиков температуры DS18B20. Наш проект будет включать следующие ключевые компоненты:
- ESP8266 в качестве основного микроконтроллера и веб-сервера
- Несколько датчиков температуры DS18B20
- Веб-интерфейс для отображения данных на смартфоне или компьютере
- Возможность настройки WiFi через точку доступа
Этот проект позволит вам мониторить температуру в нескольких точках и удобно просматривать данные через веб-браузер. Давайте рассмотрим каждый этап реализации подробнее.

Подготовка среды разработки Arduino IDE для ESP8266
Первым шагом в нашем проекте будет настройка среды разработки Arduino IDE для работы с ESP8266. Это позволит нам программировать модуль на знакомом языке Arduino.
- Установите последнюю версию Arduino IDE с официального сайта.
- Откройте Arduino IDE и перейдите в «Файл» -> «Настройки».
- В поле «Дополнительные ссылки для Менеджера плат» добавьте следующую ссылку:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Перейдите в «Инструменты» -> «Плата» -> «Менеджер плат».
- Найдите «esp8266» и установите последнюю версию.
После установки вы сможете выбрать вашу модель ESP8266 в меню «Инструменты» -> «Плата». Для проверки установки загрузите простой скетч «Blink» и убедитесь, что он работает на вашем модуле.
Подключение датчиков DS18B20 к ESP8266
Теперь давайте разберемся, как правильно подключить несколько датчиков DS18B20 к ESP8266. DS18B20 использует интерфейс 1-Wire, что позволяет подключить несколько датчиков к одному пину микроконтроллера.

Схема подключения
- VCC датчиков подключается к 3.3V ESP8266
- GND датчиков подключается к GND ESP8266
- Сигнальный провод всех датчиков (DQ) подключается к одному GPIO пину ESP8266 (например, GPIO2)
- Между VCC и сигнальным проводом необходимо установить подтягивающий резистор 4.7 кОм
Такая схема позволяет подключить до 10-20 датчиков на одной линии. Каждый датчик DS18B20 имеет уникальный 64-битный адрес, что позволяет микроконтроллеру различать их.
Настройка программной точки доступа WiFi на ESP8266
Одной из удобных функций нашего устройства будет возможность настройки WiFi через точку доступа. Это позволит легко подключить ESP8266 к домашней сети без необходимости перепрограммирования.
Для реализации этой функции мы будем использовать библиотеку WiFiManager. Вот основные шаги:
- Установите библиотеку WiFiManager через менеджер библиотек Arduino IDE.
- В начале скетча добавьте:
#include <WiFiManager.h>
- В функции setup() инициализируйте WiFiManager:
WiFiManager wifiManager; wifiManager.autoConnect("ESP8266_AP");
При первом запуске ESP8266 создаст точку доступа с названием «ESP8266_AP». Подключившись к ней через смартфон, вы сможете указать параметры вашей домашней WiFi сети.

Реализация веб-сервера на ESP8266 для отображения данных
Следующим шагом будет создание простого веб-сервера на ESP8266, который будет отображать данные с датчиков температуры. Мы будем использовать встроенную библиотеку ESP8266WebServer.
Вот основные шаги для реализации веб-сервера:
- Добавьте в начало скетча:
#include <ESP8266WebServer.h> ESP8266WebServer server(80);
- В функции setup() настройте сервер:
server.on("/", handleRoot); server.begin();
- Создайте функцию handleRoot() для генерации HTML-страницы с данными:
void handleRoot() { String html = ""; html += ""; html += ""; html += ""; html += "
Температура
"; // Здесь добавьте код для чтения и отображения данных с датчиков html += ""; server.send(200, "text/html", html); } - В функции loop() добавьте:
server.handleClient();
Этот код создаст простую веб-страницу, которая будет обновляться каждые 5 секунд и отображать текущие показания температуры.
Работа с несколькими датчиками DS18B20
Теперь рассмотрим, как работать с несколькими датчиками DS18B20 в нашем проекте. Для этого мы будем использовать библиотеки OneWire и DallasTemperature.

Вот основные шаги:
- Установите библиотеки OneWire и DallasTemperature через менеджер библиотек Arduino IDE.
- Добавьте в начало скетча:
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // GPIO2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire);
- В функции setup() инициализируйте датчики:
sensors.begin();
- Для чтения температуры с датчиков используйте:
sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); // Для первого датчика
Этот код позволит вам работать с несколькими датчиками DS18B20, подключенными к одному пину ESP8266.
Оптимизация потребления энергии ESP8266
При работе с батарейным питанием важно оптимизировать энергопотребление ESP8266. Вот несколько советов по снижению энергопотребления:
- Используйте режим глубокого сна (deep sleep) между измерениями.
- Отключайте WiFi, когда он не нужен.
- Уменьшите частоту обновления данных.
- Используйте режим light sleep во время ожидания.
Вот пример использования режима глубокого сна:

void goToSleep() {
ESP.deepSleep(60e6); // Сон на 60 секунд
}
Добавьте эту функцию в конец loop() для перехода в режим сна после каждого цикла измерений и отправки данных.
Расширение функциональности: логирование данных и уведомления
Для дальнейшего улучшения нашего проекта можно добавить функции логирования данных и отправки уведомлений. Вот несколько идей:
- Сохранение данных на SD-карту для долгосрочного хранения.
- Отправка данных на облачный сервис, например ThingSpeak или Blynk.
- Настройка отправки уведомлений по электронной почте или через Telegram при превышении определенных пороговых значений температуры.
Для реализации этих функций вам потребуется дополнительное оборудование (например, модуль SD-карты) и соответствующие библиотеки.
Создание пользовательского интерфейса для мобильных устройств
Чтобы сделать наш проект более удобным для использования на мобильных устройствах, можно улучшить веб-интерфейс. Вот несколько советов:
- Используйте адаптивный дизайн с помощью CSS.
- Добавьте графики для визуализации изменения температуры во времени.
- Реализуйте возможность настройки параметров (например, частоты измерений) через веб-интерфейс.
Вот пример простого CSS для адаптивного дизайна:

<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
@media (max-width: 600px) {
body {
padding: 10px;
}
}
</style>
Добавьте этот код в секцию <head> вашей HTML-страницы для улучшения отображения на мобильных устройствах.
WiFi-IoT Firmware Builder :: DS18B20 1-wire
JavaScript должен быть разрешён чтобы использовать данный сайт
DS18B20 1-wire
(обновлено: 04 Jan 2022, 19:03:49)Поддержка шины 1-wire для всех типов датчиков температуры DS18B20, DS1820, DS18S20.
Необходимо просканировать датчики на вкладке
1-wire для того чтобы они появились в модуле, если в шестеренке установлено количество 1 датчик, то вкладки сканирования датчиков не доступна( не требуется). На этой же странице можно отсортировать датчики в нужном порядке, а так же посмотреть на какой битности настроены датчики.В бесплатном режиме доступен только один датчик.
На RTOS прошивках надежная работа опции без использования режима RMT(ESP32/ESP32S2) или DS2482 не гарантирована .
При использовании программного PWM или VirtualWire на ESP8266 возможны ошибки чтения датчиков (не касается при использовании DS2482).
Обратите внимание, что примерно с 2018 в продаже на Али часто попадаются поддельные датчики, которые не работают корректно на двухпроводной линии, имеют низкую точность и возможны и другие глюки. Меньше всего с ними проблем при использовании режима подключения одного датчика(без сканирования)
Подключение датчиков
Датчики подключаются параллельно. Доступно подключение до 10 датчиков с возможностью расширения до 20 датчиков с предварительной установкой количества в шестеренке. При установке одного датчика функции поиска сканирования не предусмотрено
Питание датчикам рекомендуются подключать 5 вольт. Так же необходимо подключить резистор подтяжки 1.5кОм…4.7кОм (в зависимости от напряжения питания и количества датчиков) между входом/выходом DATA (DQ) датчика и шиной питания 3.3 вольт.
Использование RMT режима на ESP32/ESP32S2/ESP32C3
Экспериментальная опция , использующая аппаратное генерирование и чтение импульсов для надежного и стабильного чтения датчиков. Доступно только на модулях ESP32 и ESP32S2. Включается в шестеренке опции , выключена по умолчанию. Может быть несовместимость работы с другими RMT опциями: WS2812 , IR приемник, IR передатчик.
Подключение датчиков на Linux
Если в ОС имеется поддержка 1wire в sysfs , то датчики считываются по пути /sys/bus/w1/devices/ИД_датчика .
Для включения возможности работы с 1wire в Raspberry требуется войти в конфигуратор используя команду sudo raspi-config и активировать 1wire. На других устройствах включается согласно их документации.
Подключение датчиков через микросхему DS2482 через I2C
Опция работы 1wire через микросхему DS2482-100, подключаемую через I2C (адрес 0x18). Опция позволяет добиться более надежной работы с шиной 1wire , особенно актуально это на RTOS прошивках и на больших линиях при установленном транзисторе на PCTLZ (смотрите схему ниже). Возможно и классическое подключение датчиков к выводу IO микросхемы с подтягивающим резистором. Еще микросхема позволяет экономить один GPIO на М/К , если I2C уже и так используется
Настройка GPIO для подключения датчика 18b20.
Переходим на вкладку «Hardware» и там ставим галку в окне «Enable DS18B20», после чего выбираем нужный GPIO.
Если датчик подключен правильно и он рабочий — то на вкладке «1-wire» после сканирования появится адрес датчика.
Смена битности датчиков
Можно поменять битность через GET команды http://[ip_adr]/config1wire?all=X — все датчики или один — http://[ip_adr]/config1wire?set=Y&bits=X, где Y- номер датчика, X — битность 9..12.
Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$ / Хабр
В последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.
Hardware
ESP8266
Для проекта пойдет любой из модулей от ESP-01 до ESP-11, у меня были ESP-03 (стоимость ~ $3):
Особенно приглянулись:
ESP-01 — удобен для прототипирования (есть разъем под макетку), но выведен всего 1 GPIO;
ESP-03 — много выводов, плюс керамическая антенна;
ESP-07 — то же самое что и ESP-03 + экран и разъем под внешнюю антенну.
DS18B20
Как вариант, можно купить уже с проводом и в герметичном корпусе.
Питание 3.3В
Необходим источник питания как минимум на 200мА.
USB-UART
Для прошивки и отладки. Я использовал преобразователь на основе CP2102
Подключение
Подключаем питание на ESP8266. На ногу CH_PD так же подаем плюс.
Внимание! У кого модули не ESP-01, необходимо подать GPIO15 — GND; GPIO2 -3.3V. У ESP-01 это уже сделано. RX и TX подключаем к USB-UART преобразователю для прошивки и отладки кода:
Подключаем DS18B20 к ESP8266. Если смотреть на маркировку: левая — земля, средняя — сигнал (GPIO12 на ESP-03), если у вас ESP-01, подключайте к GPIO0, правая — питание(3.3V). Между питанием и сигнальной линией желательно подключить резистор 4.7 кОм (у меня работает и с 10 кОм):
thingspeak.com
Регистрируемся на thingspeak.com, создаем канал, копируем оттуда 16-символьный ключ. Он нам пригодится для отправки данных о температуре в облако.
Прошивка NodeMCU
NodeMCU — это прошивка, позволяющая запускать Lua скрипты на ESP8266. Качаем последний NodeMCU Flasher и запускаем его.
Подключаем GPIO0 на землю. Выбираем нужный COM порт и скорость 74880 или 115200 (как я понимаю, у некоторых версий ESP8266 бутлоадер работает на 74880). Нажимаем Flash и передергиваем питание на ESP8266. Если прошивка не запускается, проверяем корректность подключения RX,TX, запустив PuTTY на скорости 74880. В момент подачи питания в консоль должна валится строка вроде «ets Jan 8 2013,rst cause:1, boot mode:(1,0)«. После корректной прошивки отключаем GPIO0 от земли:
Заливка Lua скриптов и запуск
Скачиваем и запускаем LuaLoader. Выбираем COM-порт и скорость 9600, если нет соединения — пробуем передернуть питание у модуля ESP8266. Проверяем соединение, нажав на кнопку
= node.chipid() 10371968
Заливаем нужные файлы (кнопка UploadFile):
1. ds18b20.lua — библиотека для взаимодействия с DS18B20;
2. httpsender.lua — наш скрипт, читающий данные температуры и отправляющий их на thingspeak.com. Не забываем заменить YOURAPIKEY на свой ключ.
gpio=6 — в случае подключения датчика к GPIO12, в случае GPIO0 — gpio=3 (таблица):
gpio = 6 require('ds18b20') ds18b20.setup(gpio) function sendData() t=ds18b20.read() print("Temp:"..t.." C\n") -- conection to thingspeak.com print("Sending data to thingspeak.com") conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) print(payload) end) -- api.thingspeak.com 184.106.153.149 conn:connect(80,'184.106.153.149') conn:send("GET /update?key=YOURAPIKEY&field1="..t.." HTTP/1.1\r\n") conn:send("Host: api.thingspeak.com\r\n") conn:send("Accept: */*\r\n") conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n") conn:send("\r\n") conn:on("sent",function(conn) print("Closing connection") conn:close() end) conn:on("disconnection", function(conn) print("Got disconnection...") end) end -- send data every 60000 ms to thing speak tmr.alarm(0, 60000, 1, function() sendData() end )
3. init.lua — скрипт инициализирующий WiFi и запускающий httpsender.lua. Не забываем прописать свои SSID и пароль для WiFi:
print("Setting up WIFI...") wifi.setmode(wifi.STATION) --modify according your wireless router settings wifi.sta.config("SSID","SSIDPASSWD") wifi.sta.connect() tmr.alarm(1, 1000, 1, function() if wifi.sta.getip()== nil then print("IP unavaiable, Waiting...") else tmr.stop(1) print("Config done, IP is "..wifi.sta.getip()) dofile("httpsender.lua") end
Итог:
Планы
Это первый опыт работы с ESP8266. В планах попробовать следующее:
1. Найти альтернативу thingspeak. Графики хочется двигать и масштабировать. Может, кто-то знает аналоги?
2. Датчик влажности (возможно, DHT22). Вроде уже есть в стандартных библиотеках.
3. Датчик CO2 на основе датчика K-30.
4. Управляемый рассвет без дополнительного контроллера, управление с ESP8266. Вдохновила публикация «Искусственный рассвет».
Используемые материалы
За основу взят текст «Low cost WIFI temperature (DS18B20) data logger based on ESP8266 with connectivity to thingspeak. com». Код для DS18B20 почему-то отказался работать, пришлось перейти на стандартную библиотеку ds18b20.lua.
ESP8266 Temp Sensor Monitor Lab Notes
Недавно я настроил ESP8266 для мониторинга 3 датчиков температуры Dallas DS18B20 и работы в качестве веб-сервера для просмотра данных на смартфоне.
Это был эксперимент, чтобы попробовать несколько вещей:
- Как я могу подключиться к ESP8266 через свой телефон, чтобы назначить его моей сети WIFI.
- Как я могу прочитать несколько датчиков температуры
- Как я могу предоставить данные через веб-сайт, читаемый с телефона
Это первый раз, когда я играю с оборудованием IoT за пару лет. Я обнаружил, что стало намного проще находить и устанавливать библиотеки, и эти библиотеки просто работают. Раньше все это было ерундой и требовало гораздо больше работы. Получившаяся программа для этого проекта на самом деле просто склеивает библиотеки, которые выполняют всю тяжелую работу.
Этот пост в блоге является кратким изложением тех экспериментов, которые позволили получить рабочий маленький монитор:
Ресурсы
Вот основные веб-сайты, которые я использовал при разработке этого программного обеспечения:
Библиотека TCP:
https://arduino-esp8266. readthedocs.io/en/latest/esp8266wifi/readme.html
Примеры программных точек доступа:
https://arduino-esp8266.readthedocs.io/en/latest /esp8266wifi/soft-access-point-examples.html
Примеры Arduino WIFI:
https://42bots.com/tutorials/esp8266-wifi-tutorial-arduino-ide/
Подключение нескольких датчиков к Arduino:
https: //lastminuteengineers.com/multiple-ds18b20-arduino-tutorial/
Охватывает установку библиотек в esp8266, чтение одного датчика, чтение нескольких датчиков
https://randomnerdtutorials.com/esp8266-ds18b20-temperature-sensor-web-server-with-arduino-ide/
WDT:
https://techtutorialsx.com/2017/01/21/esp8266-watchdog- functions/
Программирование ESP8266 с помощью Arduino IDE
В этих инструкциях обсуждается запуск Arduino IDE для ESP8266:
https://dzone.com/articles/programming-the-esp8266-with-the-arduino-ide-in -3
После этого я скомпилировал и загрузил стандартную программу мигания в свой NodeMCU (0. 9) для проверки подключения.
Настройка программной точки доступа
Моя первая цель состояла в том, чтобы разрешить настройку WIFI-соединения ESP8266 с моей локальной сетью с помощью моего телефона, что сейчас является распространенным методом работы с такими устройствами.
Я предполагал, что мне придется писать довольно много кода. Неправда, в итоге есть библиотека, которая полностью обрабатывает процесс. После вызова wifiManager.resetSettings ваш ESP8266 подключается к локальной сети. Он обрабатывает все для вас.
Основным ресурсом, который я использовал, чтобы понять это, является
https://www.digikey.com/en/maker/blogs/2017/configure-your-esp8266-wifi-module-with-new-wifi-manager
, который использует код из этой библиотеки git
https://github.com/tzapu/WiFiManager
Создание веб-сервера
Веб-серверы Arduino не являются чем-то новым, и я сам создал несколько. Я настроил тестовый сервер, используя инструкции с
https://randomnerdtutorials.com/esp8266-web-server/
При создании HTML-кода для этого сервера сначала на моем телефоне все отображалось маленьким. Я хотел, чтобы он заполнил телефон. Я обнаружил, что следующий HTML-код решил эту проблему:
Кроме того, я хотел, чтобы контент обновлялся каждые 15 секунд, поэтому мне также потребовалось:
Чтение нескольких датчиков температуры Dallas DS18B20
После того, как у меня был работающий веб-сервер, который выполнял форматирование, следующим шагом было подключение нескольких датчиков и их считывание.
В первую очередь я использовал этот ресурс для правильной проводки:
https://lastminuteengineers.com/multiple-ds18b20-arduino-tutorial/
Моя схема выглядит следующим образом:
После настройки оборудования я установил Библиотеки датчиков температуры OneWire и Dallas, как описано здесь:
Руководство для датчика температуры DS18B20 с Arduino
После того, как код для датчиков температуры был запущен, я также объединил его с окончательным кодом проекта.
Окончательный код можно найти здесь:
http://www.xyfyx.com/files/esp8266-tempSensorMonitor.zip
Вот так:
Нравится Загрузка…
DS18B20 Цифровой датчик температуры 92)
Amazon.com — 10 цифровых датчиков температуры DS18B20
$13,88 в наличии
КУПИТЬ
Amazon.com
по состоянию на 9 декабря 2022 г., 23:59
Прокрутите страницу вниз, чтобы сравнить цену датчика температуры DS18B20 в разных магазинах.
Родственный: DS18B20 водонепроницаемая версия
eBay — 1x цифровой датчик температуры DS18B20
eBay — 1 цифровой датчик температуры DS18B20
0,82 $
в наличии
КУПИТЬ
eBay
Amazon.de — 10 цифровых датчиков температуры DS18B20
Amazon.de — Цифровой датчик температуры DS18B20, 10 шт.0126
КУПИТЬ
Amazon.de
Banggood — 10x цифровой датчик температуры DS18B20
Banggood — 10 цифровых датчиков температуры DS18B20
10,66 $
КУПИТЬ
Banggood.com
Amazon.es — 10x DS18B20 Цифровой датчик температуры
Amazon.es — 10 цифровых датчиков температуры DS18B20
10,49 €
по состоянию на 9 декабря 2022 г., 23:59 Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply to the purchase of this product.»/>
КУПИТЬ
Amazon.es
Amazon.com — 10 цифровых датчиков температуры DS18B20
Amazon.com — Цифровой датчик температуры DS18B20, 10 шт.0125 Amazon.com
Amazon.co.uk — 10 цифровых датчиков температуры DS18B20
Amazon.co.uk — 10x DS18B20 Цифровой датчик температуры
£ 12,32
в складе
7 Новый от £ 12,32
По состоянию на 9 декабря 2022 г. 23:59