187 lines
5.8 KiB
Markdown
187 lines
5.8 KiB
Markdown
# Sistema de Riego Automático — ESP8266 + Docker
|
|
|
|
Stack completo para control y monitorización de riego con ESP8266/Tasmota,
|
|
Mosquitto, Python controller, InfluxDB y Grafana.
|
|
|
|
## Estructura del proyecto
|
|
```
|
|
└── docs/
|
|
├── tasmota-config.md # Comandos de configuración Tasmota
|
|
```
|
|
|
|
## Hardware
|
|
|
|
| Dispositivo | IP | Detalle |
|
|
|---|---|---|
|
|
| ESP8266 (Tasmota 15.4.0) | `192.168.1.42` | MAC `18:FE:34:D3:01:BA` |
|
|
| Broker Mosquitto | `192.168.1.200:1883` | Docker en este ordenador |
|
|
|
|
### Cableado GPIO (verificado)
|
|
|
|
| Pin NodeMCU | GPIO | Función | Notas |
|
|
|---|---|---|---|
|
|
| D1 | GPIO5 | Relay_i → IN1 | Motor riego (Relay1) |
|
|
| D6 | GPIO12 | Relay_i → IN2 | Motor abastecimiento solución (Relay2) |
|
|
| D7 | GPIO13 | Relay_i → IN3 | Motor abastecimiento agua (Relay3) |
|
|
| D2 | GPIO4 | SR04 Trig | Directo, sin resistencias |
|
|
| D5 | GPIO14 | SR04 Echo | Con divisor de tensión 5V→3.3V |
|
|
|
|
> ⚠️ Tasmota estándar no incluye SR04 — instalar `tasmota-sensors.bin` primero.
|
|
> La actualización OTA borra los GPIOs; hay que reconfigurarlos después.
|
|
> El módulo SunFounder es activo LOW → todos los relés usan `Relay_i` (inverted).
|
|
|
|
### Lógica de riego — Tasmota Rules (autónoma)
|
|
|
|
Los tres motores se controlan mediante una Rule en el propio ESP8266, sin necesitar el broker MQTT.
|
|
|
|
**Roles de cada motor:**
|
|
|
|
| Relay | Pin | Motor | Función |
|
|
|---|---|---|---|
|
|
| Relay1 | D1/GPIO5 | Riego | Distribuye agua a las plantas |
|
|
| Relay2 | D6/GPIO12 | Abastecimiento sustrato | Aporta solución nutritiva al depósito |
|
|
| Relay3 | D7/GPIO13 | Abastecimiento agua | Aporta agua limpia al depósito |
|
|
|
|
**Comportamiento:**
|
|
|
|
| Condición SR04 | Acción |
|
|
|---|---|
|
|
| Distancia > 30 cm | Relay2 y/o Relay3 ON (según modo) |
|
|
| Distancia < 10 cm | Relay2 y Relay3 OFF (Relay1 sigue) |
|
|
|
|
Relay1 (riego) arranca y para por comando — independiente del sensor.
|
|
Si se para el riego, los motores de abastecimiento siguen hasta que la distancia baje de 10 cm.
|
|
|
|
**Rules activas en el ESP8266:**
|
|
|
|
**Rule1** — lógica de sensores y motores + gestión automática de `Mem2`:
|
|
```
|
|
Rule1 ON SR04#Distance>30 DO if (mem1==1) Backlog Power2 ON; Power3 ON elseif (mem1==2) Power3 ON elseif (mem1==3) Power2 ON endif ENDON ON SR04#Distance<10 DO Backlog Power2 OFF; Power3 OFF ENDON ON Power1#State=1 DO Mem2 1 ENDON ON Power1#State=0 DO Mem2 0 ENDON
|
|
Rule1 1
|
|
```
|
|
|
|
**Rule2** — reanudación automática tras corte de luz:
|
|
```
|
|
Rule2 ON System#Boot DO if (mem2==1) Power1 ON endif ENDON
|
|
Rule2 1
|
|
```
|
|
|
|
`Mem2` se gestiona automáticamente: se activa al encender el riego y se desactiva al apagarlo. No hace falta incluirlo en los comandos.
|
|
|
|
**Comandos de operación:**
|
|
|
|
| Acción | Comando |
|
|
|---|---|
|
|
| Encender modo completo (agua + sustrato) | `Backlog Mem1 1; Power1 ON` |
|
|
| Encender solo agua | `Backlog Mem1 2; Power1 ON` |
|
|
| Encender solo sustrato | `Backlog Mem1 3; Power1 ON` |
|
|
| Parar solo riego (abastecimiento sigue hasta <10 cm) | `Power1 OFF` |
|
|
| Parar todo | `Backlog Power0 OFF; Mem1 0` |
|
|
|
|
**Variables persistentes en flash:**
|
|
|
|
| Variable | Función |
|
|
|---|---|
|
|
| `Mem1` | Modo activo (1=completo, 2=solo agua, 3=solo sustrato, 0=parado) |
|
|
| `Mem2` | Auto-reanudación tras corte de luz — gestionado automáticamente por Rule1 |
|
|
|
|
> **Arquitectura final:** esta lógica es autónoma y funciona sin red. El objetivo es
|
|
> que el broker **Mosquitto** reciba la telemetría del sensor vía MQTT y el
|
|
> **controller Python** envíe los comandos `Power1/2/3` con lógica adicional
|
|
> (franjas horarias, niveles mínimos, alertas). Las Rules y el broker coexisten:
|
|
> las Rules actúan como capa de seguridad local aunque el broker no esté disponible.
|
|
|
|
Antes de levantar el stack, configura Tasmota: ver [docs/tasmota-config.md](docs/tasmota-config.md).
|
|
|
|
## Servicios Docker
|
|
|
|
| Servicio | Puerto | Descripción |
|
|
|---|---|---|
|
|
| mosquitto | 1883 | Broker MQTT (accesible desde ESP8266) |
|
|
|
|
## Variables de entorno clave
|
|
|
|
Ejemplo de programación:
|
|
```json
|
|
[{"days":["mon","wed","fri"],"time":"07:00","duration_minutes":20}]
|
|
```
|
|
|
|
## Documentación
|
|
|
|
- [Configuración Tasmota](docs/tasmota-config.md)
|
|
|
|
---
|
|
|
|
## Cómo se encontró el ESP8266
|
|
|
|
# ESP8266 - Localizar dispositivo en la red local
|
|
|
|
## Problema
|
|
|
|
Tienes un ESP8266 conectado a la red WiFi pero no recuerdas su IP.
|
|
|
|
## Solución: escaneo de red
|
|
|
|
### 1. Identificar tu red
|
|
|
|
```bash
|
|
ip route | grep default
|
|
```
|
|
|
|
Esto muestra tu puerta de enlace y la IP de tu máquina. En este caso:
|
|
- Red: `192.168.1.0/24`
|
|
- Tu PC: `192.168.1.41`
|
|
- Router: `192.168.1.1`
|
|
|
|
### 2. Ping sweep para descubrir dispositivos activos
|
|
|
|
```bash
|
|
for i in $(seq 1 254); do ping -c 1 -W 1 192.168.1.$i > /dev/null 2>&1 & done; wait
|
|
```
|
|
|
|
Envía un ping a cada IP posible de la red (`192.168.1.1` hasta `192.168.1.254`) en paralelo. Esto hace que tu sistema guarde en la tabla ARP la MAC de cada dispositivo que responde.
|
|
|
|
### 3. Consultar la tabla ARP
|
|
|
|
```bash
|
|
ip neigh show | grep -v FAILED | sort -t . -k 4 -n
|
|
```
|
|
|
|
Muestra todos los dispositivos detectados con su IP y dirección MAC. El truco está en identificar la MAC del ESP8266.
|
|
|
|
### 4. Identificar el ESP8266 por su MAC (OUI)
|
|
|
|
Los primeros 3 bytes de una MAC identifican al fabricante (OUI). Espressif Systems, el fabricante del ESP8266/ESP32, tiene estos prefijos conocidos:
|
|
|
|
| Prefijo MAC | Fabricante |
|
|
|---|---|
|
|
| `18:FE:34` | Espressif Systems |
|
|
| `5C:CF:7F` | Espressif Systems |
|
|
| `60:01:94` | Espressif Systems |
|
|
| `A0:20:A6` | Espressif Systems |
|
|
| `84:F3:EB` | Espressif Systems |
|
|
|
|
En el escaneo apareció:
|
|
|
|
```
|
|
192.168.1.42 lladdr 18:fe:34:d3:01:ba REACHABLE
|
|
```
|
|
|
|
El prefijo `18:FE:34` confirma que es un dispositivo Espressif → **es el ESP8266**.
|
|
|
|
### 5. Verificar conectividad
|
|
|
|
```bash
|
|
ping -c 3 192.168.1.42
|
|
```
|
|
|
|
Responde correctamente con ~120ms de latencia (normal para WiFi).
|
|
|
|
## Resultado
|
|
|
|
| Dato | Valor |
|
|
|---|---|
|
|
| IP del ESP8266 | `192.168.1.42` |
|
|
| MAC | `18:fe:34:d3:01:ba` |
|
|
| Fabricante | Espressif Systems |
|