Wi-Fi датчик температуры DS18B20 + ESP8266

Публикация 08.03.2015

Всегда мечтал иметь свою метеостанцию, но выходить и мерзнуть на балконе не нравится ни кому. Решил начать с простого - сделать датчик температуры с передачей данных по wifi в теплую квартиру. Для этого использовал небезызвестный ESP8266 и цифровой датчик температуры DS18B20.

Железо

DS18B20 - это цифровой датчик температуры т.е. у него две ноги питания и третья - цифровой сигнал. Это очень удобно т.к. параллельно можно подключить до 127 датчиков.

Wi-Fi датчик температуры DS18B20 + ESP8266

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

Подойдет любая esp 01 - 11.

Wi-Fi датчик температуры DS18B20 + ESP8266

Была горстка ESP-03 по тому сделал все на них.

Wi-Fi датчик температуры DS18B20 + ESP8266

Питается все хозяйство от 3.3В и потребляет как минимум 200мА.

Для прошивки нам понадобится USB-UART переходник. Им мы будем прошивать микроконтроллер. Мой вариант был на основе микросхемы CP2102.

Подключение

К пинам CH_PD и VVC контроллера ESP8266 подаем плюс 3.3в. RX и TX к USB-UART для замены прошивки.Wi-Fi датчик температуры DS18B20 + ESP8266

При подключении датчика температуры DS18B20 с ESP8266 желательно с помощью резистора 4.7-10 кОм подтянуть сигнальную ногу к плюсу. Саму сигнальную ногу подключить к GPIO0 микроконтроллера.

Wi-Fi датчик температуры DS18B20 + ESP8266

Облако thingspeak

На сайте thingspeak.com регистрируем аккаунт, создаем канал, копируем 16-символьный ключ доступа. Этот ключ нужно будет зашить, без него облако не будет принимать данные.

Прошивка NodeMCU

Это прошивка запускает Lua скрипты. Последнюю версию можно скачать с гитхаба https://github.com/nodemcu/nodemcu-flasher Для перевода контроллера в режим программирования соединяем GPIO0 с землей, подаем питание. Теперь до следующей перезагрузки контроллер будет в этом режиме. Выставляем скорость программирования 115200 и зашиваем. Отрубаем/подрубаем питание и контроллер должен запуститься на новой прошивке. В консоль по UART будет выводиться сообщение ets Jan 8 2013,rst cause:1, boot mode:(1,0). Wi-Fi датчик температуры DS18B20 + ESP8266

Заливка Lua скриптов и запуск

Скачиваем и запускаем загрузчик Lua скриптов http://benlo.com/esp8266/index.html#LuaLoader. Выставляем скорость 9600, если не соединяется, то пробуем передернуть питание у модуля. Проверяем соединение, нажав на кнопку ChipID. В консоль должен вывестись идентификатор чипа.

= node.chipid()
10371968

Выбираем наши скрипты и кнопкой UploadFile загружаем их на плату:

Библиотека для работы с датчиком DS18B20 https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_modules/ds18b20/ds18b20.lua

httpsender.lua это саписанный нами скрипт, который читает показания с датчика и отправляет их в облако thingspeak.com.

gpio = 3
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 )

init.lua - скрипт инициализирующий WiFi и запускающий httpsender.lua. В нем нужно указать ваш логин и пароль от точки доступа.

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 

Все готово. Данные читаются нашим контроллером и отправляются в облако. Зайдя в учетную запись thingspeak мы можем увидеть график изменения температуры:

Wi-Fi датчик температуры DS18B20 + ESP8266
* комментарии публикуются после модерации
Нет комментариев