Campainha IoT
Revisão de 20h30min de 4 de outubro de 2015 por LeandroPereira (discussão | contribs)
Índice
Sobre
O LHC precisa de uma campainha. A ideia não é ser uma campainha tradicional do tipo "dim-dom", mas uma campainha IoT/Wifi.
Desta maneira é possível saber quando chegar alguém que não possua a chave ou alguma entrega (ex: pizza).
Funcionamento
- Pressionado o botão da campainha um circuito do tipo "contato de selo" irá alimentar o ESP01.
- O ESP01 inicializa-se e se associa a rede Wifi. (Para garantir uma associação mais rápida possível o IP é configurado como estático).
- Uma vez associado a rede o ESP01 envia um HTTP request para um servidor.
- Recebido o request pelo servidor um processo toca uma música aleatória localizada em um diretório pré-configurado.
- O ESP01 recebe uma confirmação do servidor que a campainha foi tocada e auto desliga-se enviando uma corrente para o circuito (fecha selo) através do GPIO2.
Componentes
- ESP8266 (Modelo: ESP01) - http://www.esp8266.com, https://en.wikipedia.org/wiki/ESP8266
- Pulsador de Campainha 10A 250V (Marca: APOIO, Modelo:XBC2021)
- Circuito tipo "contato de selo".
- 2 Pilhas tamanho AA (1,5V).
- Suporte para pilhas.
Design
Circuito tipo "contato de selo"
- 3 Resistores 1K (Marrom, Preto, Vermelho)
- 1 Resistor 10K (Marrom, Preto, Laranja)
- 1 Transistor PNP - BC557B
- 1 Transistor NPN - BC548B
Fonte: (ON - OFF VIA MOMENTARY PUSH-BUTTONS )
Notas:
- A carga do circuito (RL) será o ESP01.
- O interruptor "on" do circuito é ligado ao Pulsador de Campainha.
- O pino GPIO2 é ligado no interruptor "off" do circuito.
Circuito Completo
Firmware/Software
Cliente (Campainha)
-- Versao 1
-- - Sem timeouts
-- Versao 2
-- - Com timeout, LED de status
-- Versao 3
-- - Manda tensao da bateria pro servidor tambem
led_pin = 3
off_pin = 4
status_led = gpio.LOW
status_tmr = nil
ip_servidor = "192.168.50.20"
ip_campainha = "192.168.50.21"
function desliga_circuito()
print("Desligando circuito")
gpio.mode(off_pin, gpio.OUTPUT)
gpio.write(off_pin, gpio.HIGH)
printf("Aparentemente estamos vivos ainda, reiniciar")
node.restart()
end
function pisca_led()
print("LED de status: " .. status_led)
gpio.write(led_pin, status_led)
if status_led == gpio.LOW then
status_led = gpio.HIGH
else
status_led = gpio.LOW
end
end
-- Se nada acontecer em 10s, desliga o circuito
tmr.alarm(0, 15000, 0, desliga_circuito)
function init_pins()
-- Alta impedancia para evitar problemas
gpio.mode(off_pin, gpio.INPUT)
-- LED de status
gpio.mode(led_pin, gpio.OUTPUT)
gpio.write(led_pin, status_led)
end
function init_wifi()
tmr.alarm(1, 50, 1, pisca_led)
print("Conectando na rede WiFi")
wifi.setmode(wifi.STATION)
wifi.sta.config("LHC", "password")
print("Configurando IP")
wifi.sta.setip({ip=ip_campainha,netmask="255.255.255.0",gateway="192.168.50.1"})
while wifi.sta.getip() == nil do
print("Esperando conseguir IP")
end
print("Endereco IP: " .. wifi.sta.getip())
tmr.stop(1)
end
function manda_request()
tmr.alarm(1, 100, 1, pisca_led)
function recebeu(conn, data)
if data:find("TOCOU") ~= nil then
desliga_circuito()
else
node.restart()
end
end
-- Avisa ao servidor tambem como que ta a carga da pilha
tensao = node.readvdd33()
conn = net.createConnection(net.TCP, false)
conn:on("receive", recebeu)
conn:connect(9999, ip_servidor)
conn:send("GET /campainha?pilha=" .. tensao .. " HTTP/1.1\r\n"
.. "Host: campainha.home.lhc.net.br\r\n"
.. "Connection: close\r\n"
.. "Accept: text/plain\r\n\r\n")
end
print("Inicializando pinos")
init_pins()
print("Inicializando WiFi")
init_wifi()
print("Mandando request")
manda_request()
Servidor
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "Server running at port", PORT
httpd.serve_forever()
Roadmap
- Adicionar um LED na Campainha indicando que o circuito foi ligado. Fazer o LED piscar por alguns segundos antes de desliga-lo indicando que o servidor recebeu o request e tocou a música. Utilizar o GPIO0 para isso.
- Construir uma Campainha móvel com um Buzzer, um ESP01, e um botão liga/desliga para levar a outras áreas do LHC aonde não seja possível ouvir a música do servidor (ex: Quintal, Marcenaria).
- Configurar o servidor. Possível fonte de sons
Fotos
Quem
- Fernando
- Leandro