Ds18b20 подключение к esp8266 arduino ide

Обновлено: 07.07.2024

Вы когда-нибудь хотели, чтобы датчики были разбросаны по всему дому и саду, регулярно сообщая о своей температуре на центральный сервер? Тогда этот IoT проект может стать для вас хорошей отправной точкой!

Отображение показаний с нескольких DS18B20 с помощью веб-сервера на ESP8266 NodeMCU

Отображение показаний с нескольких DS18B20 с помощью веб-сервера на ESP8266 NodeMCU

В этом проекте NodeMCU ESP8266 используется в качестве устройства управления, которое легко подключается к существующей сети Wi-Fi и создает веб-сервер. Когда любое подключенное устройство обращается к этому веб-серверу, ESP8266 считывает температуру с нескольких датчиков температуры DS18B20 и отправляет эти показания веб-браузеру подключенного устройства, выводя их в приятном интерфейсе. Интересно? Давайте начнем!

Несколько датчиков DS18B20 на одной шине

Одна из важнейших особенностей DS18B20 заключается в том, что на одной шине 1-Wire могут сосуществовать несколько DS18B20. Поскольку каждый DS18B20 имеет уникальный 64-битный серийный номер, записанный на заводе, их легко отличить друг от друга.

Эта особенность может быть огромным преимуществом, если вы хотите контролировать множество датчиков DS18B20, распределенных по большой площади. В данном руководстве мы это и сделаем.

Подключение нескольких датчиков DS18B20 ESP8266 NodeMCU

Подключить датчики DS18B20 к ESP8266 NodeMCU довольно просто.

Рисунок 1 Распиновка датчика температуры DS18B20 в корпусе TO-92 и в водонепроницаемом корпусе

Рисунок 1 – Распиновка датчика температуры DS18B20 в корпусе TO-92 и в водонепроницаемом корпусе

Начните с параллельного соединения всех датчиков DS18B20, то есть соединения всех выводов GND, затем всех выводов VDD, и последнее, всех сигнальных выводов. Затем подключите VDD к выходу 3.3V на NodeMCU, GND – к GND на NodeMCU, и сигнальных выводов к цифровому выводу D2 на ESP8266 NodeMCU.

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

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

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

Подготовка IDE Arduino

Существует дополнение для Arduino IDE, которое позволяет программировать ESP8266 NodeMCU. Чтобы подготовить вашу Arduino IDE к работе с ESP8266, следуйте инструкциям, приведенным ниже.

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

Протокол Dallas 1-Wire несколько сложен и требует много кода для парсинга связи. Чтобы скрыть эту ненужную сложность, мы установим библиотеку DallasTemperature.h, чтобы мы могли выполнять простые команды для получения показаний температуры от датчика.

Чтобы установить библиотеку, перейдите в раздел «Скетч»→ «Подключить библиотеку» → «Управление библиотеками…». Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.

Чтобы отфильтровать результаты поиска, введите «ds18b20». Там должна быть пара записей. Ищите DallasTemperature от Miles Burton. Нажмите на эту запись, а затем выберите Установка.

Рисунок 3 Установка библиотеки DallasTemperature в Arduino IDE

Рисунок 3 – Установка библиотеки DallasTemperature в Arduino IDE

Эта библиотека DallasTemperature является аппаратно-зависимой библиотекой, которая обрабатывает функции более низкого уровня. Она должна быть связана с библиотекой OneWire для связи с любым устройством 1-Wire, а не только с DS18B20. Установите и эту библиотеку.

Рисунок 4 Установка библиотеки OneWire в Arduino IDE

Рисунок 4 – Установка библиотеки OneWire в Arduino IDE

Поиск адресов DS18B20 в шине

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

Следующий скетч обнаруживает все датчики DS18B20, присутствующие на шине, и выводит их адреса на шине 1-Wire в монитор последовательного порта.

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

Теперь откройте монитор последовательного порта. У вас должно получиться примерно следующее.

Рисунок 5 Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

Рисунок 5 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

Скопируйте все адреса по мере необходимости в следующий скетч.

Создание веб-сервера NodeMCU ESP8266, используя Wi-Fi режим Station (STA)

Теперь мы собираемся настроить ESP8266 в режим станции (STA) и создать веб-сервер для выдачи веб-страниц любому подключенному клиента в существующей сети.

Если вы хотите узнать о создании веб-сервера с ESP8266 NodeMCU в режиме AP/STA, ознакомьтесь с этим руководством:

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

Чтобы ESP8266 NodeMCU мог установить соединение с существующей сетью, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.

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

После внесения этих изменений, попробуйте загрузить скетч.

Доступ к веб-серверу

Рисунок 6 Монитор последовательного порта сервер запущен

Рисунок 6 – Монитор последовательного порта – сервер запущен

Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуры со всех датчиков DS18B20.

Рисунок 7 Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (без CSS)

Рисунок 7 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (без CSS)

Подробное объяснение кода

Скетч начинается с включения следующих библиотек:

Затем мы создаем объекты, необходимые для датчика температуры, и переменные для хранения показаний температуры. Датчик температуры подключен к GPIO D2.

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

Поскольку мы настраиваем ESP8266 в режиме станции (STA), он подключится к существующей сети Wi-Fi. Следовательно, нам необходимо предоставить ему SSID и пароль вашей сети. Затем мы запускаем веб-сервер на порту 80.

Внутренности функции setup()

Теперь нам нужно подключиться к сети Wi-Fi с помощью функции WiFi.begin() . Данная функция принимает в качестве параметров SSID (имя сети) и пароль.

Пока ESP8266 пытается подключиться к сети, мы проверяем статус подключения с помощью функции WiFi.status() .

После подключения ESP8266 к сети скетч выводит IP-адрес, назначенный ESP8266, напечатав значение результата метода WiFi.localIP() в монитор последовательного порта.

Теперь, чтобы запустить сервер, вызываем метод begin() для объекта server .

Внутренности функции loop()

Далее нам нужно создать функцию, которую мы прикрепили к корневому (/) URL с помощью server.on() . Помните?

Точно так же нам нужно создать функцию для обработки страницы ошибки 404.

Отображение веб-страницы HTML

Функция SendHTML() отвечает за создание веб-страницы всякий раз, когда веб-сервер ESP8266 получает запрос от веб-клиента. Она просто объединяет HTML-код в большую строку и возвращает ее в функцию server.send() , которую мы обсуждали ранее. Данная функция в качестве параметров для динамического генерирования HTML контента принимает значения температур.

Первый текст, который вы всегда должны отправлять, – это объявление <!DOCTYPE> , которое указывает, что мы отправляем HTML-код.

Затем <meta> элемент viewport делает веб-страницу адаптивной в любом веб-браузере. Далее тег title устанавливает заголовок страницы.

Стилизация веб-страницы

Далее идет немного CSS кода для стилизации внешнего вида веб-страницы. Мы выбираем шрифт Helvetica, определяем контент, который будет отображаться в виде inline-block и выровнен по центру.

Следующий код устанавливает цвет, шрифт и поля вокруг элементов body , H1 , H3 и p .

Установка заголовка веб-страницы

Далее устанавливаем заголовок на веб-странице; вы можете изменить этот текст на то, что подходит для вашего приложения.

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

Чтобы динамически отображать показания температуры, мы помещаем эти значения в теги параграфов. Для отображения символа градуса мы используем сущность HTML &deg; .

Стилизация веб-страницы, чтобы она выглядела более профессионально

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

Рисунок 8 Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (с CSS)

Рисунок 8 – Показания с нескольких датчиков DS18B20 на странице веб-сервера ESP8266 (с CSS)

Довольно красиво, правда? Давайте без лишних слов, применим стиль к нашей предыдущей HTML-странице. Для начала скопируйте и вставьте приведенный ниже код, чтобы заменить в приведенном выше скетче функцию SendHTML() .

Если вы попытаетесь сравнить эту функцию с предыдущей, то увидите, что они похожи, за исключением следующих изменений.

На нашей веб-странице мы будем использовать шрифт Open Sans от Google. Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету.

Иконки, используемые для отображения показаний температуры, на самом деле является масштабируемой векторной графикой (SVG), определенной в теге <svg> . Создание SVG не требует каких-либо специальных навыков программирования. Для создания графики для вашей страницы вы можете использовать любой редактор SVG. Мы использовали эти иконки SVG.

Рисунок 9 SVG иконки

Рисунок 9 – SVG иконки

Улучшение кода - автоматическое обновление страницы

Одно из улучшений, которое вы можете сделать с нашим кодом, – это автоматическое обновление страницы для обновления показаний датчиков.

Добавив один мета-тег в ваш HTML-документ, вы можете дать браузеру команду автоматически перезагружать страницу с заданным интервалом.

Поместите этот код в тег <head> вашего документа, и этот мета-тег укажет браузеру обновлять страницу каждые две секунды. Довольно изящно!

Динамическая загрузка данных датчиков с помощью AJAX

Если ваша веб-страница много весит, то полное ее обновление не слишком практично. Лучше использовать асинхронный Javascript и Xml (AJAX), чтобы мы могли запрашивать данные с сервера асинхронно (в фоновом режиме), не обновляя страницу.

  • запрашивать данные с сервера после загрузки страницы;
  • получать данные с сервера после загрузки страницы;
  • отправлять данные на сервер в фоновом режиме.

Ниже приведен скрипт AJAX, который мы будем использовать. Поместите этот скрипт непосредственно перед закрывающим тегом </head> .

Скрипт начинается с тега <script> , так как AJAX-скрипт – это не что иное, как javascript, и поэтому нужно писать его в теге <script> . Чтобы данная функция вызывалась повторно, мы будем использовать функцию javascript setInterval() . Она принимает два параметра: функцию для выполнения и интервал времени (в миллисекундах), через который выполнять указанную функцию.

  • 0: запрос не инициализирован;
  • 1: установлено подключение к серверу;
  • 2: запрос получен;
  • 3: обработка запроса;
  • 4: запрос завершен, и ответ готов.
  • 200: OK;
  • 403: запрещено;
  • 404: страница не найдена.

Когда readyState равен 4, а status – 200, ответ готов. Теперь обновляется содержимое элемента body (содержащего значения температуры).



У меня ESP-01 – у которого только два управляемых выхода – GPIO 0 и GPIO 2:




2. Нужно:
1. Модуль ESP8266 (ESP-01);
2. Датчик температуры DS18B20;
3. USB-UART-TTL адаптер – например CР2102 (+драйвер);
4. Резистор 4,7 кОм;
5. Провода мама – мама/папа;
6. Изолента/термоусадка;

Для этого нужно:
1. Зайти в меню «Файл» — выбрать «Настройки».



3. Зайти в меню «Инструменты» в «Плата:…» — выбрать «Менеджер плат…».


4. В закладке «Менеджер плат» нужно найти нужную прошивку — в поле указать например esp8266 – в окне высветится нужная прошивка.


5. Установить выбранную прошивку «esp8266» – щелкнуть на поле с прошивкой – появится кнопка «Установить» — нажать. Установка займет некоторое время – будет скачивать около 153 Мб.
6. После завершения установки в меню «Инструменты» в закладке «Плата:…» ниже перечня плат Arduino появится новые платы – «ESP8266 Modules».


7. Выбрать нужный модуль – в общем случае это «Generic ESP8266 Module».



Схема подключения обычная да UART, за исключением двух особенностей:
1. Для включения модуля нужно подать +3,3В на вывод модуля CH_PD. Я припаял перемычку с VCC.
2. На время загрузки скетча необходимо подать «минус» на вывод модуля GPIO 0.


Если речь идет о настройке/отладки нескольких модулей имеет смысл сделать специальный комплект проводов для подключения.

Так же есть особенность с питанием модуля.
Во первых, он должен питаться от 3,3 В.
Во вторых, он очень прожорливый – мощности питания от USB-UART-TTL адаптера ему не хватало – компьютер постоянно сообщал, что к нему «подключено неизвестное устройство, при установке которого возникли проблемы».

Поэтому для питания модуля нужно организовать отдельное питание.
Если предполагается использовать более высокое напряжение — нужно использовать понижающий стабилизатор.
В моем случае я использовал две батареи АА 1,5В соединенные последовательно – но испытания показали хватает не на долго (возможно батареи были севшие).
ВНИМАНИЕ! При подключении внешнего источника питания при прошивке нужно соединить его с минусом USB-UART-TTL адаптера.


6. Подключение датчика температуры.
Схема подключения датчика температуры типовая (см. рисунок).


Потребуется правда поработать паяльником – припаять сопротивление 4,7 кОм и датчик температуры, а так же перемычку включения питания (см. ранее).

Есть еще один вывод который может пригодится — вывод RST – «Сброс» — для этого нужно подать на него «минус». Пару раз пригодилась эта «кнопка» — возможно потому, что схема собрана на весу…

7. Работа датчика.
Если все прошло правильно датчик начнет помаргивать синим светодиодом и излучать в WIFI эфир температуру. А вот что бы эта температура стала «видима» нужно в браузере указать IP адрес вашего модуля (мы его знаем из пункта 5) и на экране появится вот такая картинка:



Artwork by Павел Бондаренко

ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.

Способов программирования ESP8266 опять же два, первый - это программирование с помощью ESP8266 фреймворка для Arduino IDE, второй - это программирование через esp-open-sdk. В первом случае мы можем использовать готовые библиотеки Arduino, во втором случае вы можем положиться только на функционал SDK и свой собственный код.

В этой статье мне хотелось бы рассмотреть программирование ESP8266 с помощью ESP8266 фреймворка для Arduino IDE. Данная тема решает широкий спектр задач обеспечения радиоканалом разного рода датчиков и простых устройств управления нагрузкой.

В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.

При работе с ESP8266 есть выбор для использования его совместно с "облаками", собственным внешним сайтом, собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.

    Ссылки на полезные ресурсы и документацию:
  1. ESP8266 фреймворк для Arduino IDE
  2. Документация на библиотеку ESP8266WIFI
  3. Документация на Arduino библиотеку WiFi library

I. Начало работы с ESP8266 фреймворком для Arduino IDE

II. Работа с библиотекой ESP8266WIFI

  1. Установка WiFi соединения
  2. Использование режима энергосбережения DeepSleep
  3. Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос
  4. Отправка на web-сервер данных с датчика DHT11 через GET запрос
  5. Добавление датчика DS18B20
  6. Вывод показаний датчиков через веб-интерфейс

1) Установка ESP8266 фреймворка для Arduino IDE

Действуя в соответствии с этой инструкцией, прописываем в настройках Arduino IDE адрес репозитория "http://arduino.esp8266.com/stable/package_esp8266com_index.json":


В менеджере плат устанавливаем пакет поддержки плат esp8266:

После установки пакета поддержки esp8266, выставляем в настройках свою плату, в моем случае это nodemcu на модуле esp12e, а настройки платы можно оставить по умолчанию:



Теперь подключаем плату NodeMCU к компьютеру, выбираем последовательный порт в Arduino IDE, находим в примерах для ESP8266 тестовый скетч "Blink", компилируем, загружаем и наслаждаемся ровным миганием синего светодиода:


Прошивка занимает почти четверь мегабайта, а процесс прошивки занимает примерно секунд двадцать. Если вы не горите желанием написать свою реализацию TCP/IP стека, то стоит принять это как данность.

Значение константы LED_BUILTIN определенно в файле

Т.е. LED_BUILTIN это GPIO_16. Если мы хотим помигать светодиодом который установлен на модуле ESP12E, то приведем скетч к следующему виду:

2) Подключение датчика DHT11 к ESP8266

Теперь нам нужно подключить к ESP8266 несколько сенсоров чтобы впоследствии передавать данные с них через WiFi.

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


Датчик имеет три рабочих пина: первый пин - питание; второй пин - вывод данных, его следует подтягивать к питанию; третий пин никуда не подключается ; четвертый пин - это земля. Для подтяжки второго пина к питанию я использовал резистор на 4.7К, но т.к. датчик не скоростной, то должны сгодиться резисторы и на 10К или даже на 47К. Датчик может питаться от 3.3 Вольт, что нас вполне устраивает.

После установки библиотек и подключения датчика DHT11 к ESP8266, загрузим в Arduino IDE тестовый скетч:

Если всё было сделано правильно, то после компиляции и загрузки прошивки, в мониторе последовательного порта можно будет наблюдать показания датчика:


3) Подключение датчика DS18B20 к ESP8266

Вторым датчиком который мы подключим ESP8266, будет DS18B20. Схема его подключения к NodeMCU ESP8266 показана ниже:


Здесь, так же как и в случае с DHT11, Data pin подтягивается к шине питания через резистор номиналом 4.7КОм.

Подключаем датчик к плате NodeMCU, скачиваем библиотеку "OneWire" и открываем пример DS18x20_Temperature.

В примере правим строку:

также можно еще скорость UART поднять до значения 115200

Если все было сделано правильно, то после компиляции примера и загрузки прошивки в микроконтроллер, мы получим следующий лог работы в мониторе последовательного порта:


4) Установка WiFi соединения

Теперь, когда у нас есть данные, которые нужно куда-то передавать, самое время разобраться с библиотекой ESP8266WIFI, с помощью которой мы будем это делать.

Библиотека ESP8266WIFI имеет схожий API c библиотекой Arduino WIFI.

Опираясь на эту информацию, начинаем писать код.

В составе библиотеки ESP8266WIFI имеется 17 примеров, среди которых имеется пример для сканирования доступных точек доступа: WIFIScan. Я переписал его на свой манер:

Результат работы программы выглядит так:


Действие программы соответствует AT-команде CWLAP, её можно свернуть в функцию с названием, скажем list_wifi(). На базе этой функции можно написать другую, которая будет искать определенную точку доступа. Можно ее будет также наделить полезным свойством, возвращать в случае обнаружения заданной точки доступа уровень ее сигнала rssi. Т.о. получим функцию двойного назначения get_rssi():

Дело осталось за малым, установить соединение с точной доступа. У меня это получилось так:

5) Использование режима энергосбережения DeepSleep

Теперь вместо задержки на функции delay() будем посылать ESP8266 в режим энергосбережения. Для этого нам нужно будет соединить выводы D0 и RST:


После этого, заменим в главном цикле стоку delay(5000) на ESP.deepSleep(3e7), которая отправит в ESP8266 в режим энергосбережения. Параметр "3e7" означает 3*10^7 микросекунд, т.е. тридцать секунд.

Лог работы программы будет выглядеть теперь так:


Для более корректной работы, мы можем поменять алгоритм таким образом: 1)пусть в начале главного цикла сначала устанавливается WiFi соединение, 2) потом путь передаются данные, 3) после этого WiFi соединение разрывается, и ESP8266 уходит в режим энергосбережения.

6) Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос

Класс WiFiCliet реализует установку TCP соединения с сервером. Демонстрационный пример его использования можно найти здесь: Client — ESP8266 Arduino Core 2.4.0 documentation. Я адаптировал этот пример под свой случай, и в итоге получилось так:

Результат работы программы выглядит так:


Для контроля можно взглянуть на дамп соединения в Wireshark:


Как видно, соединение осуществляется без ошибок. Красная строчка показывает закрытие соединения клиентом, с помощью вызова WiFi.disconnect().

Теперь аналогично предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос, мы можем отправлять на веб-сервер свои данные через GET-запрос.

Изменим в программе строку:

После чего заново компилируем и перепрошиваем esp8266. Смотрим на результат работы программы:


Как видно, данные успешно уходят на сервер.

7) Отправка на web-сервер данных с датчика DHT11 через GET запрос

Теперь нам нужно добавить к получению данных с датчика DHT11, отправку их на web-сервер через GET-запрос, как это делалось в предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос.

Программа в данном случае получается такой:

Для приёма данных, на стороне сервера нужно будет добавить cgi скрипт sensors.cgi следующего содержания:

Данный скрипт записывает полученные показания датчиков в файлы вида: '/site/sensors/"дата"/log.txt'. Файлы автоматически разбиваются по дням. Формат файлов выглядит так:

8) Добавление датчика DS18B20

Теперь нужно добавить опрос датчика DS18B20, и передачу его данных на web-сервер. Для этого я добавил в программу код из примера "DS18x20_Temperature" библиотеки OneWire. Этот пример поддерживает датчики: DS18S20, DS18B20, DS1822. Я не стал его упрощать затачивая конкретно под свой DS18B20, а оставил как есть:

Теперь показания датчиков выглядят следующим образом:

Здесь ds18b20 снимает показания по одну сторону окна, а dht11 - по другую.

9) Вывод показаний датчиков через веб-интерфейс

GCI скрипт для вывода лога измерений получился таким:

Он довольно простой. Второй скрипт будет поинтереснее:

По желанию еще можно добавить JavaScript для автоматического обновления содержимого страницы.

Результат работы последнего скрипта на экране мобильника выглядит так:


В заключение хочу ещё добавить, что нужно внимательно отнестись к установке датчика уличной температуры. Он должен быть защищён от ветра и прямого солнечного света. Также он не должен напрямую соприкасаться со стеной или окном жилого дома. По моим наблюдениям, расстояние в 10см от стены дома достаточно для корректных показаний.

10) Второй WiFi термометр на датчике AM2320 (добавлено 26.05.19г)

Спустя полгода после изготовления термометра, должен сказать, что он получился довольно удачным. Это очень удобно, проснувшись утром взять смартфон, и тут же посмотреть какая температура сегодня за окном. Не нужно подходить к замороженому окну и пытаться разглядеть что-то за замороженым окном в темноте.

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

Я буду использовать I 2 C интерфейс, на ESP12E/ESP12F он расположен на GPIO4 (SDA) и GPIO5 (SCL). На NodeMCU это соответственно выводы D2 и D1:


Подключается датчик к NodeMCU таким образом:


После компиляции скетча и прошивки NodeMCU, в окне терминала мы должны увидеть лог работы:


Остальное - дело техники. Действуя по аналогии с датчиком DHT11, напишем скетч с соединением с точкой доступа, и уходом в спящий режим:

В терминале должен пойти лог такого вида:


Теперь на роутере напишем CGI-скрипт "/site/cgi-bin/am2320.cgi" для приема и сохранения результатов измерений датчика:

Осталось привести скетч ESP8266 к окончательному рабочему виду:

Для отображения данных с двух датчиков, скрипт temperature.cgi нужно будет привести, например, к такому виду:

Выглядит гадко, но это работает. Итоговый результат на экране смартфона:


В заключение хочу немного сказать об автономном режиме работы ESP8266, т.е. режиме работы от аккумулятора. Мне пока удалось добиться беспрерывной работы всего лишь двое суток. НО. У меня довольно "слабый" аккумулятор. Это одна батарея 18650, сама обычная с али. Ее фактическая емкость где-то 500 или 600 мА. Далее у меня не самая эффективная цепь питания. C батареи питание идет на повышающий до 6 Вольт DC-DC преобразователь. Затем питание проходит через понижающий до 3.3 Вольт линейный преобразователь ams1117-3.3. В итоге, я пока имею только двое суток автономной работы. Work in progress, как говорится.

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

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

Справочная информация

Температурный датчик DS18B20

Температурный датчик DS18B20( ) – это цифровой датчик, коммуницирующий через шину 1-Wire. Это значит, что для чтения данных с этого датчика понадобится очень простая цепь. Кроме того, он коммуницирует через общую шину, и это значит, что вы можете подключить друг к другу несколько устройств и считывать их данные с помощью лишь одного цифрового контакта ESP8266( ).

Как можно видеть на фото ниже, у датчика DS18B20( ) всего три контакта:

DS18B20.jpg

Кроме того, DS18B20( ) продается и в влагозащищенной версии.

Crowtail-DS18B20-One-Wire-Waterproof-Temperature-Sensor.jpg

Функции

Главные функции температурного датчика DS18B20( ):

  • Коммуницирует через шину 1-Wire;
  • Диапазон измеряемой температуры: между -55˚C и 125˚C;
  • Точность: +/-0.5˚C (в диапазоне между -10˚C и 85˚C);

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

Для этого проекта нам понадобятся библиотеки «OneWire» и «DallasTemperature».

Чтобы установить библиотеку «OneWire», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «OneWire-master».
  3. Переименуйте ее на «OneWire».
  4. Переместите переименованную папку в папку «libraries» IDE Arduino.
  5. Перезапустите IDE Arduino.

Чтобы установить библиотеку «DallasTemperature», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «Arduino-Temperature-Control-Library-master».
  3. Переименуйте ее на «DallasTemperature».
  4. Переместите переименованную папку в папку «libraries» IDE Arduino.
  5. Перезапустите IDE Arduino.

Загрузка кода на ESP8266

Для начала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, можно почитать тут.

Далее кликаем в IDE Arduino на Плата > Инструменты > Generic ESP8266 Module (Board > Tools > Generic ESP8266 Module). Вместо «Generic ESP8266 Module» также может быть вариант «ESP-12E».

Arduino-IDE-select-esp8266 1.jpg

Скопируйте код, показанный ниже, в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить не получается, поищите решение проблемы в этой статье).

Схема

ESP8266 ds18b20 arduino 2.jpg

IP-адрес ESP8266

Откройте монитор порта IDE Arduino на скорости 115200 бод. Спустя несколько секунд там должен показаться IP-адрес ESP8266.

В моем случае это «192.168.1.105».

Serial-monitor-2 3.jpg

Демонстрация

Web-server-window esp8266 4.jpg

Если все настроено правильно, появится веб-страница, которая покажет температурные данные, считанные датчиком DS18B20. Чтобы увидеть самые последние данные, просто обновите эту страницу.

Читайте также: