• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

alexhi

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

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

Aleksander

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