Imagina una malla Meshtastic de excursionistas en la cordillera intercambiando su posición por radio LoRa, sin señal celular ni WiFi a la vista. Ahora imagina que uno de esos nodos tiene un puente hacia Internet y publica en tiempo real la telemetría de toda la red en un dashboard que abre tu equipo de rescate desde Santiago. Ese puente se llama gateway Meshtastic, y en este tutorial lo armamos con la unidad C6L de M5Stack: una placa del tamaño de un cubo Rubik que integra ESP32-C6, LoRa SX1262, WiFi 6 y OLED en la misma cajita.
Al terminar vas a saber por qué la C6L es una candidata natural para este rol, cómo alimentarla con panel solar y baterías 18650 para dejarla trabajando en un tejado sin intervención, y cómo configurar Meshtastic + MQTT + Node RED para transformar mensajes LoRa en gráficos en vivo. Es un proyecto de nivel intermedio: si nunca tocaste Meshtastic conviene primero armar un nodo básico, pero si ya tienes uno andando, este paso te abre el mundo de la telemetría IoT sobre malla.
¿Qué es exactamente un gateway Meshtastic?
Meshtastic es una plataforma de mensajería descentralizada sobre radios LoRa. Los nodos forman una red en malla: cada mensaje salta de un dispositivo a otro hasta llegar a destino, lo que multiplica el alcance real de las radios individuales y hace que la red siga funcionando aunque caiga la mitad de los nodos. Todo esto ocurre en bandas de uso libre. 868 MHz en Chile y buena parte de Latinoamérica, 915 MHz en EE. UU., 433 MHz en algunos países europeos. sin depender de operadores ni suscripciones.
Un gateway es un nodo especial que además de participar en la malla se conecta a Internet (por WiFi, Ethernet o incluso 4G) y publica en un broker MQTT los paquetes que circulan por LoRa. Esa publicación abre tres puertas concretas:
- Unir mallas geográficamente separadas: un gateway en Coyhaique reenvía a un broker público los mensajes de la malla local; un segundo gateway en Puerto Montt está suscrito al mismo topic y los reinyecta en su red. La distancia entre mallas ya no importa mientras haya Internet en cada punta.
- Sacar telemetría hacia herramientas externas: dashboards, InfluxDB, Home Assistant, alertas por Telegram. Cualquier cosa que sepa hablar MQTT.
- Monitorear la red desde afuera: ver quién habla, qué SNR/RSSI reporta cada nodo, dónde están los agujeros de cobertura.
Hay un compromiso incómodo: al enchufar la malla a Internet renuncias en parte a la autonomía que hace a Meshtastic interesante. Por eso muchas comunidades limitan los canales que espejan al broker y prohíben publicar mensajes personales. Antes de encender tu gateway conversa con la comunidad local sobre qué canales corresponde retransmitir.

La C6L de M5Stack: qué trae adentro
Antes de meternos con el armado conviene entender por qué elegimos esta unidad. Meshtastic soporta docenas de placas y muchas son más baratas, así que la elección no es obvia.
La C6L está basada en el ESP32-C6 de Espressif, un SoC bastante nuevo que combina dos núcleos RISC-V (uno principal a 160 MHz, otro de bajo consumo a 20 MHz), 16 MB de flash y. lo importante para nosotros. WiFi 6 en 2.4 GHz, Bluetooth Low Energy y Zigbee/Thread. Encima de eso M5Stack le agregó un transceptor LoRa SX1262 capaz de operar entre 868 y 923 MHz, o sea que en la misma placa conviven la radio de la malla y la conexión a Internet. Eso es lo que la hace un buen gateway "todo en uno".
El bonus track incluye un OLED monocromo de 0.66" (64×48 px) para mostrar estado sin tocar el celular, un LED RGB WS2812C, un buzzer, dos botones (usuario + reset/boot), un conector Grove HY2.0 de 4 pines para expansión y una alimentación por USB-C que también sirve para programar. Ojo: la unidad no tiene batería interna, así que si la vas a poner al aire libre necesitas resolver la energía aparte.
¿ESP32-C6 vs nRF52840? Las dos familias más comunes en placas Meshtastic tienen filosofías distintas: el ESP32-C6 gana por versatilidad (WiFi integrado te evita un módulo extra en el gateway) y el nRF52840 gana por consumo (ideal para nodos a batería que solo hacen LoRa). Para un gateway alimentado por panel solar el ESP32-C6 es la elección lógica, porque el WiFi lo vas a usar sí o sí y el consumo pasa a un plano secundario cuando tienes 10 W de panel encima.
Hardware: cómo armamos el gateway físico
Este es el listado del equipo que vamos a meter dentro de una caja estanca IP65 de 20 × 20 cm. El objetivo es que quede completamente autónomo, apto para un tejado o poste durante meses sin intervención.
Placa base de montaje
Sobre el fondo de la caja va una placa de MDF de 3 mm cortada a la medida. Es cómoda para atornillar componentes y hacer prototipos, pero si tu clima es muy húmedo conviene reemplazarla por acrílico o PVC expandido: el MDF absorbe humedad y con el tiempo se deforma. Otra opción es sellarla con un par de manos de barniz poliuretánico antes de montar nada.
Almacenamiento de energía
Tres baterías 18650 recargables Panasonic NCR18650-BD de 3.7 V nominales y 3000 mAh cada una, en paralelo. Suman ~9000 mAh a 3.7 V = ~33 Wh de energía útil. Con un consumo típico del gateway de 200 mA @ 5 V (1 W), eso da autonomía teórica de ~33 horas sin sol. En invierno chileno con días nublados encadenados esa autonomía puede quedar corta; si vives en zona lluviosa considera duplicar el banco a 6 celdas.
Un consejo caro: no ahorres en baterías. Las 18650 clones, sin marca o "extra premium 9800 mAh" son mentira física (una celda 18650 real está entre 2500 y 3500 mAh). Compra Panasonic, Samsung, Sony/Murata o LG originales.
Controlador de carga solar (MPPT)
Este es el corazón del subsistema de energía. Usamos una Waveshare Solar Power Manager modelo D, que integra:
- Carga desde panel solar con MPPT (Maximum Power Point Tracking) para exprimir el rendimiento
- Rango de entrada solar de 6 a 24 V, útil para paneles de 12 V o 18 V nominales
- Carga de respaldo por USB-C, para dejar cargando las baterías en el banco antes de instalar el gateway
- Salida regulada de 5 V / 3 A para alimentar la C6L
- Protecciones contra sobrecarga, sobredescarga e inversión de polaridad
- LEDs de estado para diagnosticar sin desarmar
Waveshare tiene varias variantes (modelos A/B/C/D); el D es el más completo, y su wiki oficial tiene el comparativo si quieres decidir por precio.

Unidad C6L
Va atornillada al fondo, alimentada por un cable USB-C que sale del controlador de carga. En esta primera versión las antenas LoRa y WiFi son las que trae la unidad, montadas dentro de la caja. Si tu instalación queda en zona con obstáculos o buscas más alcance vale la pena reemplazar la antena LoRa por una externa de mayor ganancia con conector IPEX o SMA (según cómo la modifiques).
Panel solar
Un panel de 10 W con soportes para caño alcanza para mantener el banco de 3 × 18650 cargado en un día chileno promedio, incluso en Punta Arenas si el panel apunta bien al norte. Para regiones muy nubladas (Aysén, sur de Chiloé) sube a 20 W: el sobredimensionamiento del panel es la forma más barata de comprar autonomía en invierno.
Firmware Meshtastic: qué versión cargar
Antes de configurar nada tienes que asegurarte de que la C6L tenga un firmware Meshtastic que soporte bien el ESP32-C6. En este momento el soporte está en desarrollo activo y no todas las versiones se comportan igual.
Recomendación práctica al momento de escribir esto:
- La 2.7.15 es estable en general, pero en la C6L da problemas de asociación WiFi.
- La 2.7.20 resolvió el bug de WiFi en pruebas y funciona sin drama.
Para flashear entra a flasher.meshtastic.org desde Chrome o Edge, conecta la unidad por USB-C, elige la placa y la versión, y presiona Flash. El proceso demora ~1 minuto. Si prefieres CLI puedes usar esptool.py directamente con el binario que descargues del repositorio meshtastic/firmware.
Configuración: la parte donde se decide todo
Meshtastic se configura habitualmente desde la app móvil vía Bluetooth. Pero acá hay un detalle importante: al habilitar el WiFi en la C6L el firmware desactiva el BLE automáticamente. O sea que si dejas todo por Bluetooth quedas afuera apenas actives WiFi.
Solución: usa el cliente web en client.meshtastic.org con la C6L conectada por cable USB. Funciona en Chrome/Edge, no requiere instalar nada, y podes editar todos los parámetros sin depender de la conexión inalámbrica.
Configuración WiFi
En la sección Radio Config → Network habilita WiFi Enabled, carga el SSID y la contraseña de tu red. Guarda y reinicia el nodo. En el OLED aparece un menú extra con el estado de la conexión: si te dice Connected y muestra la IP local, estás listo.
Si el nodo queda pegado en Connecting… revisa:
- La red debe ser 2.4 GHz (el ESP32-C6 no soporta 5 GHz aún en Meshtastic).
- La contraseña no puede tener caracteres raros (
&,%, comillas). Cambia a algo alfanumérico para probar y después endureces. - El router puede estar aislando dispositivos IoT; en algunos ISP chilenos hay "Guest AP" separadas que bloquean el tráfico local.

Configuración MQTT
MQTT se activa en tres lugares distintos del firmware, y saltarse alguno es la causa más común de "el gateway está conectado pero no publica nada":
- Radio Config → Module Config → MQTT: aquí van los datos del broker (host, puerto, usuario, contraseña, TLS on/off) y se enciende
Enabled. - Channels → Primary channel: hay que marcar al menos
Uplink Enabledpara que ese canal se espeje al broker. - Radio Config → MQTT Root Topic: define el prefijo bajo el cual se publica (por defecto
msh/2/e/).
Para pruebas rápidas te sugerimos el broker público de EMQX:
- Host:
broker.emqx.io - Port:
1883 - TLS: OFF
- Username / Password: vacíos (aunque el cliente igual les asigna algo random, no importa)
Habilita también Encryption Enabled = OFF temporalmente y JSON Enabled = ON para que los mensajes lleguen al broker en formato legible (sino los ves en binario y no se puede depurar).
⚠️ En producción, jamás dejes un broker público sin cifrado con datos reales. Configura tu propio broker MQTT (Mosquitto en un VPS chileno funciona regio) con usuario/contraseña y TLS. El público es solo para verificar que la cadena funciona.
Rol del nodo dentro de la malla
Meshtastic define varios roles: CLIENT, CLIENT_MUTE, ROUTER, TRACKER, SENSOR, REPEATER. No existe un rol llamado GATEWAY: la función de gateway se logra habilitando MQTT en un nodo que además tiene alguno de los roles anteriores.
Elección práctica:
- Si el gateway está en un lugar de altura, con buena antena y va a servir de "columna vertebral" para la malla local, dale rol ROUTER (retransmite todo lo que escucha).
- Si es un nodo cualquiera que además tiene Internet, déjalo como CLIENT por defecto. Así retransmite mensajes como un nodo normal y encima los publica en MQTT.
CLIENT_MUTEno sirve para un gateway: no retransmite por LoRa, entonces la malla no gana nada.
Para el gateway del ejemplo va CLIENT porque está ubicado a nivel de piso, no en una posición estratégica.
Test end to-end: telemetría real en un dashboard Node RED
Con el gateway andando queremos comprobar que la cadena LoRa → MQTT → Node RED → dashboard funciona. Para eso armamos una prueba simple: dos nodos Meshtastic (pueden ser cualquiera, no tienen que tener MQTT habilitado) envían telemetría de tensión de batería por la malla; el gateway la publica en el broker; Node RED se suscribe y actualiza dos "gauges" en un dashboard web.
Paso 1: habilitar telemetría en los nodos
En cada nodo cliente ve a Radio Config → Module Config → Telemetry y activa Device metrics enabled con un intervalo de Device update interval = 300 segundos. Cada 5 minutos el nodo enviará su nivel de batería, voltaje y uso de CPU por LoRa.
Paso 2: suscribirse con un cliente MQTT
Antes de meter Node RED conviene ver que los mensajes están llegando al broker. Para eso MQTTX es lo más simple: conéctate a broker.emqx.io:1883, suscríbete al topic que definiste (por ejemplo msh/2/json/#) y deberías ver paquetes nodeinfo, position y telemetry con el ID hexadecimal del nodo remitente.
Si ves paquetes → gateway OK. Si no ves nada → revisa los tres puntos de MQTT del paso anterior.
Paso 3: flujo Node RED
Node RED es una herramienta visual de "programación por cables" que corre en cualquier PC, Raspberry Pi o VPS. El flujo tiene 6 nodos:
mqtt insuscrito asalsimesh/2/json/#(reemplaza por tu topic)jsonpara parsear el payload de string a objetofunctionque extraemsg.payload.payload.battery_levely guarda el ID del nodo emisor- Dos
switchque separan por ID de nodo (uno para cada gauge) - Dos
ui_gaugede dashboard que muestran el porcentaje
El código del bloque function es corto:
// Filtra solo paquetes de telemetría con nivel de batería
if (msg.payload.type !== "telemetry") return null;
if (msg.payload.payload.battery_level === undefined) return null;
return {
payload: msg.payload.payload.battery_level,
nodeId: msg.payload.from.toString(16)
};
El dashboard resultante muestra en tiempo real la batería de cada nodo remoto. Con eso comprobamos que la cadena completa LoRa → gateway → broker → Node RED → UI funciona sin fisuras.

Variantes y mejoras
El proyecto tal como está ya sirve, pero hay cinco extensiones que valen la pena:
- Antena LoRa externa: reemplaza la antena stub interna por una de 5 dBi con cable RG-174 y conector SMA hembra en la caja. La ganancia extra puede duplicar tu alcance en línea directa, especialmente útil si el gateway está lejos del techo.
- Persistencia con InfluxDB + Grafana: agrega dos nodos más al flujo Node RED que escriban en InfluxDB, y usa Grafana para dashboards históricos. Te queda un "sistema completo" apto para reportes semanales o análisis de patrones.
- Alertas por Telegram: un nodo
telegram outen Node RED que dispare cuando la batería de algún nodo remoto baje de 20%. Ideal si dejaste nodos autónomos que dependen de solar. - Backup por 4G: si tu gateway está lejos del WiFi doméstico, agrega un módulo USB celular (por ejemplo Huawei E3372) al ESP32-C6 no le sirve directamente, pero puedes intercalar una Raspberry Pi Zero 2 W que comparta Internet y lleve el broker MQTT local.
- Mapa en tiempo real: usa Meshmap o meshview apuntando a tu broker, y tendrás la posición de todos los nodos GPS visualizada en OpenStreetMap sin escribir código.
Personalización para Chile
En Chile, la banda LoRa recomendada por Meshtastic es US (915 MHz), no la europea 868 MHz. Configura Radio Config → LoRa → Region = US antes de siquiera empezar. Encender un nodo en 868 MHz en Chile puede ser ilegal y además la comunidad local está toda en 915.
Los componentes del proyecto se pueden armar en Chile con equivalencias así:
- Unidad M5Stack C6L: es el componente central del tutorial. Si no la encuentras en stock local, la alternativa Meshtastic más disponible es el Heltec V3 LoRa 32 o el LILYGO T-Beam v1.1, ambos con ESP32 + LoRa + OLED integrado. La ventaja del T-Beam es que trae GPS y batería 18650 integrada, ideal si quieres convertir el gateway también en un nodo tracker.
- Baterías 18650 Panasonic NCR18650-BD: si no consigues las Panasonic, cualquier 18650 de Samsung 30Q, LG HG2 o Sony VTC5 funciona igual (marca original, comprobar en el vendedor). Evita mercados marketplace baratos.
- Solar Power Manager Waveshare modelo D: la versión más cercana disponible localmente suele ser una placa TP4056 + convertidor step up 5 V, que es MUCHO más limitada (no tiene MPPT, no protege bien). Si vas a hacer inversión, importar la Waveshare vale la pena; es US$25-30 puestos en Chile.
- Panel solar 10 W: los paneles policristalinos de 12 V / 10 W están disponibles en tiendas de energías renovables locales.
- Caja estanca IP65 20×20 cm: cualquier ferretería de instalaciones eléctricas industriales las tiene.
- MDF 3 mm: reemplázalo por acrílico 3 mm cortado a láser en un fablab local. Es más resistente a humedad y visualmente queda mejor.
Estimación de costo total del proyecto en Chile a julio 2026: ~CLP $95.000 - $130.000 dependiendo de si importas o consigues sustitutos locales. La Waveshare y las 18650 originales son las que más pesan.
Recursos
- Artículo original: LoRa a Internet: construye un gateway Meshtastic con la C6L de M5Stack por Ernesto Tolocka (profe Tolocka)
- Firmware Meshtastic (releases): github.com/meshtastic/firmware
- Flasher web oficial: flasher.meshtastic.org
- Cliente web Meshtastic (config vía USB): client.meshtastic.org
- Wiki Waveshare Solar Power Manager D: waveshare.com/wiki/Solar_Power_Manager_(D)
- Cliente MQTTX: mqttx.app
- Node RED (docs oficiales): nodered.org/docs
- Broker MQTT público EMQX:
broker.emqx.io:1883
Versión chilena con banda 915 MHz, componentes en stock local y notas sobre condiciones climáticas del sur de Chile. Basado en el trabajo de Ernesto Tolocka.






