Терморегулятор на ESP8266 (Термостат)

Сегодня расскажу как с помощью модуля NodeMCU (ESP8266), реле и датчика DS18B20 сделать простой терморегулятор, для поддержания заданной температуры в помещении.

Необходимые детали:
► Контроллер NodeMCU v.2 (ESP8266) x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
► Датчик температуры DS18B20 x 1 шт.
► Модуль реле 2-х канальный x 1 шт.

Описание.
Алгоритм программы прост, c помощью NodeMCU считываем температуру с датчика DS18B20 и полученные данные отображаем на WEB сервере. Так же, на WEB есть дополнительное поле, где можем задать температуру выключения реле, по сути получаем терморегулятор, для обогрева (можно сделать для охлаждения помещения, смотрите описание скетча). Все данные сохраняются в EEPROM.

Подключение.
В данном примере используется контроллер NodeMCU v.2 (ESP8266), двух канальное реле и датчик DS18B20. Подключение датчика DS18B20 осуществляется по интерфейсу 1-Wire (однопроводной линии), который подключаемся к модулю NodeMCU (вывод GPIO4), так-же, для работы интерфейса 1-Wire необходим подтягивающий резистор на 4.7 кОм. Далее подключаем двух канальное реле, вывод IN1 к модулю NodeMCU (вывод GPIO2), вывод GND и VCC подключаем к выводам VCC и GND на модуль NodeMCU.

Установка библиотеки:
В данном примере используем сторонние библиотеки «ESPAsyncTCP», «ESPAsyncWebServer» «DallasTemperature» скачать их можно в конце статьи. Так же, не забываем что необходимо установить NodeMCU в среду разработки Arduino IDE, для этого воспользуйтесь этой статьей. После установки библиотек перезапустите, среду разработки Arduino IDE.

Программа:
Теперь, у нас все готово, копируем скетч в Arduino IDE или скачайте готовый файл и загружаем его в NodeMCU, незабываем указать свои данные сети. 

  Скачать скетч

Определение IP (ESP8266):
В примере используется статический IP, но можно убрать строчки 13,14 и 15 и получим динамический IP. Чтобы узнать какой у NoDEMCU IP, откроем мониторинг порта с выставленной скоростью «115200», в моем случаи сеть выдала «192.168.2.110».

Открываем любой браузер (компьютер должен находиться в той же сети, что и ESP8266 модуль), вводим IP-адрес (192.168.2.110) и нажимаем Enter.

Ссылки:
 Библиотека ESPAsyncTCP
  Библиотека ESPAsyncWebServer
  Библиотека DallasTemperature
  Библиотека OneWire v.2.2

Купить на Aliexpress
  Плата NodeMCU V2
  Провода DuPont, 2,54 мм, 20 см
  Модуль реле 2-х канальный
  Датчик температуры DS18b20

16 комментариев для “Терморегулятор на ESP8266 (Термостат)”
  1. не работает
    зашилось норм
    температуру показывает , но реле переключает только когда отключить двтчик и показания будут -127

    1. Доброго дня. проблема в записи и чтении в еепром. если вместо него подставить простую переменную, то все работает.

    2. на самом деле достаточно строку «EEPROM.get(0, inputMessage);» из основного цикла переместить в «setup». и все заработало.

  2. Уважаемый СЕРГЕЙ! Прошу уточнить, как сделать переключение на нагрев. Для «чайника» 🙂

    1. Здравствуйте, поменяйте в строке 123 на if(temperature > inputMessage.toFloat()) и 129 else if(temperature < inputMessage.toFloat())

  3. Добрый день.
    Собрал термостат по этой схеме. Обнаружил некоторую странность. У меня он работает только в том случае, если удается установить связь с точкой доступа по Wi-Fi. А если связи нет, то и реле не переключается Возникает вопрос, так должно быть?! Я ожидал, что через сеть я буду только конфигурировать значение уставки и наблюдать (при необходимости) измеренное значение. А как быть в случае автономной работы? Я хочу увезти его в деревню, где нет сети, но надо, чтобы он продолжал работать по уставке, которая хранится в его памяти. Буду благодарен за Ваш ответ.

    1. Здравствуйте, можно попробовать удалить строк проверки подключении к вай фай сети

  4. Очень интересный и нужный проект, Спасибо.
    Тут нет никакой ошибки ?
    const int output = 4; // Вывод GPIO куда подключено реле
    const int oneWireBus = 2; // Вывод GPIO куда подключен DS18B20

    Ведь реле подключается на 2й контакт, или я не так схему понял ?….
    Промучался весь вечер с Wi-Fi ESP8266 NodeMCU V3, не конектится к Wi-fi. надеюсь с ESP 32 всё получится запустить.

  5. Добрый день, если кто знает как можно сделать, так что бы достигая определенной температуры реле выключалось.

  6. Работает штука . Но ставить на что то ответственное нельзя , так как качество этих китайских комплектующих с алиэкспрес очень низкое и за стабильность ручаться не приходится . Сделал жене инкубатор для цыплят все работало хорошо а осталось 2 дня до вылупления какой то сбой произошел , перегрел яйца , хотя сам работает по прежнему . Сами понимаете слезы рекой . Безделушки это все не стабильные.

  7. Добрый день! Скетч заработал, только изменение температуры видно если каждый раз обновлять страницу. Можно ли видеть текущую температуру не обновляя каждый раз страницу?

  8. const int output = 4; // Вывод GPIO куда подключено реле
    const int oneWireBus = 2; // Вывод GPIO куда подключен DS18B20
    Однозначно ошибка

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

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