Este repo contém instruções de construção para um dispositivo sensor ESP8266 multiuso para projetos de IoT domésticos.
Placa V5, parcialmente povoada. Imagem gerada em Kicad.
Este quadro de sensores atende à maioria das minhas necessidades de hardware de automação de casa. Ele se encaixa em um gabinete barato e amplamente disponível (não é necessário impressão 3D) e pode ser alimentado por uma bateria de íon de lítio (monitoramento de voltagem, carregamento, polaridade reversa e circuitos de proteção incluídos) ou USB, com compartilhamento de energia apropriado se a bateria USB e a bateria estiver conectada simultaneamente. No lado do software, mantive as coisas o mais alto possível: Tasmota para a maioria dos cenários de uso; Micropython, quando necessário. A comunicação utiliza o protocolo MQTT sobre Wi-Fi, ou Lora (eu uso a placa como um sensor Lora remoto e como uma ponte Lora-MQTT).
A placa foi projetada para os seguintes sensores, bem como controle de motor/bomba (para rega automática de plantas). Os pinos do GPIO permanecem facilmente acessíveis, portanto, esta placa também pode ser usada como base para muitos outros sensores.
O uso de um ESP8266 vem com algumas limitações, especificamente em torno do GPIO disponível, e apenas uma porta ADC. Isso significa que nem toda a funcionalidade potencial está disponível ao mesmo tempo. Sim, essas limitações podem ser superadas com um divisor de porta ou utilizando um microcontrolador diferente, como um ESP32; No entanto, parte da diversão para mim era ver o quanto eu poderia fazer apenas com o ESP8266, e o resultado final se encaixa em todos os meus casos de uso.
![]() | ![]() |
|---|---|
| V4, com sensores BME280 (temperatura, pressão e umidade), BH1750 (LUX) e sensores de umidade (através dos plugues de áudio). Equipado para a bomba de rega (canto inferior direito); não está conectado atualmente. | V5, com os sensores BME280 e MH-Z19C (CO 2 ) |
![]() |
|---|
| Uma nova entrega de placas V5 |
Você poderia (deveria?!) Usar outra coisa. Inicialmente, projetei isso como uma maneira de aprender sobre sensores de IoT e design/fabricação de circuitos. Eu fiquei com isso porque oferece várias vantagens nas placas prontas para uso:
A placa pode ser alimentada diretamente do USB ou de uma bateria de íon de lítio. Placa v4 e anteriormente usou micro-USB; V5 usa USB-C. O recorte à esquerda da placa foi projetado para acomodar um caso de bateria de 18650 como este (link de compra). O conector da bateria é um JST-PH de 2 pinos (inclinação de 2 mm), mas se você preferir, basta soldar os fios diretamente aos conectores.
Se a bateria e o USB estiverem conectados simultaneamente, um circuito de compartilhamento de energia garante que apenas o USB o alcance. A bateria é usada em conjunto com uma cópia do módulo comum baseado em 3 chip TP4056 para carregamento. Há uma chave fornecida se você não estiver usando uma bateria e desejar ignorar esse circuito (ou se você não deseja carregar a bateria enquanto o USB estiver conectado). O módulo inclui proteção para sobrecarga, excesso de carga, sobrecorrente e curto-circuito. Observe que a proteção de sobrecorrente e curto-circuito é ignorada para o restante da placa (não a bateria) quando o USB está conectado e o circuito de compartilhamento de energia está, portanto, ativo. O módulo de carregamento padrão não inclui proteção contra polaridade da bateria, então eu também adicionei isso.
O monitoramento da tensão da bateria está disponível quando o jumper JP5 (frontal) ou JP6 (traseiro) é preenchido. Isso conecta o terminal positivo da bateria, através de um divisor de tensão, ao único pino ADC do ESP. Essa conexão é opcional porque o sensor de umidade (e, é claro, outros sensores) também precisa de acesso ao ADC. Devido a isso, claramente não é possível monitorar a tensão da bateria e um sensor de umidade do solo ao mesmo tempo com a placa V5.
Notas
Há uma variedade estonteante de possíveis ICs de LDO para escolher. Eu resolvi o XC6203p332Pr devido à sua saída de corrente relativamente alta e baixa tensão de abandono. O Conselho V4 tinha pegadas para dois reguladores alternativos, que eu planejava testar a estabilidade, mas eles não eram necessários e foram removidos no V5.
Na versão 4 da PCB, emparelhei dois capacitores de tântalo 1μF com o XC6203, de acordo com a folha de dados. Eu tive um capacitor fracassado em duas dessas placas após algumas semanas de uso, causando um curto-circuito e muita fumaça (as placas estavam sendo movidas a USB na época). Depois de ler as histórias de terror de Tantalum on-line, decidi experimentar trocá-los por cerâmica na V5 e não tive mais problemas. Mais tarde, descobri que as duas falhas foram minha culpa: instalei as peças ao contrário! Tenho certeza de que há uma boa razão pela qual a banda de marcadores de polaridade em tântalo denota o positivo, enquanto em capacitores de alumínio e diodos que denota o negativo, mas eles tropeçaram neste novato.
Convenientemente, o XC6203p332PR também é compatível com as placas de adaptador White ESP-12F. É menor que a pegada fornecida, mas ainda pode ser soldada com poucos problemas. Certifique-se de remover o resistor central de zero-OHM na frente da placa se estiver usando um regulador montado na placa.
Aprendi da maneira mais difícil sobre a sensibilidade do ruído elétrico do ESP8266: na v3 da placa, ela reiniciava sempre que o motor de rega era ativado. Eu superei isso no V4 com o reposicionamento de componentes (movendo o motor para a extremidade mais distante do microcontrolador), adicionando capacitores extras ao lado da conexão do motor, aumentando os traços de largura do rastreamento de potência versus traços de sinal, minimizando os loops no plano do solo e separando a caminho de retorno do plano do plano do motor do restante do restante dos componentes.
A placa foi projetada para um ESP-12F. Costumo piscar o chip em uma placa de programador antes de soldá -lo, apenas para verificar que está funcionando.
Quando instalado, ele pode ser exibido da maneira normal, conectando uma placa de interface USB-UART aos pinos apropriados.
| Alfinete# | Porta | Conexão da placa | Resistor* |
|---|---|---|---|
| 1 | RST | Botão Redefinir | |
| 2 | ADC | ADC (umidade ou bateria) | |
| 3 | En | CHIP Ativar | Supervisor, ou E-Pu |
| 4 | Io16 | Deepsleep | |
| 5 | Io14 | I2c scl, ou spi sck | |
| 6 | Io12 | Umidade vcc, ou spi sdo-miso | |
| 7 | Io13 | I2c sda, ou spi mosi | |
| 8 | VCC | ||
| 15 | Gnd | ||
| 16 | Io15 | Lora NSS | E-PD |
| 17 | Io2 | A bordo de LED e SPI SS | |
| 18 | Io0 | Botão flash | E-Pu |
| 19 | Io4 | Switch de modo (GND: Use o sono) | E-Pu |
| 20 | Io5 | Bomba de água, ou Lora Dio | E-PD |
| 21 | Rxd | CO 2 TX | |
| 22 | Txd | CO 2 RX |
* Resistor anexado ao pino: i: interno, e: externo, pu: pull-up, pd: puxando
Parece haver alguns debates on -line sobre a maneira ideal de conectar o RST ao GPIO16 para usar a funcionalidade DeepSleep do ESP8266. Eu errei do lado da cautela e adicionei um diodo entre os dois.
O ESP8266 é suscetível a brown-Outs se a tensão for muito baixa (uma boa explicação desse problema pode ser encontrada aqui). Em conjunto com o aumento não intantâneo da tensão do regulador quando a energia é aplicada pela primeira vez, isso pode levar a problemas de inicialização. Para proteger contra isso, incluí um supervisor de tensão opcional (TPS3839G33DBZ), que definirá apenas o pino habilitado para chip quando a tensão estiver acima de um limite apropriado. No entanto, ainda não notei um problema nas marrons, às vezes pulo esse componente.
Um par de dispositivos equipados com Lora em seus gabinetes
A combinação de um ESP8266 com um módulo Lora é um trecho quando se trata do GPIO disponível. Esta placa foi projetada para funcionar com os módulos Lora SX1276 (link de exemplo) e se inclina pesadamente no design daqui, que minimiza as portas necessárias, vinculando três dos pinos do módulo Lora (DIO0, 1 e 2) a um esp8266 por três diodos (pés de placa D9, D11 e D11 respectivamente). Esta configuração de compartilhamento de DIO precisa de manuseio especial no software. No entanto, apenas para comunicações simples da LORA DIO0, portanto, para minhas placas LORA até o momento, preenchi o D9 e deixei D10 e D11 desconectados.
Para testes, você pode soldar diretamente as antenas comuns de fio helicoidal (geralmente incluídas na compra de um módulo) diretamente no pino da antena do módulo. O alcance vai ser péssimo, no entanto. Para melhor alcance, anexe uma antena de maior ganho (eu uso antenas 5DBI compradas aqui). Incluo uma pegada iPex U.FL-R em AE1. Como alternativa, os conectores montados em borda SMA se encaixam bem na borda da placa no pegada J5. Eles podem ser conectados da seguinte forma (este exemplo está usando a placa V4, mas o mesmo funcionará para V5): superior e inferior.
Notas
Um único ADC está disponível no ESP8266, com uma faixa de medição de 0V a 1V. Para medir tensões mais altas, é necessário um divisor de tensão. A bordo da v5, o ADC pode ser usado para periféricos conectados à tomada de áudio ou para monitorar a tensão da bateria se JP11 ou JP5 estiver fechado.
As conexões através da tomada de áudio passam por um divisor com R1 = 470 kΩ (componente R7), R2 = 200 kΩ (componente R8). Isso permite a medição de tensões de até 3,3V (3,3V é reduzida para aproximadamente 0,985V; calibre o sinal para maior precisão).
A conexão da bateria adiciona um resistor adicional de 330 kΩ (componente R10) em série com o componente R7, levando a R1 = 800 kΩ. Isso aumenta a faixa de medição de até 5V.
Eu escolhi usar uma tomada de áudio de 4 polos (Modelo PJ313E) para conectar os sensores de umidade à placa. Por enquanto, apenas três dos quatro pólos estão conectados; O quarto é um pouco de vista para a funcionalidade futura. A partir da base à ponta do plugue de áudio, as conexões atuais são:
| Pólo | Conexão |
|---|---|
| 1 | Gnd |
| 2 | Sem conexão |
| 3 | 3.3V (do gpio12, via JP3) |
| 4 | Para ADC via divisor de tensão 3,3V |
Eu experimentei um problema com o soquete escolhido (ou talvez a combinação do soquete e os plugues que eu uso): por padrão, ele está deixando de fazer uma conexão com todos os quatro postes. Isso pode ser visto na imagem superior aqui, onde o pino de contato mais profundo (pólo 4) não é desviado. Para corrigir o problema, corri/arquivei a parte frontal plástica saliente do soquete (imagem inferior)
As pequenas bombas de água e a tubulação flexível necessária estão amplamente disponíveis. Como discutido acima, eles são buggers eletricamente sem nenhuma; Por isso, o conector da bomba está no canto mais distante da placa do ESP e protegido atrás de dois capacitores. É normalmente alimentado pelo GPIO5, por meio de um MOSFET de canal n, ou pode ser operado manualmente com o botão opcional SW5.
Para simplificar e, como as pequenas bombas parecem ser capazes de funcionar em uma ampla faixa de tensão, a bomba é fornecida com qualquer voltagem que esteja atualmente alimentando a placa (definida pelo estado do circuito de compartilhamento de energia): se o USB estiver conectado, será 5V menos a tensão direta entre os diodos d2 e d8; Se for movido a bateria, será a tensão da bateria menos a queda D8. Na prática, realmente não faz muita diferença: um pouco mais de água será bombeado durante um determinado momento quando no USB vs movido a bateria.
Para a conexão da placa da bomba, há uma pegada para um soquete DC-002. Eu pensei em usar um soquete USB, mas decidi que isso era enganoso, pois a tensão de saída nem sempre é a 5V que se esperaria do USB. Na placa fotografada acima, pulei o soquete de jack power e simplesmente conectei um soquete de cabeçalho duplo.
Eu escolhi esta caixa de projeto porque é barata, amplamente disponível e apenas o tamanho certo para o PCB e uma bateria de 18650.
Os parafusos M2.6 de 8 mm são necessários para conectar a placa à caixa, como esses.
| Propriedade | Módulo | Conexão da placa | Ficha de dados | Link de compra* |
|---|---|---|---|---|
| Temperatura, pressão, umidade | BME280 | Diretos (cabeçalhos de 2,54 mm) | Link | |
| Lux | BH1750 | Diretos (cabeçalhos de 2,00 mm) | Link | Aliexpress |
| CO 2 | MH-Z19C | Diretos (cabeçalhos de 2,54 mm) | Link | Aliexpress |
| Umidade | “Sensor capacitivo de umidade do solo v1.2” | Plugue de áudio | Link (versão mais antiga) | Aliexpress |
* Comprei desses links no passado, mas eles não têm garantia. Eu também não pretendo atualizá -los quando eles expiram inevitavelmente.
Esta é uma temperatura muito útil, umidade e sensor de pressão. Com o ponto de montagem atual do sensor, ele fica parcialmente fora do gabinete. Acho isso conveniente porque não preciso me preocupar com o fluxo de ar dentro da caixa. Se a geometria atual o ofender, ou você precisar de um dispositivo mais robusto em que o sensor não corre o risco de ser danificado, considere uma reformulação no ponto de conexão ou escolha um sensor alternativo com uma gaiola embutida.
Você pode achar que os pinos soldados atrapalham corretamente a tampa do gabinete. Se for esse o caso, você pode apará -los antes da solda, como eu fiz aqui.
O sensor pode se comunicar por I2C ou SPI; A maioria das pessoas parece usar o I2C, para o qual você precisa fazer alterações no quadro. Se você deseja a interface SPI, feche algumas pontes de solda na parte traseira para conectar os pinos adicionais. A bordo da v5, uma dessas conexões também alimenta o sensor de umidade, de modo que alterações seriam necessárias se você deseja executar o BME280 (com interface SPI) e um sensor de umidade simultaneamente.
Notas
Este é um fotodiodo simples e confiável, combinado com uma interface I2C. Você pode comprá-lo em vários fatores de formulários, com a versão de bola leve sendo particularmente conveniente para nossos propósitos. Aparar as partes plásticas do conector embutido, e agora isso pode conectar-se diretamente a um cabeçalho de pino padrão de 2 mm, conforme incluído no bordo v5. A bola leve pode ser retirada do sensor e montada diretamente na parte superior do gabinete.
Notas
Este é o sensor mais caro que eu uso, mas acho que vale a pena ver as alternativas mais baratas de COV. Ele se comunica com o barramento UART (então esp8266 pinos RX e TX). Portanto, você deseja garantir que o sensor não esteja conectado se estiver tentando piscar o ESP ou usar sua interface serial.
Para usar o MH-Z19C na placa V5, você precisa conectar duas pontes de solda na parte traseira. Em retrospectiva, não consigo pensar em um bom caso de uso quando você não deseja que aqueles que estão em ponte, então provavelmente trocarei as almofadas por traços contínuos em qualquer versão futura.
Notas
Para parar o sensor de umidade que funcionam constantemente e drenando a bateria, é alimentado diretamente pelo GPIO12. Ponte a almofada certa do JP3 para o bloco central para fazer essa conexão. Ele não atrai muita corrente, por isso não tive problemas diretamente alimentando o sensor diretamente de um pino GPIO. Se acabasse sendo um problema de estabilidade brown-out/no futuro, essa conexão precisaria ser substituída por um MOSFET.
A placa foi projetada no KICAD e fabricada pela JLCPCB. Os arquivos KICAD e as informações exigidos pelo JLCPCB são fornecidos nos diretórios Board_V*.
Por favor, seja compreensivo com o esquema; Eu sei que é feio e desesperadamente que precisa se dividir em várias partes. Lembre -se, este é o meu primeiro design de PCB!

Layout da placa V5
Por conveniência, uso o Tasmota para todos os dispositivos sempre que possível. O Tasmota não consegue lidar com o Lora; portanto, para esses dispositivos eu uso o Micropython.
Link de instalação da web
Certifique -se de instalar a versão "sensores" da imagem Tasmota.
Aqui estão algumas capturas de tela do Tasmota do dispositivo V4 na parte superior deste ReadMe.
| 
Aqui estão as principais configurações que mudamos do padrão deles na interface de controle. Leia sobre essas e outras configurações aqui.
Notas
POWER2 ON comandoOutput Hi e não Relay 2 . Em seguida, será definido no início do processo de inicialização do Tasmota e ainda desligará quando o microcontrolador entra em sono profundo.Procure aqui meu software Lora Micropython e instruções: https://github.com/brev-dev/lora_esp82666_sensor_mqtt_bridge.
Embora não esteja coberto por este repositório, aqui estão algumas notas rápidas sobre onde esses dispositivos estão na minha configuração completa da casa.
Minha configuração doméstica foi projetada para atingir essas metas:
Para ativar o controle de temperatura em cada sala, os radiadores são conectados a plugues inteligentes esp8285 tasmotizados.
O "Hub" é um Raspberry Pi 4 equipado com mosquitto, ascendido, influxDB e grafana. Meus fluxos assentados provavelmente poderiam ser simplificados substituindo grande parte dele por, por exemplo, homessistante, mas eu não analisei isso. A combinação de influxo e grafana é usada para armazenar e visualizar os dados históricos (exemplos abaixo), juntamente com o aplicativo "MQTT Dash" em nossos telefones para monitorar o status atual e alterar os níveis de temperatura e acionamento de umidade. A pilha de software RPI utiliza o Docker e o IotStack para facilitar a configuração e a manutenção. Andreas Spiess tem ótimos vídeos sobre o assunto, incluindo: #255, #295 e #352.


