Wi-fi термометр на ESP8266. Часть 1. Собираем датчик температуры воздуха на ESP-01
Подключение ESP-01 к компьютеру
Подключение ESP-01 к компьютеру происходит несколько сложнее, нежели чем знакомые всем arduino. Повторюсь, если бы у меня не было чипа ESP-01 в хозяйстве, то надо выбирать уже готовые наборы с необходимой “обвязкой” на борту. Для того чтобы подключить ESP-01 к компьютеру нам потребуется USB-TTL адаптер, макетная плата и набор проводов папа-мама для макетной платы. Также, немаловажную роль играет источник питания. В самом начале своих экспериментов я не придал этому значения, и есп-ха постоянно перезагружалась, переставала отвечать на команды. В общем, обязательно используйте отдельный источник питания.
На фото изображен USB-TTL адаптер на чипе CH340. Обратите внимание на перемычку, с помощью неё выбирается рабочее напряжение. Нам нужно 3.3V
Макетная плата с DC-DC преобразователем. К косе проводов уходящих направо подключалась ESP.
Настоятельно рекомендую для подключения ESP-01 к макетной плате использовать специальный адаптер, ищется на али по запросу Breadboard Adapter for ESP-01. Он показан на следующем фото. Он позволит вам стабильно воткнуть ESP в макетную плату, чтобы ничего не болталось на проводах. Плюс, что еще немаловажно на этом адаптере распаян конденсатор на 0.1µF для сглаживания питания. В дальнейшем его можно использовать и в готовом девайсе, чтобы иметь возможность быстро вытащить-заменить чип.
Breadboard Adapter for ESP-01 очень сильно облегчит подключение чипа к макетной плате. У меня такого в момент сборки девайса не было.
Вот моя схема подключения. Честно стырена с просторов инета, единственное я добавил емкость на 10µF в разрыв кнопки RST. А то, там толи дребезг кнопки был, толи хз.
«Напрямую» к питанию подключается только вывод VCC, остальные выводы: CH_PD, RESET, GPIO0, GPIO2, должны быть подтянуты к питанию (VCC) через резистор от 4,7 до 50 кОм. «Напрямую», к минусу (общему проводу) питания подключаем только GND, а GPIO0 подтягиваем (pulldown) тоже через резистор до 10k к GND для перевода модуль в режим загрузки прошивки. Об этом немного позже. Далее подключаем:
ESP8266 — RX ---> USB-TTL — TX,
ESP8266 — TX, ---> USB-TTL — RX.
Уже на этом этапе можно подать питание на схему, и убедиться что ничего не сгорело. При успешном старте заводской прошивки на модуле ESP8266 загорится красный светодиод (индикатор питания, на некоторых версиях модуля, например ESP-12, может отсутствовать) и пару раз мигнет синий (это индикатор передачи данных от модуля к терминалу по линии TX-RX, может иметь другой цвет).
Проверка подключения и прошивка
Для работы с esp мы будем использовать широко распространенную в узких кругах ESPlorer https://esp8266.ru/esplorer/#download Программа написана на java и будет без проблем работать под разными платформами (win, linux mac)
Подадим питание на модуль, запустим программу, выбираем нужный COM порт, и нажимаем open, и перезагрузим модуль. После этого в окне терминала мы увидим мусор из символов (из-за разных скоростей передачи) , а потом что-то типа:
wdt reset
load 0x40100000, len 25052, room 16
tail 12
chksum 0x0b
Это означает что модуль успешно стартует на стоковой прошивке и у вас есть с ним связь.
Отложим пока ESPlorer в сторону, он понадобится нам позже. Самое время прошить в наш модуль прошивку NodeMCU. Я выбрал эту прошивку по нескольким причинам: для обновления работы скриптов больше не нужно переводить модуль в режим прошивки, и нажимать кнопки на макетке (у меня все это дело немного глючило на макете) , возможность использовать готовые модули, наличие хорошей документации к API. Ссылка на документацию: https://nodemcu.readthedocs.io/en/master/
Благодаря сервису https://nodemcu-build.com/ мы можем собрать собственную версию прошивки только с теми модулями, которые нам нужны. Чем меньше модулей будет в прошивке, тем больше места останется для ваших данных и скриптов.
Заполняем email, ставим галочки на те модули что нам понадобятся, а именно: bit, CJSON, file, GPIO, HTTP, I²C, net, node, 1-Wire, timer, UART, WiFi и нажимаем Start Your Build.
Пока выполняется билд скачаем программу для прошивки. Если у вас не windows, то есть другие инструменты, например esptool, я использовал nodemcu-flasher https://github.com/nodemcu/nodemcu-flasher Скачиваем билд в зависимости от вашей операционной системы.
Проверяем почту, нам придет письмо с ссылками для скачивания нашей прошивки.
Примерно так будет выглядеть письмо. Скачиваем файл прошивки, нам нужна integer версия.
Теперь запускаем ESP8266Flasher.exe, переходим на вкладку Config, в первую строчку добавляем наш файл.
Переходим на вкладку Operation, перезагружаем нашу ESP-01 в режим прошивки таким образом: зажимаем кнопку FLASH и нажимаем RESET, отпускаем FLASH. Нажимаем Flash.
Если все прошилось успешно, ура-ура! Осталось совсем немного.
Теперь открываем ESPlorer, в правой части выбираем нужный порт, нажимаем Open и перезагружаем модуль нажав на кнопку RESET. Вы должны увидеть в терминале что-то похожее.
Пишем логику работы датчика
Логика работы датчика очень проста: после загрузки подключаемся к wi-fi точке, получаем ip-адрес. Один раз в минуту считываем показания и отправляем их в облако. Помимо этого создаем на 80 порту веб-сервер, обратившись к которому можно получить JSON с текущим значением температуры.
Дело за малым, создаем новый файлы, копируем в них содержимое и сохраняем в ESP, - Save to ESP. Прошивка NodeMCU предоставляет нам некий аналог файловой системы, можно сохранять, удалять файлы на ESP как на любой флэшке. При этом не требуется переводить модуль в режим прошивки, можно даже сделать обновление прошивки по воздуху.
Несколько слов отдельно стоит сказать про файл init.lua Именно он начинает исполнятся после загрузки модуля, и уже из него вызываются все остальные файлы на исполнение.
Точка-доступа и пароль задаются в этой строчке:
wifi.sta.config("YOUR_SSID_NAME", "YOUR_PASSWORD")
Вместо YOUR_SSID_NAME и YOUR_PASSWORD необходимо указать имя точки-доступа и пароль от неё. В моем случае настройки приходят с роутера по DHCP, поэтому ip-адрес здесь не указывается. В настройках роутера я закрепил за есп постоянный адрес.
Для сохранения данных мы будем использовать сервис https://thingspeak.com/
Там необходимо зарегистрироваться и создать канал. В один канал можно записывать сразу несколько показателей, например если помимо температуры мы бы измеряли влажность или что-то еще. Переходим на страницу API Keys и копируем оттуда Write API Key. Этот ключ необходимо вставить в файл application.lua на строчке 36 вместе YOUR_API_KEY
http.get("http://api.thingspeak.com/update?api_key=YOUR_API_KEY&fi..."..t, nil, function(code, data)
Также не забываем загрузить файл ds18b20.lua, в нем содержится логика для работы с датчикам DS18B20. Т.к. прошивку мы взяли integer, а температура является float числом, я этот файлик вероломно поправил для того, чтобы в результате работы возвращалась строка, но с разделителем точкой, как будто у нас есть поддержка работы с дробными числами.
Можно протестировать устройство, подключив датчик через макетную плату.
Вот принципиальная схема устройства, накидал быстренько.
После включения устройства у вас в канале на thingspeak должны появиться данные, а также вы должны смочь зайти на ip-адрес, который назначился вашей esp в браузере и увидеть примерно следующее:
{
"sensor-name": "balcony",
"temperature": 20.7500,
"chipID": 170827,
"espMac": "5c:cf:7f:02:9b:4b",
"espIp": "192.168.20.38",
"heap": 32040,
"timerTicks": 835632668
}
Формат выдачи данных вы можете поменять самостоятельно поправив файл application.lua
Финальная сборка устройства
Я запаял все на макетной плате под пайку, такой зеленой, с отверстиями. Стабилизатор питания отдельный, на AMS1117. Питается сейчас от старого БП роутера длинк на 5V, за несколько месяцев ESP ни разу не зависла. Жду пока приедут антенна и приемник катушки (ну когда же уже!!!!!), для того, чтобы питать датчик за окном без проводов. Ковырять и сверлить стеклопакеты на утепленном балконе не хочу.
Заключение
Вот мы и закончили с вами наш температурный датчик. Все исходники файлов можно скачать на github. https://github.com/nossSpb/nodemcu-ds18b20-tutorial/tree/mas... Осталось все это дело упаковать в герметичный корпус и повесить за окно. Помимо текущих показаний, мы также имеем историю измерений в облаке на thingspeak, и тоже можем с ней работать. Об этом я расскажу в следующей части. Делитесь своими идеями в комментариях, задавайте вопросы. Спасибо что дочитали до конца.