[Из песочницы] Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$

190f0b2fd36246699615dd1e83cdb65c.jpgВ последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.

HardwareESP8266Для проекта пойдет любой из модулей от ESP-01 до ESP-11, у меня были ESP-03 (стоимость ~ $3): 577e946b90884d34896311bc1245dc42.jpg

Особенно приглянулись: ESP-01 — удобен для прототипирования (есть разъем под макетку), но выведен всего 1 GPIO; ESP-03 — много выводов, плюс керамическая антенна; ESP-07 — то же самое что и ESP-03 + экран и разъем под внешнюю антенну.

DS18B209a4d26e3450143d8b6052a5c1cf42ec2.jpg

Как вариант, можно купить уже с проводом и в герметичном корпусе.

Питание 3.3ВНеобходим источник питания как минимум на 200 мА.

USB-UARTДля прошивки и отладки. Я использовал преобразователь на основе CP2102

Подключение Подключаем питание на ESP8266. На ногу CH_PD так же подаем плюс.Внимание! У кого модули не ESP-01, необходимо подать GPIO15 — GND; GPIO2 -3.3V. У ESP-01 это уже сделано. RX и TX подключаем к USB-UART преобразователю для прошивки и отладки кода: c8004a81a255454996c90cbd8790260a.jpg

Подключаем DS18B20 к ESP8266. Если смотреть на маркировку: левая — земля, средняя — сигнал (GPIO12 на ESP-03), если у вас ESP-01, подключайте к GPIO0, правая — питание (3.3V). Между питанием и сигнальной линией желательно подключить резистор 4.7 кОм (у меня работает и с 10 кОм):

a5da1d0a9ba74e19a302e24a5baee704.png

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 от земли: 71a36bb448114e4ebd86a340765b9fc0.png

Заливка Lua скриптов и запуск Скачиваем и запускаем LuaLoader. Выбираем COM-порт и скорость 9600, если нет соединения — пробуем передернуть питание у модуля ESP8266. Проверяем соединение, нажав на кнопку ChipID. В консоль должен вывестись идентификатор чипа. = 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 Итог: 94abc2cfc1e9463ca42b6a0dd78b93bd.png

Планы Это первый опыт работы с 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.

© Habrahabr.ru