8-900-374-94-44
[email protected]
Slide Image
Меню

Градусник wifi – Купить Wifi Термометр оптом из Китая

Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$ / Habr

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

Hardware

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. В консоль должен вывестись идентификатор чипа.
= 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 

Итог:

Планы

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

habr.com

Web Термометр на WIFI esp8266 c отсылкой на e-mail (от батарейки)

ВНИМАНИЕ!!! КАК И ГОВОРИЛ НА СЕРВЕРЕ УБРАЛ ОТРАБОТКУ PHP СКРИПТА, СТАЛО МНОГО ЗАПРОСОВ И ХОСТЕР РУГАЕТСЯ 🙂 РАЗМЕЩАЙТЕ НА СВОИХ РЕСУРСАХ
Выкладываю проект web термометра на WIFI модуле ESP8266, кому интересно пробуйте.

что делает:
-измеряет температуру с датчика DS18b20
-отсылает ее на бесплатный hosting c php, на сервере выполняется php скрипт который
отсылает письмо хозяину на e-mail с температурой объекта и «прицепом» температуру в родном городе. По вкусу можно еще что то добавить.
-работает от 2 х батареек AAA
-потребление в режиме sleep около 10 мкА
-отсылка email примерно раз в 35 мин

По железу:
Модуль версии 01 прошивка с Lua от 08.01.2015
GPIO0 подтянут к 3V и сюда же подключенDS18b20
-соединяем перемычкой СH_PD и 3V
-чтобы работал node.dsleep() соединяем перемычкой RST и XPD_DCDC (она с угла микросхемы так что при наличии желания и прямых рук можно припаять)
-для снижения потребления выпаиваем либо перерезаем красный светодиод
(говорят программно его отключить нельзя, не проверял)
По софту модуля:

--cюда введете свой url который создадите
host="shipov.url.ph"
--сюда введите свой е-mail на который будут приходить письма
MYMAIL="[email protected]"
--это отсылка сообщений  35мин
COUNTSEND=3600000000
ipnr=0
pin = 3
pinroom=4
ow.setup(pin)
ow.setup(pin)
lasttemp=-999

function bxor(a,b)
local r = 0
for i = 0, 31 do
if ( a % 2 + b % 2 == 1 ) then
r = r + 2^i
end
a = a / 2 b = b / 2
end
return r
end
function bxor(a,b)
local r = 0
for i = 0, 31 do
if ( a % 2 + b % 2 == 1 ) then
r = r + 2^i
end
a = a / 2  b = b / 2
end
return r
end
function GetTemp()
addr = ow.reset_search(pin)
repeat
tmr.wdclr()
if (addr ~= nil) then
crc = ow.crc8(string.sub(addr,1,7))
if (crc == addr:byte(8)) then
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
ow.reset(pin) ow.select(pin, addr) ow.write(pin, 0x44, 1) tmr.delay(1000000)
present = ow.reset(pin) ow.select(pin, addr) ow.write(pin,0xBE, 1) data = nil
data = string.char(ow.read(pin))
for i = 1, 8 do
data = data .. string.char(ow.read(pin))
end
crc = ow.crc8(string.sub(data,1,8))
if (crc == data:byte(9)) then
t = (data:byte(1) + data:byte(2) * 256)
if (t > 32768) then
t = (bxor(t, 0xffff)) + 1  t = (-1) * t
end
t = t * 625 lasttemp = t
return lasttemp/10000
end
tmr.wdclr()
end end end
addr = ow.search(pin)
until(addr == nil)
end
---MAIN---
print("WEBTEMPMYSERVER V1.1")
tmr.alarm(0,5000,1, function()
sk=net.createConnection(net.TCP, 0)
sk:dns(host,function(conn,ip)
ipnr=ip end)
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload)
--Тут можно принять команду с сервера
gpio.mode(pin, gpio.INPUT) node.dsleep(COUNTSEND)
--if string.find (pl,"!SetR0") then
--print("LOAD TEMPERATURE!!!!\r")
--end
end )
conn:on("disconnection", function(conn, payload) print("DISCONNECT")
gpio.mode(pin, gpio.INPUT) node.dsleep(COUNTSEND)
end )
conn:connect(80,ipnr)
conn:send("GET /php/sendtest.php?mymail="..MYMAIL.."&temp="..GetTemp().." HTTP/1.1\r\nHost: "..host.."\r\n"
.."Connection: keep-alive\r\nAccept: */*\r\n\r\n") end)

При этом коде раз в 35 мин модуль будет отсылать на почту через мой тестовый скрипт
sendtest.php температуру на почту указанную в скрипте и писать лог в файл. Это только для проверки!!!! Лучше заведите свой сервер на бесплатном хостинге и поместите туда скрипт на PHP.
В скрипте можно выкинуть все ненужное, оставив только температуру.
Для проверки работы можно из броузера набрать:
shipov.url.ph/php/[email protected]&temp=23
введя вместоvasi pupkina свой еmail, должно прийти письмо. Могут быть задержки.
УБРАЛ!!! НЕ РАБОТАЕТ
Скрипт у меня для теста, скоро уберу, делайте свое.

Порядок работы:
1.Сделайте доработки по железу
2.Настраиваем модуль на свою точку доступа с выходом в интернет


wifi.setmode(wifi.STATIONAP)
wifi.sta.config("beeline15","0891111111") -- введите ваши !!!!
wifi.ap.config({ssid="WEBTEMPMYSERVER V1.1",pwd="180160180160"})

3.Прошейте модуль кодом обозвав Init.lua
4.Подключите 2 батарейки типа AAA
Потребление:
Отсылка происходит примерно за 7 сек — потребление в импульсе до 200 мА
Далее на 35 мин уходим в режим sleep -потребление около 10 мкА
Должны жить долго по идее 🙂

Вот что приходит на emai:
Температура в комнате = 23C В Клину 0..-2C В Aлании(ТУРЦИЯ) =13..15C 16.01.15 16:15:18

PS. про narodmon.ru, pushingbox и другие сервисы для IoT конечно слышал и пробывал, но со своим скриптом по моему можно сделать гибче.Но, не настаиваю.Немного подрихтовав код можно работать через них.Дело вкуса 🙂 Датчик работает непрерывно с Нового Года, специально пишу в файл лог чтобы проверить.Могут быть нюансы, делал быстро.В нормальном положении датчик должен моргать только раз в 30 мин. ВНИМАНИЕ!!! Когда датчик в режиме sleep он не реагирует на команды по UART. Чтобы удалить файл, нужно включить и в течении 5 сек дать команду file.remove(«Init.lua») Можно еще снизить потребление если писать например только если например температура снизилась до порога.Так же в момент передачи данных на сервер, можно сделать передачу параметров на модуль(например если это термостат)
Отступы в коде не делал намеренно так плотнее ложится во Flash. Делал под свою задачу, так что вопросы а нахрена? и т.д «идут лесом» Все просто.Не нужно, не делаем 🙂 Вроде ничего не забыл.

we.easyelectronics.ru

wifi термометр — Видео

Опубликовано: 10 часов назад

3 063 просмотра

Опубликовано: 13 часов назад

35 826 просмотров

Опубликовано: 3 часа назад

9 856 просмотров

Опубликовано: 13 часов назад

5 781 просмотр

Опубликовано: 12 часов назад

6 716 просмотров

Опубликовано: 9 часов назад

296 просмотров

Опубликовано: 10 часов назад

1 966 просмотров

Опубликовано: 13 часов назад

1 480 просмотров

Опубликовано: меньше минуты назад

27 129 просмотров

Опубликовано: 1 час назад

110 866 просмотров

Опубликовано: 12 часов назад

1 698 просмотров

Опубликовано: 5 часов назад

35 723 просмотра

Опубликовано: 13 часов назад

10 838 просмотров

Опубликовано: 11 часов назад

29 735 просмотров

Опубликовано: 5 часов назад

7 013 просмотров

Опубликовано: 4 часа назад

5 190 просмотров

Опубликовано: 15 часов назад

797 просмотров

Опубликовано: 11 часов назад

16 550 просмотров

Опубликовано: 12 часов назад

15 768 просмотров

turprikol.com

wifi термометр — Видео

Опубликовано: 10 часов назад

3 063 просмотра

Опубликовано: 13 часов назад

35 826 просмотров

Опубликовано: 3 часа назад

9 856 просмотров

Опубликовано: 13 часов назад

5 781 просмотр

Опубликовано: 12 часов назад

6 716 просмотров

Опубликовано: 9 часов назад

296 просмотров

Опубликовано: 10 часов назад

1 966 просмотров

Опубликовано: 13 часов назад

1 480 просмотров

Опубликовано: меньше минуты назад

27 129 просмотров

Опубликовано: 12 часов назад

1 698 просмотров

Опубликовано: 1 час назад

110 866 просмотров

Опубликовано: 13 часов назад

10 838 просмотров

Опубликовано: 5 часов назад

35 723 просмотра

Опубликовано: 11 часов назад

29 735 просмотров

Опубликовано: 5 часов назад

7 013 просмотров

Опубликовано: 4 часа назад

5 190 просмотров

Опубликовано: 12 часов назад

15 768 просмотров

Опубликовано: 15 часов назад

797 просмотров

Опубликовано: 8 часов назад

257 просмотров

videohot.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *