Este repositorio contiene instrucciones de compilación para un dispositivo de sensor ESP8266 multipropósito para proyectos de inicio de IoT.
Junta V5, parcialmente poblada. Imagen generada en Kicad.
Esta junta de sensores satisface la mayoría de mis necesidades de hardware de automatización en el hogar. Se ajusta en un recinto barato y ampliamente disponible (no se requiere impresión 3D), y puede ser alimentado por una batería de iones de litio (monitoreo de voltaje, carga, polaridad inversa y circuitos de protección incluidos) o USB, con el intercambio adecuado si el USB y la batería están conectados simultáneamente. En el lado del software, he mantenido las cosas lo más de alto nivel posible: Tasmota para la mayoría de los escenarios de uso; Micrypthon donde sea necesario. La comunicación utiliza el protocolo MQTT sobre Wi-Fi, o Lora (uso la placa como un sensor Lora remoto y como un puente Lora-Mqtt).
La placa está diseñada para los siguientes sensores, así como control del motor/bomba (para riego automático de plantas). Los pines GPIO siguen siendo fácilmente accesibles, por lo que este tablero también puede usarse como base para muchos otros sensores.
El uso de un ESP8266 viene con algunas limitaciones, específicamente alrededor de GPIO disponible y solo un puerto ADC. Esto significa que no toda la funcionalidad potencial está disponible al mismo tiempo. Sí, estas limitaciones podrían superarse con un divisor de puerto o utilizando un microcontrolador diferente como un ESP32; Sin embargo, parte de la diversión para mí fue ver cuánto podía hacer solo con el ESP8266, y el resultado final se ajusta a todos mis casos de uso.
![]() | ![]() |
|---|---|
| V4, con BME280 (temperatura, presión y humedad), BH1750 (lux) y sensores de humedad (a través del enchufe de audio). Equipado para la bomba de riego (abajo a la derecha); actualmente no está conectado. | V5, con sensores BME280 y MH-Z19C (CO 2 ) |
![]() |
|---|
| Una nueva entrega de tableros V5 |
Podrías (¿deberías?!) Usar algo más. Inicialmente diseñé esto como una forma de aprender sobre sensores de IoT y diseño/fabricación de circuitos. Me he quedado con él porque proporciona varias ventajas sobre las tablas estándares:
La placa se puede alimentar directamente desde USB o de una batería de iones de litio. La junta v4 y anteriormente usaron micro-USB; V5 usa USB-C. El recorte a la izquierda del tablero está diseñado para acomodar un estuche de 1 Celly 18650-Battery, como este (enlace de compra). El conector de la batería es un JST-PH-PH de 2 pines (tono de 2 mm), pero si lo prefiere, simplemente solifique los cables directamente a los conectores.
Si tanto la batería como el USB están conectados simultáneamente, un circuito de intercambio de energía asegura que solo el USB alimente la placa. La batería se usa junto con una copia del módulo basado en TP4056 de 3 chip común para cargar. Se proporciona un interruptor si no está usando una batería y desea evitar este circuito (o si no desea que la batería se cargue mientras se conecte USB). El módulo incluye protección para sobrecarga, exceso de descarga, sobrecorriente y cortocircuito. Tenga en cuenta que la protección contra el sobrecorriente y el cortocircuito se omite para el resto de la placa (no la batería) cuando el USB está conectado y, por lo tanto, el circuito de activación de energía está activo. El módulo de carga estándar no incluye protección contra la polaridad de batería, por lo que también lo he agregado.
El monitoreo de voltaje de la batería está disponible cuando se pone puente el jersey JP5 (delantero) o JP6 (posterior). Esto conecta el terminal de batería positivo, a través de un divisor de voltaje, con el único pasador ADC del ESP. Esta conexión es opcional porque el sensor de humedad (y, por supuesto, otros sensores) también necesita acceso al ADC. Debido a esto, claramente no es posible monitorear tanto el voltaje de la batería como un sensor de humedad del suelo al mismo tiempo con la placa V5.
Notas
Hay una variedad vertiginosa de posibles LDO IC para elegir. Me decidí en el XC6203P332PR debido a su salida de corriente relativamente alta y un bajo voltaje de abandono. La Junta V4 tenía huellas para dos reguladores alternativos, que planeaba probar la estabilidad, pero no eran necesarios y fueron eliminados en V5.
En PCB versión 4 emparejé dos condensadores tantalum de 1 μF con el XC6203, según la hoja de datos. Hice que un condensador fallara en dos de estos tableros después de unas pocas semanas de uso, causando un cortocircuito y mucho humo (las tablas estaban siendo alimentadas por USB en ese momento). Después de leer Tantalum Horror-Stories Online, decidí experimentar con el intercambio de cerámicas en V5, y no he experimentado más problemas. Más tarde descubrí que las dos fallas fueron mi culpa: ¡instalé las piezas en reversa! Estoy seguro de que hay una buena razón por la cual la banda de marcador de polaridad en Tantalums denota lo positivo, mientras que en condensadores de aluminio y diodos denota lo negativo, pero tropezaron con este novato.
Convenientemente, el XC6203P332PR también es compatible con las tablas de adaptador ESP-12F blancas. Es más pequeño que la huella proporcionada, pero aún se puede soldar con poco problemas. Asegúrese de eliminar la resistencia central de ohmios cero en la parte delantera de la placa si usa un regulador montado en la placa.
Aprendí de la manera difícil sobre la sensibilidad al ruido eléctrico del ESP8266: en V3 del tablero, se reiniciaría cada vez que se activaba el motor de riego. Superé esto en V4 con el reposicionamiento de los componentes (moviendo el motor al extremo más alejado del microcontrolador), agregando condensadores adicionales al lado de la conexión del motor, aumentando el ancho de traza de potencia frente a las trazas de señal de la señal, minimizando los bucles en el plano de tierra y separando la ruta de retorno del plano de tierra del motor del resto de los componentes.
El tablero está diseñado para un ESP-12F. Tiendo a flashear el chip en un tablero de programador antes de soldarlo, solo para verificar que esté funcionando.
Cuando se instala, se puede flashear de la manera normal conectando una placa de interfaz USB-UART a los pines apropiados.
| Alfiler# | Puerto | Conexión de tablero | Resistor* |
|---|---|---|---|
| 1 | Primero | Botón de reinicio | |
| 2 | ADC | ADC (humedad o batería) | |
| 3 | Interno | Habilitación de chips | Supervisor o e-pu |
| 4 | IO16 | Profundo | |
| 5 | IO14 | I2C SCL o SPI SCK | |
| 6 | IO12 | Humedad VCC o SPI SDO-MISO | |
| 7 | IO13 | I2C SDA o SPI Mosi | |
| 8 | VCC | ||
| 15 | Gnd | ||
| 16 | IO15 | Lora nss | E-PD |
| 17 | IO2 | LED a bordo y SPI SS | |
| 18 | IO0 | Botón flash | E-PU |
| 19 | IO4 | Interruptor de modo (GND: use el sueño) | E-PU |
| 20 | IO5 | Bomba de agua o dio lora | E-PD |
| 21 | Rxd | CO 2 TX | |
| 22 | TXD | CO 2 RX |
* Resistencia unida al Pin: I: Interna, E: Exterior, PU: Pull-Up, PD: Plegable
Parece que hay algunos debates en línea sobre la forma óptima de conectar RST a GPIO16 para usar la funcionalidad DeepSleep de ESP8266. He cometido un error al lado de la precaución y agregué un diodo entre los dos.
El ESP8266 es susceptible a las brown-outs si el voltaje es demasiado bajo (una buena explicación de este problema se puede encontrar aquí). Junto con el aumento no instantáneo en el voltaje del regulador cuando la potencia se aplica por primera vez, esto puede conducir a problemas de arranque. Para protegerse contra esto, he incluido un supervisor de voltaje opcional (TPS3839G33DBZ) que solo establecerá el pin en el pin de chip al alto cuando el voltaje está por encima de un umbral apropiado. Sin embargo, aún no he notado que Brown-Outs sea un problema, por lo que a veces me salteo este componente.
Un par de dispositivos equipados con lora en sus recintos
Combinar un ESP8266 con un módulo Lora es un tramo cuando se trata de GPIO disponible. Esta placa está diseñada para funcionar con los módulos Lora SX1276 (enlace de ejemplo), y se inclina mucho en el diseño desde aquí, que minimiza los puertos necesarios al vincular tres de los pines del módulo Lora (Dio0, 1 y 2) a un pin ESP8266 a través de tres diodos (huellas de tablero D9, D10 y D11 respectivamente). Esta configuración de compartir Dio necesita un manejo especial en el software. Sin embargo, para las comunicaciones simples de Lora solo se necesita DIO0, por lo que para mis tableros de Lora hasta la fecha he unido D9, y dejé D10 y D11 desconectados.
Para las pruebas, puede soldar directamente las antenas comunes de alambre helicoidal (a menudo incluida con la compra de un módulo) directamente al pasador de antena del módulo. Sin embargo, la gama apestará. Para un mejor rango, adjunte una antena de mayor ganancia (uso antenas 5DBI compradas aquí). Incluyo una huella IPEX U.FL-R en AE1. Alternativamente, los conectores SMA montados en el borde se ajustan muy bien en el borde del tablero sobre la huella J5. Estos se pueden conectar de la siguiente manera (este ejemplo está utilizando la Junta V4, pero lo mismo funcionará para V5): arriba e inferior.
Notas
Un solo ADC está disponible en el ESP8266, con un rango de medición de 0V a 1V. Por lo tanto, para medir voltajes más altos, se necesita un divisor de voltaje. A bordo del V5, el ADC se puede utilizar para periféricos conectados a la toma de audio o para monitorear el voltaje de la batería si JP11 o JP5 están cerrados.
Las conexiones a través del conector de audio pasan por un divisor con R1 = 470 kΩ (componente R7), R2 = 200 kΩ (componente R8). Esto permite la medición de voltajes de hasta 3.3V (3.3V se reduce a aproximadamente 0.985 V; calibre la señal para mayor precisión).
La conexión de la batería agrega una resistencia adicional de 330 kΩ (componente R10) en serie con el componente R7, lo que conduce a R1 = 800 kΩ. Esto aumenta el rango de medición de hasta 5V.
Elegí usar un conector de audio de 4 polos (modelo PJ313E) para conectar los sensores de humedad a la placa. Por ahora, solo tres de los cuatro polos están conectados; El cuarto es un repuesto con un ojo a la funcionalidad futura. A partir de la base hasta la punta del enchufe de audio, las conexiones actuales son:
| Polo | Conexión |
|---|---|
| 1 | Gnd |
| 2 | Sin conexión |
| 3 | 3.3V (de GPIO12, a través de JP3) |
| 4 | A ADC a través de un divisor de voltaje de 3.3V |
He experimentado un problema con mi enchufe elegido (o tal vez la combinación del enchufe y los enchufes que uso): por defecto, no puede hacer una conexión a los cuatro postes. Esto se puede ver en la imagen superior aquí, donde no se desvía el pin de contacto más profundo (polo 4). Para solucionar el problema, corté/archivé la parte frontal de plástico sobresaliente del enchufe (imagen inferior)
Las pequeñas bombas de agua y el tubo flexible necesario están ampliamente disponibles. Como se discutió anteriormente, son buggers eléctricamente ruidosos; De ahí por qué el conector de la bomba está en la esquina más alejada del tablero desde el ESP, y se protege detrás de dos condensadores propios. Normalmente funciona con GPIO5, a través de un MOSFET de canal N, o se puede operar manualmente con el botón opcional SW5.
Para simplificar, y dado que las bombas pequeñas parecen ser capaces de funcionar en un rango de voltaje bastante amplio, la bomba se suministra con cualquier voltaje que esté alimentando actualmente la placa (definida por el estado de los circuitos de intercambio de energía): si el USB está conectado, será 5V menos el voltaje hacia adelante en los diodos D2 y D8; Si se alimenta la batería, será el voltaje de la batería menos la caída D8. En la práctica, realmente no hace mucha diferencia: se bombeará un poco más de agua durante un tiempo determinado cuando esté en USB frente a la batería.
Para la conexión de la placa de la bomba, hay una huella para un enchufe DC-002. Consideré usar un zócalo USB, pero decidí que era engañoso ya que el voltaje de salida no siempre es el 5V que uno esperaría de USB. En la placa en la foto de arriba, me salté el enchufe de power-jack y simplemente conecté un enchufe de doble pasador de pasador.
Elegí esta casilla de proyecto porque es barato, ampliamente disponible y del tamaño justo para la PCB y una batería de 18650.
Se necesitan tornillos M2.6 de 8 mm para unir el tablero a la caja, como estos.
| Propiedad | Módulo | Conexión de tablero | Ficha de datos | Enlace de compra* |
|---|---|---|---|---|
| Temperatura, presión, humedad | BME280 | Directo (encabezados de 2.54 mm) | Enlace | |
| Lux | BH1750 | Directo (encabezados de 2.00 mm) | Enlace | Aliexpress |
| CO 2 | MH-Z19C | Directo (encabezados de 2.54 mm) | Enlace | Aliexpress |
| Humedad | "Sensor de humedad del suelo capacitivo V1.2" | Enchufe de audio | Enlace (versión anterior) | Aliexpress |
* He comprado en esos enlaces en el pasado, pero no tienen garantía. Tampoco planeo actualizarlos cuando inevitablemente caducan.
Esta es una temperatura muy útil, humedad y sensor de presión. Con el punto de montaje actual del sensor, se encuentra parcialmente fuera del recinto. Me parece conveniente porque no tengo que preocuparme por el flujo de aire dentro de la caja. Si la geometría actual lo ofende, o necesita un dispositivo más robusto donde el sensor no se arriesgue a dañarse, considere un rediseño en el punto de conexión o elija un sensor alternativo con una jaula incorporada.
Es posible que los alfileres soldados se interpongan en el camino de cerrar la tapa del recinto correctamente. Si este es el caso, puede recortarlos antes de soldar, como he hecho aquí.
El sensor puede comunicarse por I2C o SPI; La mayoría de las personas parecen usar I2C, para lo cual no necesita hacer alteraciones de la junta. Si desea la interfaz SPI, cierre un par de puentes de soldadura en la parte trasera para conectar los pines adicionales. A bordo del V5, una de estas conexiones también alimenta el sensor de humedad, por lo que se necesitarían alteraciones si desea ejecutar tanto el BME280 (con interfaz SPI) como un sensor de humedad simultáneamente.
Notas
Este es un fotodiodo simple y confiable, combinado con una interfaz I2C. Puede comprarlo en varios factores de forma, con la versión de bola de luz es particularmente conveniente para nuestros propósitos. Recorte las partes de plástico del conector incorporado, y esto ahora puede conectarse directamente a un encabezado estándar de pin de 2 mm, como se incluye en la placa V5. La bola ligera se puede sacar del sensor y montar directamente en la parte superior del recinto.
Notas
Este es el sensor más caro que uso, pero creo que vale la pena frente a las alternativas de VOC más baratas. Se comunica sobre el bus UART (así que ESP8266 PINS RX y TX). Por lo tanto, debe asegurarse de que el sensor no esté conectado si está tratando de flashear el ESP o usar su interfaz serie.
Para usar el MH-Z19C en la placa V5, debe conectar dos puentes de soldadura en la parte trasera. En retrospectiva, no puedo pensar en un buen caso cuando no querrías esos puentes, por lo que probablemente solo intercambiaré las almohadillas por trazas continuas en cualquier versión futura.
Notas
Para evitar que el sensor de humedad funcione constantemente y drene la batería, se alimenta directamente por GPIO12. Cierre la almohadilla derecha de JP3 a la almohadilla central para hacer esa conexión. No dibuja mucha corriente, por lo que no he tenido problemas para alimentar directamente el sensor directamente desde un pasador GPIO. Si resultó ser un problema de marrón/estabilidad en el futuro, esta conexión necesitaría ser reemplazada por un MOSFET.
El tablero fue diseñado en Kicad y fabricado por JLCPCB. Los archivos KICAD y la información requerida por JLCPCB se proporcionan en los directorios Board_V*.
Por favor, comprenda con el esquema; Sé que es feo y desesperadamente que necesita dividirse en múltiples partes. ¡Recuerde, este es mi primer diseño de PCB!

Diseño del tablero V5
Por conveniencia, uso Tasmota para todos los dispositivos cuando sea posible. Tasmota no puede manejar a Lora, por lo que para estos dispositivos uso Micropython.
Enlace de instalación web
Asegúrese de instalar la versión "sensores" de la imagen Tasmota.
Aquí hay algunas capturas de pantalla de Tasmota del dispositivo V4 que se muestra en la parte superior de este readme.
| 
Aquí están la configuración principal que cambié de su valor predeterminado en la interfaz de control. Lea sobre estas y otras configuraciones aquí.
Notas
POWER2 ON el comandoOutput Hi en lugar de Relay 2 . Luego se establecerá alto temprano en el proceso de arranque de Tasmota, y aún se apagará cuando el microcontrolador duerma profundamente.Busque aquí mi software e instrucciones de Lora Micropython: https://github.com/brev-dev/lora_esp8266_sensor_mqtt_bridge.
Aunque no está cubierto por este repositorio, aquí hay algunas notas rápidas sobre dónde se encuentran estos dispositivos en mi configuración completa de inicio.
La configuración de mi casa está diseñada para lograr estos objetivos:
Para habilitar el control de temperatura en cada habitación, los radiadores están enchufados a enchufes inteligentes ESP8285 tasmotizados.
El "Hub" es una Raspberry Pi 4 equipada con mosquitto, Nodered, InfluxDB y Grafana. Mis flujos norantados probablemente podrían simplificarse reemplazando gran parte de ellos con, por ejemplo, Homeassistant, pero no he investigado eso. La combinación de InfluxDB y Grafana se usa para almacenar y visualizar los datos históricos (ejemplos a continuación), junto con la aplicación "MQTT Dash" en nuestros teléfonos para monitorear el estado actual y cambiar la temperatura y los niveles de activación de humedad. La pila de software RPI utiliza Docker e IoTStack para facilitar la configuración y el mantenimiento. Andreas Spiess tiene algunos videos excelentes sobre el tema, que incluyen: #255, #295 y #352.


