Blog
ESP32 + LoRa: nodo sensor de largo alcance (hasta 8 km)
El problema
El WiFi funciona de maravilla, hasta que necesitas poner un sensor en tu jardín a 200 metros. O en una granja al otro lado del valle. O dentro de un almacén de metal. El WiFi se muere a los 50 metros. El Bluetooth, a los 10.
LoRa lo cambia todo. Con el módulo LoRa E32 (915MHz, 1W), puedes enviar datos del sensor hasta 8 kilómetros, sin antena de telefonía, sin WiFi y sin cuotas mensuales.
Qué vas a construir
Un nodo sensor LoRa alimentado por batería que:
- Lee temperatura y humedad
- Transmite los datos por LoRa a un receptor
- Entra en deep sleep 10 minutos entre lecturas (la batería dura meses)
Dificultad: Principiante | Tiempo: 45 minutos | Coste: ~40,00 $ en piezas
Hardware necesario (lista de materiales)
| Componente | Modelo | Cant. | Precio | Comprar |
|---|---|---|---|---|
| Microcontrolador (emisor) | ESP32 DevKitC V4 | 1 | 13,49 $ | Ver producto |
| Microcontrolador (receptor) | ESP32-C3 SuperMini | 1 | 7,49 $ | Ver producto |
| Módulo LoRa | E32-915T30D (915MHz) | 2 | 11,99 $ c/u | Ver producto |
| Sensor de temperatura/humedad | DHT22 | 1 | 5,24 $ | Ver producto |
| Alimentación por batería | Escudo de batería 18650 | 1 | 11,99 $ | Ver producto |
| Protoboard | 830 puntos | 1 | 4,49 $ | Ver producto |
| Cables jumper | M-M 40 uds. | 1 | 2,99 $ | Ver producto |
Aviso sobre la frecuencia: los módulos E32 existen en versiones de 433MHz, 868MHz y 915MHz. NO pueden comunicarse entre sí. Asegúrate de que ambos módulos tengan la MISMA frecuencia. En EE. UU. se usa 915MHz.
Paso 1: Cableado (nodo emisor)
El módulo LoRa E32 usa UART serie, mucho más simple que los módulos LoRa basados en SPI. ¡Nada de librerías complicadas!
| Pin E32 LoRa | Pin ESP32 | Nota |
|---|---|---|
| VCC | 5V | Alimentación (revisa las especificaciones de tu módulo) |
| GND | GND | Tierra |
| RXD | GPIO 17 (TX2) | RX del E32 ← TX del ESP32 |
| TXD | GPIO 16 (RX2) | TX del E32 → RX del ESP32 |
| M0 | GND | Configurado en modo transmisión |
| M1 | GND | Configurado en modo transmisión |
| DATA DHT22 | GPIO 13 | Datos del sensor |
Cruce TX↔RX: el UART es como una llamada de teléfono: tu boca (TX) se conecta con el oído del otro (RX). Cruza siempre las conexiones: TXD del módulo → RX2 del ESP32, RXD del módulo → TX2 del ESP32.
Paso 2: Código del emisor
Sube esto al ESP32 emisor (el que lleva el sensor DHT22):
#include <HardwareSerial.h>
#include "DHT.h"
HardwareSerial LoRaSerial(2); // ESP32 Serial2 (GPIO 16, 17)
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Deep sleep: 10 minutes between readings
#define uS_TO_S_FACTOR 1000000ULL
#define TIME_TO_SLEEP 600
void setup() {
Serial.begin(115200);
Serial.println("sensbench LoRa Sensor Node");
LoRaSerial.begin(9600);
dht.begin();
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor read failed!");
} else {
String data = "T:" + String(t, 1) + "C H:" + String(h, 1) + "%";
Serial.println("Sending: " + data);
LoRaSerial.println(data);
}
Serial.println("Deep sleeping for 10 minutes...");
Serial.flush();
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
}
void loop() {
// Not reached after deep sleep
}
Paso 3: Código del receptor
Sube esto al ESP32 receptor (el conectado a tu ordenador):
#include <HardwareSerial.h>
HardwareSerial LoRaSerial(2);
void setup() {
Serial.begin(115200);
Serial.println("sensbench LoRa Receiver");
LoRaSerial.begin(9600);
}
void loop() {
if (LoRaSerial.available()) {
String data = LoRaSerial.readString();
Serial.print("Received: ");
Serial.println(data);
}
}
Paso 4: Pruébalo
- Alimenta el nodo emisor con el escudo de batería 18650
- Conecta el receptor a tu ordenador y abre el Monitor Serie (115200 baudios)
- Cada 10 minutos verás llegar la temperatura y la humedad desde hasta 8 km de distancia
Por qué funciona tan bien
- Deep Sleep: el ESP32 consume solo 10µA en deep sleep. Con una batería 18650 de 2000mAh, el nodo sensor puede funcionar más de 3 meses con una sola carga.
- LoRa por UART: a diferencia del LoRa basado en SPI (SX1276), el módulo E32 usa comunicación serie simple. Sin librerías complejas, sin líos de cableado SPI, sin registros de configuración.
- Potencia de 1W (30dBm): el E32-915T30D es la versión de alta potencia. Los módulos estándar emiten 20dBm (100mW). Este emite 30dBm (1000mW): 10 veces más potencia, 3 veces más alcance.
Ir más allá
- Añade más nodos sensores: cada nodo envía datos en un horario distinto para evitar colisiones
- Reenvía a la nube: conecta el ESP32 receptor al WiFi y pasa los datos LoRa a MQTT
- Energía solar: añade una placa solar pequeña al escudo de batería 18650 para una instalación permanente
- Monta una malla: varios nodos receptores pueden retransmitir los datos a distancias aún mayores