Índice:

Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi: 7 etapas (com imagens)
Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi: 7 etapas (com imagens)

Vídeo: Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi: 7 etapas (com imagens)

Vídeo: Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi: 7 etapas (com imagens)
Vídeo: Custom Mailbox Flag | 3D Design & Printing 2024, Julho
Anonim
Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi
Sinalizador de caixa de correio alimentado por MQTT e Wi-Fi

Nota: atualizado com novo firmware, um esquema e dicas para um programador

Há alguns anos, embarquei no meu próprio projeto de automação residencial. Tudo começou com a construção de um transmissor de 433 MHz controlado por servidor com um Arduino para alternar vários switches remotos baratos baseados em PT2262. Mais tarde, adicionei um receptor baseado em Arduino para minha estação meteorológica, conectei o contato de controle do meu carregador EV, etc. As coisas foram ficando cada vez mais interligadas (e complicadas!). Portanto, há alguns meses decidi padronizar tudo baseado em MQTT para mensagens, Node-RED para automação (ambos rodando em um único Raspberry Pi B +) e MariaDb para registro (rodando em meu Synology NAS). Mais tarde, movi o corretor MQTT (Mosquitto) e o Node-RED para o NAS também.

Este instrutível descreve um projeto bobo para se divertir enganchando minha caixa de correio montada na rua nesta infraestrutura doméstica. A ideia é que se alguém abrir a caixa de correio montada em cerca a cerca de 10 metros da porta da frente, ela me sinaliza no meu telefone e possivelmente em outros dispositivos.

Etapa 1: esboço, pré-requisitos e peças

Contorno

Em um alto nível, a caixa de correio deve, quando aberta, enviar uma mensagem MQTT exclusiva ao broker, para que os assinantes desse tópico sejam informados. O Node-RED também se inscreve e faz alguma automação, neste caso enviando um e-mail e / ou uma mensagem push para o meu telefone.

A caixa de correio deve funcionar com baterias e funcionar por pelo menos um ano, e deve fazê-lo usando minha rede sem fio. Como despertar um microcontrolador e conectar-se a uma rede WiFi pode levar vários segundos, não pude usar o interruptor de ativação para cortar a energia. Em vez disso, o processador deve ter permissão para terminar seus negócios depois que a tampa da caixa de correio já estiver fechada.

Pré-requisitos

Presumo que você tenha habilidades de soldagem modestas, trabalhou um pouco com o IDE do Arduino e instalou as placas ESP8266 usando o gerenciador de placas. Você também precisa ter um adaptador serial USB de 3,3 volts para programar o microcontrolador.

Também presumo que você tenha um broker MQTT e um servidor Node-RED em execução. Se não, há muitas instruções na Internet, mas eu aconselho a pegar o caminho preguiçoso e usar o excelente script de instalação de Peter Scargill se quiser executá-lo em qualquer Pi ou Ubuntu, ou usar a imagem de Andreas Spiess para o Pi Zero W (links na descrição desse vídeo), o que poupará algumas horas de exibição de scripts de instalação em execução. Como alternativa, você pode fazer o firmware enviar um e-mail diretamente, mas perderá muita flexibilidade ao fazer isso.

Peças

  • 1 caixa fechada de 3 pilhas AA
  • 2 pilhas AA
  • 1 módulo ESP8266. Para este projeto eu usei um ESP-01
  • 1 microinterruptor
  • 1 resistor 47K
  • 1 resistor 4M7
  • 1 capacitor 2.2uF
  • 1 tubo de plástico fino. Eu usei uma caneta
  • 1 fósforo grosso e longo ou palito de pirulito. Deve caber e mover-se facilmente no tubo de plástico

Etapa 2: Hardware: a caixa, interruptor e fiação

Hardware: a caixa, interruptor e fiação
Hardware: a caixa, interruptor e fiação
Hardware: a caixa, interruptor e fiação
Hardware: a caixa, interruptor e fiação
Hardware: a caixa, interruptor e fiação
Hardware: a caixa, interruptor e fiação

Comecei com uma caixa de bateria velha de uma decoração de Natal extinta. Ele foi projetado para três baterias de tamanho AA. Como o ESP8266 funciona bem com 3 volts, eu poderia usar duas baterias e usar a terceira posição para o microcontrolador. Observe como a caixa tinha um pequeno compartimento extra que eu poderia usar para o interruptor de ativação. Usei um tipo de interruptor muito comum mostrado nas fotos, mas removi a mola que o trava na posição ligado ou desligado. Soldei dois fios finos aos contatos NC e colei na caixa com uma gota de supercola.

Em seguida, fiz um furo na tampa superior combinando com um tubo de plástico tirado de uma caneta esferográfica. O orifício se alinha exatamente com a chave e orienta um êmbolo feito de um palito de fósforo grosso.

Por fim, soldei mais dois fios aos contatos da bateria e guiei todos os quatro fios até a posição da terceira bateria, onde o microcontrolador estaria.

Etapa 3: Hardware: o ESP-01

Hardware: o ESP-01
Hardware: o ESP-01
Hardware: o ESP-01
Hardware: o ESP-01
Hardware: o ESP-01
Hardware: o ESP-01

Dado o requisito de WiFi, todo o projeto grita ESP8266. Este pequeno controlador WiFi tornou-se o carro-chefe favorito da comunidade de consertar como um módulo que pode ser comprado por 2,50 euros e integra uma pilha completa de WiFi e TCP / IP, com capacidade de reserva mais do que suficiente para executar seus próprios programas. O Arduino IDE (ou Atom com o plug-in PlatformIO) oferece suporte total ao ESP8266.

Eu normalmente pegaria um ESP-12F, mas tinha uma placa ESP-01 minúscula que era perfeita para o trabalho e se encaixa perfeitamente na caixa da bateria. O único problema é que é bastante complicado fazer o flash do firmware no ESP-01. Mais sobre isso na próxima etapa. Há uma modificação a ser feita: você precisa remover o LED vermelho de energia da placa, pois ele consome 3mA continuamente. Com o LED removido, o módulo usa apenas algumas dezenas de uA no modo de sono profundo, o que o fará durar mais de um ano com duas baterias AA de qualidade.

Acontece que eu poderia usar duas tiras de conectores fêmea de 4 pinos e soldar os poucos componentes extras de forma livre para que eu pudesse remover o ESP-01 para atualizar o firmware, enquanto ele ainda caberia no terceiro compartimento de bateria.

É muito importante conectar corretamente o ESP. Usando a folha de dicas acima, conecte-a da seguinte maneira.

  1. Bateria plus para Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) e um resistor de 47K.
  2. Bateria menos para GND (A1) e um fio do interruptor.
  3. O outro fio da chave para um capacitor 100nF e um resistor 4M7.
  4. As extremidades abertas de ambos os resistores e do capacitor para RST (C2).
  5. TXD (A2) pode permanecer desconectado.

Edit: Tive que substituir o ESP-01 porque cometi um erro bobo e o destruí. Descobri que, para minha surpresa, o novo ESP-01 não reiniciou com o capacitor 100nF original. Provavelmente tem um design ligeiramente diferente. Substituí-o por um 2.2 uF e agora funciona de novo

Quando terminar, tudo pode ser montado na caixa, mas espere, primeiro precisamos programar o módulo.

Etapa 4: Programação do ESP-01

Programando o ESP-01
Programando o ESP-01
Programando o ESP-01
Programando o ESP-01
Programando o ESP-01
Programando o ESP-01

Para atualizar o firmware em seu ESP-01, você pode construir um pequeno equipamento ou comprar um programador (quase) completo por cerca de 1 euro.

Equipamento de hardware de programação

Construa uma pequena plataforma com novamente dois cabeçalhos fêmeas para o ESP-01. Além disso, você precisa de um módulo USB serial, capaz de fornecer 3,3 volts. Observe que o chip ESP8266 não é endurecido em 5 volts, portanto, um erro aqui pode matar seu módulo. De qualquer forma, novamente usando a folha de dicas, conecte seu equipamento da seguinte forma:

  1. 3,3 V do módulo USBSerial para Vcc, CH_PD, RST e GPIO2.
  2. GND do módulo USBSerial para GND e GPIO0.
  3. TXD do módulo USBSerial para RXD.
  4. RDX do módulo USBSerial para TXD.

Programador de pré-construção

Por mais divertido que seja construir suas próprias coisas, a abordagem mais preguiçosa é obter uma interface ESP-01-para-serial de seu site de leilão favorito, veja a imagem acima. Isso é muito mais fácil, mais compacto e mais confiável do que uma plataforma. No entanto, alguns deles não são programadores, apenas interfaces seriais. Você precisa soldar uma ponte de fio entre GND (pino A1) e GPIO0 (pino C1) na parte traseira da interface, veja a segunda foto. Observe que o ESP-01 deve ser conectado com a antena voltada para o plugue USB, e não o contrário!

Nota: eles também existem com um switch, veja a terceira foto, muito bom.

Carregue o firmware

Assumindo um IDE Arduino de 1.8.3 ou posterior, selecione Ferramentas> Placa e selecione a placa que você possui. Para um ESP-01 como eu usei, escolha "Módulo ESP8266 Genérico" e defina as seguintes opções (devem ser todos os padrões):

  1. Modo Flash: DIO
  2. Frequência de flash: 40 MHz
  3. Freqüência da CPU: 80 MHz
  4. Tamanho do Flash: 512 KB (64 KB SPIFFS) Observação: se você usar uma placa preta ESP-01, escolha 1 MB (64 KB SPIFFS)
  5. Porta de depuração: Desativada
  6. Nível de depuração: Nenhum
  7. Método de reinicialização: ck
  8. Velocidade de upload 115200
  9. Porta: selecione a porta que está conectada à sua interface serial USB. Para meu Ubuntu PC, era / dev / ttyUSB0

Conecte o rig / programador, carregue o Sketch que você pode encontrar aqui https://gitlab.com/jeroenmeijer/Mailbox.git. Forneça suas credenciais de corretor de WiFi e MQTT e sua configuração de IP em config.h e escolha Upload.

Etapa 5: montar tudo

Montando tudo
Montando tudo

Fiz um orifício para o tubo de plástico na tampa interna da minha caixa de correio, o mais próximo possível da dobradiça, depois colei a caixa da bateria com cola quente na parte de baixo da tampa. Em seguida, usei um fósforo grosso como êmbolo. Usei um recorte para cortar o fósforo no comprimento para que o interruptor abrisse se a tampa externa fosse fechada. Eu verifiquei a conectividade abrindo a tampa enquanto executava mosquitto_sub para monitorar mensagens MQTT (substitua mqttbroker, usuário e senha por sua configuração MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u usuário -P senha

Aproximadamente seis segundos após a tampa externa ser aberta, a seguinte mensagem MQTT é publicada. O tempo é usado para despertar o microcontrolador e estabelecer a conexão WiFi e do corretor.

stat / mailbox / trigger {"vcc": 3050, "flap": true, "prev": 0, "RSSI": 29, "version": "005"}

Durante esse tempo, o microcontrolador usou aproximadamente 70mA. Quando feito, ele entra em sono profundo e, no meu caso, usou menos de 20uA. "flap" é sempre verdadeiro, "vcc" indica a tensão da bateria em mV e "prev" deve ser 0. Se for 1 ou 2, significa que a caixa de correio não foi capaz de enviar uma mensagem antes, ou porque não pôde se conectar a o WiFi ou porque ele não pôde se conectar ao broker MQTT. "RSSI" é a força do sinal WiFi. Ambos são muito úteis para diagnosticar problemas.

É uma boa ideia monitorar a tensão da bateria por alguns dias para garantir que o dispositivo funcione conforme o esperado e não esgote a bateria por algum motivo.

O firmware também é capaz de se atualizar pelo ar (OTA), mas isso está um pouco além do escopo deste instrutível. Para os interessados, a configuração OTA também está no config.h.

Etapa 6: Usando Node-RED para agir na mensagem MQTT

Usando Node-RED para agir na mensagem MQTT
Usando Node-RED para agir na mensagem MQTT

Por fim, criei um fluxo simples no Node-RED. O primeiro nó assina o tópico da caixa de correio (stat / postbox / trigger). Quando uma mensagem é recebida, o segundo nó formata um e-mail *). O nó final o envia para o meu endereço do gmail, usando o gmail como servidor SMTP. Meu telefone irá então me alertar sobre novos e-mails.

Eu adicionei o fluxo Node-RED a um snippet do gitlab para que você possa importá-lo em seus fluxos Node-RED.

Claro que você pode adicionar mais alguns nós, por exemplo, para registrar os eventos da caixa de correio no MariaDb ou SqlLite, ou criar alarmes extras quando a tensão da bateria cair abaixo de 2,7 volts.

Feliz caça ao correio!

*) Consulte a próxima página, estou usando PushBullet agora em vez de e-mail.

Etapa 7: Pensamentos posteriores

Sempre há esse sentimento de que as coisas poderiam ter sido feitas melhor.

Trocar

Eu teria preferido usar um (super) ímã e um contato reed em vez da abordagem um tanto desajeitada do êmbolo. Por duas razões. Uma é que não havia como fazer isso funcionar com o contato fechando quando a caixa era aberta, e tê-lo sempre fechado significava que uma pequena corrente estaria sempre fluindo. Em retrospecto, menos de 1uA fluindo pelo resistor 4M7 não teria sido um grande problema em termos de duração da bateria. O outro era mais prático. Fiz esse projeto no sábado e escrevi o software, construí tudo no domingo a partir do que estava por aí. Eu simplesmente não tinha um contato de palheta na caixa de lixo.

Observação: como diy_bloke comentou, os contatos reed têm tendência a ficar pegajosos quando magnetizados por um longo tempo, então talvez o êmbolo não seja uma ideia tão ruim. Vamos ver. *)

Mensagem ao esvaziar

A caixa de correio também envia uma mensagem ao esvaziá-la. Isso não é grande coisa, mas com mais pessoas na casa recebendo o aviso, alguém pode acabar checando a caixa de correio, desafiando todo o seu propósito! Existem algumas maneiras de contornar isso, como verificar se a tampa interna está levantada e, em caso afirmativo, não envie uma mensagem. Ou em vez de usar o interruptor da tampa, instale um detector na parte inferior da caixa de correio. Ou um pequeno botão de reinicialização a ser pressionado ao esvaziá-lo. No entanto, tudo complicaria as coisas e provavelmente pioraria a confiabilidade.

Mensagens

Enviar e-mail é uma forma bastante eficaz, mas rude, de colocar o aviso. Uma forma mais elegante seria um aplicativo de telefone, mas eu não encontrei um aplicativo de painel MQTT do Android que possa ser configurado para acionar um alerta do sistema operacional quando uma determinada mensagem for recebida. Se houver algum por perto, por favor, adicione aos comentários. **)

*) Depois de mais de um ano em operação, descobri que o palito de pirulito que usei, basicamente papel laminado duro, tem uma tendência a encurtar sob a pressão constante da mola do interruptor. Depois de resolver alguns problemas, substituí-o por uma vara de madeira.

**) Estou usando PushBullet agora para mensagens push, separadas do painel MQTT. Uma minúscula interface Node-RED baixa para a API pode ser encontrada aqui. Certifique-se de fornecer o token de acesso no nó "Prepare for pushbullet" e seu endereço de e-mail para fins de fallback no nó "Retry".

Recomendado: