В последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.
Особенно приглянулись:
ESP-01 — удобен для прототипирования (есть разъем под макетку), но выведен всего 1 GPIO;
ESP-03 — много выводов, плюс керамическая антенна;
ESP-07 — то же самое что и ESP-03 + экран и разъем под внешнюю антенну.
DS18B20
Как вариант, можно купить уже с проводом и в герметичном корпусе.
Питание 3.3В
Необходим источник питания как минимум на 200мА.
USB-UART
Для прошивки и отладки. Я использовал преобразователь на основе CP2102
Подключаем DS18B20 к ESP8266. Если смотреть на маркировку: левая — земля, средняя — сигнал (GPIO12 на ESP-03), если у вас ESP-01, подключайте к GPIO0, правая — питание(3.3V). Между питанием и сигнальной линией желательно подключить резистор 4.7 кОм (у меня работает и с 10 кОм):
= node.chipid()
10371968
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
1. Найти альтернативу thingspeak. Графики хочется двигать и масштабировать. Может, кто-то знает аналоги?
2. Датчик влажности (возможно, DHT22). Вроде уже есть в стандартных библиотеках.
3. Датчик CO2 на основе датчика K-30.
4. Управляемый рассвет без дополнительного контроллера, управление с ESP8266. Вдохновила публикация «Искусственный рассвет».
habr.com
--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"})
Вот что приходит на 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
Опубликовано: 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 просмотров
7 013 просмотров
Опубликовано: 4 часа назад
5 190 просмотров
Опубликовано: 15 часов назад
797 просмотров
Опубликовано: 11 часов назад
16 550 просмотров
Опубликовано: 12 часов назад
15 768 просмотров
turprikol.com
3 063 просмотра
Опубликовано: 13 часов назад
35 826 просмотров
Опубликовано: 3 часа назад
9 856 просмотров
Опубликовано: 13 часов назад
5 781 просмотр
Опубликовано: 12 часов назад
6 716 просмотров
Опубликовано: 9 часов назад
Опубликовано: 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 просмотров
797 просмотров
Опубликовано: 8 часов назад
257 просмотров
videohot.ru