Облачный термометр за 10 минут и 300 рублей
Эту простейшую самоделку сможет повторить каждый, кто в состоянии соединить три провода. С помощью этой штуки можно дистанционно контролировать температуру, например, на даче.
Для работы термометра необходим Wi-Fi. Используется прошивка wifi-iot.com .
Температуру можно смотреть на сайте и в мобильном приложении сервиса Народный мониторинг narodmon.ru . Там же есть графики температуры за год и можно устанавливать пределы температуры, при выходе за которые сервис будет предупреждать push-сообщениями, СМС и письмами на почту.
Для сборки термометра понадобится микроконтроллер NodeMCU-CH340 за $2.65 и цифровой датчик температуры DS18B20 за $1.41 . При желании можно добавить ещё цифровой индикатор TM1637 за $0.77 . Ещё понадобится резистор 4.7К, провода, любая зарядка от телефона с разъёмом MicroUSB. В качестве корпуса удобно использовать электрическую распаечную коробку.
Скорее всего можно использовать и совсем малюсенький контроллер Wemos D1 Mini, но я не пробовал.
В базовом варианте достаточно припаять датчик температуры к контроллеру (красный провод к 3V, чёрный к GND, жёлтый к D4), между жёлтым и красным проводам датчика ставится резистор (на фото датчик припаян к D1, не обращайте внимания).
Это необязательно, но можно подключить экран. Термометр поддерживает четыре вида экранов (цветной TFT 240×320 точек, OLED 128×64 точки, ЖК двух- или четрырёхстрочный, семисегментный светодиодный). На мой взгляд лучше всего поставить самый дешёвый четырёхсимвольный индикатор. У индикатора четыре контакта, подключаем их к контроллеру (VCC к 3V, GND к G, DIO к TX, CLK к RX).
Я пробовал подключать к термометру OLED-экран, но цифры на нём малюсенькие и выводится много лишней информации, включая неотключаемый адрес сайта разработчика прошивки.
Этот термометр можно подключить к Народному мониторингу и сделать его публичным, если его датчик будет расположен на улице. Если же термометр расположен в помещении (например, на той же даче), сервис позволяет использовать его, как непубличный. Вот так отображаются данные с двух таких термометров на сайте (замечу, что бесплатно можно подключить к сервису лишь один термометр).
А так в приложении (разумеется, датчики можно переименовать).
Приложение присылает push-сообщения, если термометр перестаёт передавать показания, или начинает их передавать после большого перерыва.
Как вы уже наверное догадались, для того, чтобы превратить контроллер в облачный термометр в него нужно загрузить прошивку и настроить её. Но сделать это гораздо проще, чем многие из вас подумали. 🙂
Прошивку можно создать с помощью сервиса wifi-iot.com , а загрузить с помощью NodeMCU Flasher , но я упрощу вам задачу: вот в этом архиве два файла — флешер и готовая прошивка. Просто подключаете контроллер к компьютеру, запускаете флешер, выбираете файл led.bin (Config-шестерёнка), указываете виртуальный COM-порт, к которому подключился контроллер, и нажимаете «Flash».
Когда заливка прошивки завершится, отключите контроллер и подключите его снова (можно к компьютеру, можно к любой зарядке). Нажмите три раза кнопку Reset с паузой не менее полсекунды. Контроллер создаст временную точку доступа Wi-Fi под названием WiFi-IoT без пароля. Подключитесь к этой точке смартфоном, и нажмите «подключение к сети». Откроется веб-страница настройки термометра.
Можно всё настроить сразу, можно настроить только подключение к Wi-Fi и продолжить настройку на компьютере. Покажу, как настроить всё сразу на телефоне:
1. Нажимаем «Hardware», ставим галку «Enable DS18B20» и меняем его GPIO на «2». Нажимаем «Set». Нажимаем «Main».
2. Заходим в «1-Wire», там «Clear & Scan List». Должен появиться адрес датчика. Снова «Main».
3. Если подключили экран, заходим в «7SEGM», ставим галку «Enable», вводим в поле «GPIO Clk» 3, в «GPIO Data» 1. Нажимаем верхний «Set». Пункт «1» меняем на DS18B20 1, нажимаем нижний «Set». Жмём «Main».
4. Заходим в «Servers», ставим там галку «Enable Narodmon.ru», нажимаем «set». Записываем ID термометра. Нажимаем «Main».
5. Видим в главном меню, что появилась температура.
6. Нажимаем «Main». В поле «AP name» вводим имя домашней точки доступа Wi-Fi (поддерживается только Wi-Fi 2.4 Ghz), в поле «AP Pass» вводим пароль от Wi-Fi. Жмём третью кнопку Set, которая сразу под введённым паролем.
Отключаем контроллер от питания и включаем снова. Теперь он подключится к домашнему Wi-Fi. Можно зайти в его веб-интерфейс из браузера по адресу, который можно посмотреть в веб-интерфейсе домашнего роутера или с помощью повторного подключения к временной точке доступа контроллера: ещё раз три раза нажимаем на контроллере RST, снова подключаемся к нему телефоном, заходим в «Main» и видим внизу адрес. В данном случае 192.168.1.212.
Регистрируемся на Народном мониторинге: https://narodmon.ru/?invite=ammo1 (ссылка реферальная, но даёт мне не деньги, а возможность подключить больше датчиков и дольше хранить данные).
Термометр посылает данные каждые 5 минут, поэтому если 5 минут ещё не прошло с момента настройки, надо немного подождать или вручную зайти в веб-интерфейс датчика и отправить данные в разделе «Servers».
На Народном мониторинге заходим в «Профиль — Мои датчики».
Нажимаем «Добавить» и вводим ID нашего термометра (его мы сохранили на этапе 4).
Если моё объяснение показалось вам сложным, вот тут есть очень подробная пошаговая инструкция.
На самом деле всё очень просто и эту самоделку действительно можно сделать и настроить за десять минут. Что касается цен, то конечно не может не впечатлять то, насколько это всё дёшево.
Десять лет я каждый день пишу о технике, скидках, интересных местах и событиях. Читайте мой блог на сайте ammo1.ru , в ЖЖ , Дзен , МирТесен .
Мои проекты:
Lamptest.ru . Тестирую светодиодные лампы и помогаю разобраться, какие из них хорошие, а какие не очень.
Elerus.ru . Собираю информацию об отечественных электронных устройствах для личного использования и делюсь ей.
Вы можете связаться со мной в Телеграм @ammo1 и по почте ammo1@mail.ru .
Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$
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. Проверяем соединение, нажав на кнопку ChipID. В консоль должен вывестись идентификатор чипа.
Заливаем нужные файлы (кнопка 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.