Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Eu queria ter uma estação meteorológica doméstica por algum tempo e uma que todos na família pudessem facilmente verificar a temperatura e a umidade. Além de monitorar as condições externas, eu queria monitorar cômodos específicos da casa e também minha oficina na garagem. Assim, saberemos quando é um bom momento para arejar a casa ou ligar o desumidificador (chove muito aqui no inverno). O que eu criei é um sistema de sensor baseado em ESP-Now que reporta a um servidor da web local que qualquer um pode verificar de seu computador ou telefone. Para o telefone, escrevi um aplicativo Android tão simples para tornar isso ainda mais fácil.
Etapa 1: detalhes do projeto
Eu queria ter várias estações de sensores que pudesse colocar em locais diferentes e fazer com que reportassem a uma estação principal (ou hub) que salvaria as informações. Depois de experimentar várias ideias, decidi usar o protocolo ESP-Now do Espressif, uma vez que permitia uma comunicação rápida diretamente entre dispositivos. Você pode ler um pouco sobre ESP-Now aqui e este repositório do GitHub foi uma grande parte da minha inspiração.
A primeira foto mostra o layout do sistema. Cada sensor relata suas medições para um dispositivo de gateway que encaminha os dados para o servidor principal por conexão serial com fio. A razão para isso é que o protocolo ESP-Now não pode estar ativo ao mesmo tempo que a conexão WIFI. Para que um usuário acesse a página da web, o WIFI deve estar ativado o tempo todo, o que impossibilita o uso das comunicações ESP-Now no mesmo dispositivo. Embora o dispositivo de gateway deva ser um dispositivo baseado em Espressif (capaz de ESP-Now), o servidor principal pode ser qualquer dispositivo capaz de executar uma página da web.
Algumas estações de sensores funcionariam com baterias (ou baterias carregadas com energia solar) e outras simplesmente teriam energia da rede elétrica. No entanto, eu queria que todos usassem o mínimo de energia possível e é aí que o recurso de "sono profundo" disponível para dispositivos ESP8266 e ESP32 é extremamente útil. As estações de sensores despertariam periodicamente, tomariam medidas e as enviariam ao dispositivo de gateway e voltariam a hibernar por algum período de tempo pré-programado. Seu período de vigília de apenas cerca de 300 ms a cada 5 minutos (no meu caso) reduz significativamente o consumo de energia.
Etapa 2: Sensores
Existem vários sensores para escolher para medir os parâmetros ambientais. Decidi ficar apenas com sensores com capacidade de comunicação I2C, pois isso permitia medições rápidas e funcionaria em qualquer um dos dispositivos que eu tinha. Em vez de trabalhar com ICs diretamente, procurei módulos prontos para usar que tivessem as mesmas pinagens para simplificar meus projetos. Comecei querendo apenas medir temperatura e umidade e, portanto, escolhi um módulo baseado em SI7021. Mais tarde, eu queria um sensor que pudesse medir a pressão também e decidi experimentar os módulos de sensor baseados no BME280. Para alguns locais, eu até queria monitorar os níveis de luz e o módulo BH1750 era ideal para isso como um módulo de sensor separado. Comprei meus módulos de sensor no ebay e estes são os módulos que recebi:
- BME280 (GY-BMP / E280), mede temperatura, umidade e pressão
- SI7021 (GY-21), mede temperatura e umidade
- BH1750 (GY-302), mede luz
Existem dois estilos de módulos GY-BMP / E280 PCB a serem encontrados. Ambos compartilham o mesmo pino para os pinos 1 a 4. Um módulo tem dois pinos adicionais, CSB e SDO. Esses dois pinos são pré-conectados na versão de 4 pinos do módulo. O nível do pino SDO determina o endereço I2C (Terra = padrão de 0x76, VCC = 0x77). O pino CSB deve ser conectado ao VCC para selecionar a interface I2C. Prefiro o módulo de 4 pinos, pois está pronto para ser usado como está para o meu propósito.
Em geral, esses módulos são muito convenientes de usar, pois já têm resistores pull-up instalados para as linhas de comunicação e todos funcionam em 3,3 V, portanto, são compatíveis com placas baseadas em ESP8266. Observe que os pinos nesses CIs de sensores geralmente não são tolerantes a 5 V, portanto, conectá-los diretamente a algo como um Arduino Uno pode danificá-los permanentemente.
Etapa 3: Estações de sensor
Conforme mencionado, as estações de sensores seriam todas dispositivos Espressif usando o protocolo de comunicação ESP-Now. De projetos anteriores e experimentação, eu tinha vários dispositivos diferentes disponíveis para conduzir meus testes iniciais e incorporá-los ao design final. Eu tinha os seguintes dispositivos em mãos:
- dois módulos ESP-01
- duas mini placas de desenvolvimento Wemos D1
- uma placa de desenvolvimento Lolin ESP8266
- uma placa de kit WIFI serial ESP12E
- uma placa GOOUUU ESP32 (uma placa de desenvolvimento de 38 pinos)
Eu também tinha uma placa de desenvolvimento Wemos D1 R2, mas havia problemas com ela que não permitia que ela acordasse do sono profundo e, como um dispositivo de passagem, travava e não reiniciava corretamente. Consertei mais tarde e ele se tornou parte do projeto do abridor de porta de garagem. Para que o "sono profundo" funcione, o pino RST do ESP8266 deve ser conectado ao pino GPIO16, para que o temporizador de sono possa despertar o dispositivo. Idealmente, esta conexão deve ser feita com um diodo Schottky (cátodo para GPIO16) para que o reset manual através da conexão USB-TLL durante a programação ainda funcione. No entanto, um resistor de valor baixo (300-ish Ohm) ou mesmo uma conexão de fio direta ainda pode ser bem-sucedida.
Os módulos ESP-01 não permitem fácil acesso ao pino GPIO16 e é necessário soldar diretamente no IC. Esta não é uma tarefa simples e não a recomendaria a todos. A placa do kit WIFI serial ESP12E foi um item um pouco inovador e exigiu algumas mudanças para ser útil para o meu propósito. As placas mais fáceis de usar foram as mini placas Wemos D1 e a placa Lolin. Os dispositivos ESP32 não exigem nenhuma modificação para que o sono profundo funcione. Andreas Spiess tem um bom instrutor sobre isso.
Etapa 4: Estação de Sensor ESP-01
Em todas as estações de sensores, os módulos de sensores são montados verticalmente para reduzir a quantidade de poeira que pode se acumular neles. Nem todos estão em gabinetes e não posso montá-los em gabinetes. A razão para isso é que os dispositivos podem aquecer e afetar as leituras de temperatura e umidade se não forem suficientemente ventilados.
As placas ESP-01 são muito compactas e têm poucos pinos IO digitais para trabalhar, mas é o suficiente para a interface I2C. As placas, entretanto, requerem uma modificação complicada para permitir que o "sono profundo" funcione. Na foto mostrada, um fio foi soldado do pino do canto (GPIO16) ao pino RST no conector. O fio que usei é um fio de "reparo" isolado de 0,1 mm de diâmetro. O revestimento de isolamento derrete com o aquecimento, então ele pode ser soldado para reparar traços, etc. em PCBs e ainda não se preocupar em criar curtos onde o fio entra em contato com outros componentes. Seu tamanho torna difícil de trabalhar e eu soldei este fio no lugar sob um microscópio (estilo amador / colecionador de selos). Lembre-se de que o coletor do lado direito tem espaçamento entre pinos de 0,1 "(2,54 mm). Instalar um diodo Schottky aqui não seria nada fácil, então decidi tentar o fio sozinho e as duas unidades estão funcionando há mais de um mês sem problemas.
Os módulos foram instalados em duas placas protótipo que criei. Uma (# 1) é uma placa de programador que também permite que módulos I2C sejam instalados e testados, enquanto a outra (# 2) é uma placa de desenvolvimento / teste para dispositivos I2C. Para a primeira placa, soldei um antigo conector USB macho e um pequeno PCB para alimentar a unidade diretamente de um adaptador USB de parede. A outra unidade tem um conector DC normal modificado para caber no conector do terminal de parafuso e também é alimentada por um adaptador de parede.
O esquema mostra como eles estão conectados e como o programador funciona. Não tenho nenhum outro módulo ESP-01, então não tive nenhuma necessidade imediata do programador. No futuro, provavelmente farei um PCB para eles. Ambas as placas têm o módulo sensor SI7021 instalado, pois eu não estava tão interessado em medições de pressão nesses locais.
Etapa 5: Estação de sensor do kit ESP 12E Serial WIFI
A placa do kit ESP12E Serial WIFI não foi projetada para ser desenvolvida, mas sim para mostrar o que pode ser feito com este dispositivo. Comprei há muito tempo para aprender um pouco sobre a programação do ESP8266 e finalmente decidi dar-lhe um novo uso. Removi todos os LEDs que foram instalados para demonstrações e adicionei um cabeçalho de programação USB, bem como um cabeçalho I2C adequado para os módulos que uso. Ele tinha um resistor fotográfico CdS conectado ao pino de entrada analógica e decidi deixá-lo lá. Esta unidade em particular iria monitorar minha oficina de garagem e o fotossensor que ela tinha era suficiente para me avisar se as luzes tivessem sido deixadas acidentalmente acesas. Para a medição de luz, normalizei as leituras para me dar uma saída percentual e qualquer coisa acima de “5” à noite significava que as luzes estavam acesas ou a porta da casa não estava fechada corretamente. Os pinos RST e GPIO16 estão claramente etiquetados no PCB e o diodo Schottky que os conecta foi instalado na parte inferior do PCB. Ele é alimentado por uma placa serial USB que é conectada diretamente a um carregador de parede USB. Tenho extras dessas placas seriais USB e não preciso dessa agora.
Não fiz um esquema para esta placa e geralmente não recomendo comprar um para usar com esse propósito. As Mini placas Wemos D1 são muito mais adequadas e serão discutidas a seguir. Embora, se você tiver um desses e precisar de alguns conselhos, ficarei feliz em ajudar.
Etapa 6: Estações Mini Sensor D1
As placas de desenvolvimento ESP8266 do tipo Wemos D1 Mini são as minhas preferidas e se eu tivesse que fazer de novo, eu usaria apenas estas. Eles têm um grande número de pinos IO acessíveis, podem ser programados diretamente por meio do IDE do Arduino e ainda são bastante compactos. O pino D0 é GPIO16 nessas placas e conectar um diodo Schottky é bastante fácil de fazer. O esquema mostra como eu tenho essas placas conectadas e ambas usam o módulo sensor BME2808.
Uma das duas placas é usada para monitorar o clima externo e funciona com uma bateria de energia solar. Um painel solar de 165 mm x 135 mm (6 V, 3,5 W) é conectado a um módulo de carregamento de bateria de íons de lítio TP4056 (consulte o Diagrama de configuração da estação de sensor de bateria alimentada por energia solar). Este módulo de carregamento específico (03962A) apresenta um circuito de proteção de bateria que é necessário se a bateria (pacote) não contiver um. A bateria de íon de lítio foi reciclada de uma bateria de laptop antiga e ainda pode manter carga suficiente para executar a Mini placa D1, especialmente com o modo de espera profunda ativado. A placa foi colocada em um invólucro de plástico para mantê-la um pouco protegida das intempéries. Porém, para que o interior ficasse exposto à temperatura e umidade externas, dois orifícios de 25 mm de diâmetro foram perfurados em lados opostos e cobertos (por dentro) com um pano preto para paisagem. O pano é projetado para permitir que a umidade penetre e, portanto, a umidade pode ser medida. Em uma das extremidades do gabinete, um pequeno orifício foi perfurado e uma janela de plástico transparente foi instalada. É aqui que o módulo do sensor de luz BH1750 foi colocado. Toda a unidade é colocada ao ar livre, na sombra (não diretamente do sol) com o sensor de luz apontado para a área aberta. Ele tem funcionado com bateria movida a energia solar por quase 4 semanas em nosso inverno chuvoso / nublado aqui.
Etapa 7: Gateway e servidor da Web
Uma placa Lolin NodeMCU V3 (ESP8266) foi usada para o dispositivo ESP-Now Gateway e uma ESP32 (placa GOOUUU) foi usada para o servidor da Web. Quase qualquer placa ESP8266 ou mesmo ESP32 poderia ter servido como dispositivo de gateway, esta foi simplesmente a placa que eu tinha "sobrado" depois de usar todas as outras placas que tinha.
Usei a placa ESP32 porque preciso de uma placa com um pouco mais de capacidade de computação para coletar os dados, classificá-los, salvá-los no armazenamento e executar o servidor web. No futuro, ele também pode ter seu próprio sensor e um display local (OLED). Para armazenamento, um cartão SD foi usado com um adaptador personalizado. Usei um microSD comum para adaptador de cartão SD e soldei um conector macho de 7 pinos (passo de 0,1 ) aos contatos chapeados. Segui o conselho deste GitHub para fazer as conexões.
A configuração de prototipagem (com fios Dupont) não inclui um módulo de sensor, mas o PCB finalizado que projetei permite um, bem como um pequeno display OLED. Detalhes sobre como eu projetei esse PCB são parte de um Instructable diferente.
Etapa 8: Software
Dispositivos ESP8266 (ESP-NOW)
O software para todos os dispositivos foi escrito usando o IDE Arduino (v1.87). Cada estação de sensor executa essencialmente o código idêntico. Eles diferem apenas por quais pinos são usados para as comunicações I2C e qual módulo sensor eles estão conectados. Mais importante ainda, eles enviam o pacote de dados de medição idêntico para a estação ESP-Now Gateway, independentemente de terem o mesmo sensor. O que isso significa é que algumas estações de sensores preencherão valores fictícios para as medições de pressão e nível de luz se não tiverem sensores para fornecer valores reais. O código para cada estação e o gateway foi adaptado dos exemplos de Anthony Elder neste GitHub.
O código do dispositivo de gateway usou SoftwareSerial para se comunicar com o servidor da web, uma vez que ESP8266 tem apenas um UART de hardware totalmente funcional. Executando na taxa de transmissão máxima de 9600, parece bastante confiável e é mais do que suficiente para enviar esses pacotes de dados relativamente pequenos. O dispositivo de gateway também é programado com um endereço MAC privado. A razão para isso é que, se for necessário substituí-lo, nem todas as estações de sensores precisam ser reprogramadas com o novo endereço MAC do destinatário.
ESP32 (servidor web)
Cada estação de sensor envia seu pacote de dados para o dispositivo de gateway que o encaminha para o servidor web. Junto com o pacote de dados, o endereço MAC da estação do sensor também é enviado para identificar cada estação. O servidor da web tem uma tabela de "consulta" para determinar a localização de cada sensor e classifica os dados de acordo. O intervalo de tempo entre as medições foi definido em 5 min mais um fator aleatório para evitar que os sensores "colidam" uns com os outros ao enviar para o dispositivo de passagem.
O roteador WIFI doméstico foi configurado para atribuir um endereço IP fixo ao servidor da web ao se conectar ao WIFI. Para o meu era 192.168.1.111. Digitar esse endereço em qualquer navegador conectará ao servidor da web da estação meteorológica, desde que o usuário esteja dentro do alcance do WIFI (e se conecte à) rede doméstica. Quando o usuário se conecta à página web, o servidor web responde com uma tabela de medidas, e inclui a hora da última medida de cada sensor. Desta forma, se uma estação de sensor deixar de responder, pode-se ver na tabela se a leitura tiver mais de 5 a 6 minutos.
Os dados são salvos em arquivos de texto individuais em um cartão SD e também podem ser baixados da página da web. Ele pode ser importado para o Excel ou qualquer outro aplicativo para plotar dados
App Android
Para facilitar a visualização das informações meteorológicas locais em um smartphone, criei um aplicativo relativamente Android usando o Android Studio. Ele está disponível na minha página do GitHub aqui. Ele usa a classe webview para carregar a página da web do servidor e, como tal, funcionalidade limitada. Ele não é capaz de baixar os arquivos de dados e eu não precisava deles no meu telefone.
Etapa 9: Resultados
Finalmente, aqui estão alguns resultados da estação meteorológica de minha casa. Os dados foram baixados em um laptop e plotados em Matlab. Anexei meus scripts Matlab e você também pode executá-los no GNU Octave. O sensor externo está funcionando com sua bateria carregada com energia solar há quase 4 semanas e raramente temos sol nesta época do ano. Até agora, tudo está funcionando bem e todos na família podem consultar o tempo sozinhos em vez de me perguntar agora!