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

alexhi

New member
ВНИМАНИЕ!!! КАК И ГОВОРИЛ НА СЕРВЕРЕ УБРАЛ ОТРАБОТКУ ТЕСТОВОГО PHP СКРИПТА(ОТПРАВКА ТЕМПЕРАТУРЫ НА ПОЧТУ), СТАЛО МНОГО ЗАПРОСОВ И ХОСТЕР РУГАЕТСЯ :)

Выкладываю проект web термометра, кому интересно пробуйте.
что делает:
-измеряет температуру с датчика DS18b20
-отсылает ее на бесплатный hosting c php, на сервере выполняется php скрипт который
формирует письмо хозяину с температурой и "прицепом" температуру в родном городе
По вкусу можно еще что то добавить.
Далее засыпает на 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="vasia_pupkin@gmail.com"
--это отсылка сообщений  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
В скрипте можно выкинуть все ненужное ,оставив только температуру.
Для проверки работы можно из броузера набрать:
http://shipov.url.ph

Скрипт у меня для теста, скоро уберу,делайте свое.

Порядок работы:
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. про narodmonitor ,pushingbox и другие сервисы конечно слышал и пробывал, но со своим скриптом по моему как то гибче. Датчик работает непрерывно с Нового Года,специально пишу в файл лог чтобы проверить.Могут быть нюансы,делал быстро.В нормальном положении датчик должен моргать только раз в 30 мин. ВНИМАНИЕ!!! Когда датчик в режиме sleep он не реагирует на команды по UART. Чтобы удалить файл ,нужно включить и в течении 5 сек дать команду file.remove("Init.lua") Можно еще снизить потребление если писать например только если например температура снизилась до порога.Так же в момент передачи данных на сервер, можно сделать передачу параметров на модуль(например если это термостат)
Отступы в коде не делал намеренно так плотнее ложится во Flash. Делал под свою задачу,так что вопросы а нахрена? и т.д "идут лесом" Все просто.Не нужно, не делаем :) Вроде ничего не забыл.
 

Вложения

Последнее редактирование:

mosvov

New member
А сколько предположительно проработает девайс от 2 батареек типа AAA, с вырезанным светодиодом, и с отправкой температуры раз в пол часа?
 

alexhi

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

Aleksander

New member
Добрый день всем. Кто-нибудь переделывал данный скетч для отправки данных на народный монитор? Может поделитесь кодом?
 
Сверху Снизу