Este repositorio le brinda todo lo que necesita para construir fácilmente (¡es un proyecto de bricolaje!) Una puerta de enlace Lora-to-Mqtt de gran calidad, basada en los módulos Ebyte Lora y un ESP32 y funciona con Wi-Fi o Ethernet, que se ejecuta 5V. Hay dos versiones diferentes de la puerta de enlace, detalles sobre esas versiones y que debe elegir a continuación:
Para darle capacidad a la placa Ethernet, estoy usando el sombrero Ethernet ESP32 Quinled. Por supuesto, es natural que también haya usado un quinled ESP32, pero tenía algunos Devboards ESP32 estándar de repuesto sin uso, así que diseñé el tablero alrededor de estos. Pero dicho esto, algún día podría diseñar una versión completamente basada en el Quinled-ESP32.
Para cambiar fácilmente entre Wi-Fi y Ethernet, hay un puente en el tablero para hacer exactamente eso. Esto incluso funciona con el tablero alimentado; No hay necesidad de cortar la potencia.
¡Nuevamente, este es un proyecto de bricolaje! En primer lugar, necesita algunas habilidades de soldadura y le recomiendo una placa caliente SMD o una pistola de aire caliente para soldar el módulo Ebyte E32. ¡Es muy, muy difícil soldarlo con solo una plancha!
Por lo tanto, desea imprimir los PCB en una fábrica PCB Prototype de su elección, como JLCPCB o PCBWay. He incluido los archivos Gerber para ambos en la carpeta Respetiv. Si desea utilizar un proveedor de servicios diferente, debe verificar si pueden aceptar estos gerbers o generarlos usted mismo.
También le recomiendo que solicite esta PCB con una plantilla, de lo contrario, tendrá dificultades para poner la pasta en las almohadillas del módulo Ebyte.
Cada carpeta PCB tiene un archivo HTML IBOM que le brinda buenas instrucciones / descripción general de soldadura, busque en la carpeta ibom en cada carpeta de versiones. Cuando haya soldado el tablero, ¡simplemente cíjelo con una fuente de alimentación de 5V y ahí lo vaya! Consume menos de 200 mA, por lo que puede usar fácilmente un antiguo cargador telefónico de 500 mA, 1A (o más) para ello.
La fuente está disponible en la carpeta src . Descargue Arduino IDE, verifique el archivo config.h y reemplace a los marcadores de posición con su configuración, compile y cargue al ESP32. Eso debería serlo y la puerta de enlace debe aparecer en su servidor MQTT y enviar mensajes de verificación de salud cada 5 segundos.
La forma en que ahora puede hacer que sus sensores y tableros tengan mensajes Lora enviados a él se pueden encontrar en la sección "Código / software fuente" a continuación.
¿Cuál deberías elegir? Eso es bastante fácil y definido por un factor:
Debe elegir entre ellos, ya que los módulos EByte que usan la comunicación en serie no pueden comunicarse con los módulos RFM95, aunque usan el mismo chip Lora Semtech SX1276. Esto se debe a que los módulos operados en serie Ebyte también tienen un MCU litte a bordo que ya hace sus propios "cosas" / protocolo al enviar mensajes a través de Lora. Así que no hablas directamente con el chip Semtech, sino ese pequeño MCU. Uno necesitaría comprender exactamente cómo funciona exactamente para leer estos mensajes con un módulos Lora que usa la comunicación SPI directa al chip Semtech (como el módulo E32 específico que uso, o el RFM95) para que funcionen entre sí.
Esta versión se basa en el EBYTE E32-400M20S o E32-900M20S, que ofrece comunicación en serie directa al SEMTech SX1276. En el momento de la última investigación (a partir de 2022), este es el único módulo E-byte que funciona en esta PCB, por lo que no puede usar ningún otro que use comunicación en serie: ¡no cabe en el tablero / tendrán un pinout diferente! Elija el adecuado para su región (TL; DR: 400 para EE. UU./Asia, 900 para Europa).
El módulo no está en el archivo BOM CSV, debe sacarlo de AliExpress:
Si generalmente trabaja en el ecosistema Ebyte con sus módulos en serie interactuados, esta placa es para usted. Sin embargo, no he hecho un puerto de mi software basado en E32 para este tablero. Y en realidad no planeo hacerlo, ya que personalmente uso la versión E32. Pero puede acudirlo usando la Biblioteca Renzo Mischiantis Arduino.
El módulo no está en el archivo BOM CSV, debe sacarlo de AliExpress:
El software que he desarrollado para esto está destinado a ser fácilmente extensible sin tocar la lógica real de la puerta de enlace en sí, sino agregar un pequeño código a un archivo separado.
Eche un vistazo a lora-ids.h . Este archivo está destinado a compartirse entre esta puerta de enlace y todos los sensores que desarrolla. Tiene una lista de diferentes tipos de mensajes y puede agregar fácilmente el suyo. Por ejemplo, tiene un tipo de "buzón" que define algunas propiedades que enviaría un buzón. Esto hace que sea muy fácil leer y procesar estos mensajes y crear temas en su servidor MQTT que luego puede escuchar. También hay un tipo "personalizado" que básicamente tiene texto gratuito y quizás sea bueno para la depuración.
No dude en agregar sus propios tipos en este archivo. Necesitará agregar dos cosas:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseEl sujeto donde cae un mensaje se construye a partir del ID de puerta de enlace, ID de dispositivo e ID de mensaje. Entonces, para el siguiente ejemplo, asumimos que:
0xA y el nombre mailbox-sensor se ha enviadoLORA_MESSAGE_ID_MAILBOX y0x1 y el nombre lora-gateway-e32 lo recibe. Así que primero tomemos el tipo de mensaje mailbox como ejemplo. Defina estas propiedades:
Además, define su propio nombre (y con eso: el padre para estas propiedades):
String getMqttTopicName() { return "mailbox"; }Entonces, cada vez que la puerta de enlace recibirá un mensaje de este tipo, leerá las propiedades de él y las dejará caer en estos temas:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature Pero, ¿dónde viene la forma /messages/ parte y qué es ???/ . Eso es fácil: el dispositivo / sensor fácil que desarrolla también debe registrarse en lora-ids.h . En la parte superior, hay una lista de dispositivos, cada uno con:
La puerta de enlace ordenará todos los mensajes que recibe por dispositivo y lo prefijará con el nombre de ese dispositivo, además de clasificar todos los mensajes en un tema messages para permitir que el dispositivo tenga otros temas junto a los mensajes reales. ¡Esto le permite escuchar campos/valores específicos de tipos de mensajes específicos de un dispositivo específico!
Entonces ahora sabemos esto:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureLa última pieza faltante es la puerta de enlace que recibe los mensajes. También se define como un dispositivo, por lo que también tiene un nombre, por lo que podemos construir fácilmente el nombre del tema completo para nuestro ejemplo:
lora-gateway-e32/devices/mailbox-sensor/messages/mailbox/durationlora-gateway-e32/devices/mailbox-sensor/messages/mailbox/distancelora-gateway-e32/devices/mailbox-sensor/messages/mailbox/humiditylora-gateway-e32/devices/mailbox-sensor/messages/mailbox/temperatureAhora puedes fácilmente:
LORA_DEVICE_IDS con una ID y nombre Eche un vistazo a la función sendLoRaMessage : bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) espera que lo damos:
También podemos especificar opcionalmente:
LORA_GATEWAY_IDLORA_DEVICE_ID , si no se especifica Entonces, en su código, simplemente cree una instancia de la ID de mensaje que desea enviar y pasarla a sendLoRaMessage :
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
Y eso es todo :)
Para esto, echamos un vistazo a cómo se construye el mensaje real que se envía a través de Lora. La idea básica es robada de la Biblioteca Arduino-Lora, que utiliza bytes individuales para identificar remitentes, receptores, etc.
Mirando un solo mensaje:
| . Entonces, tomando el ejemplo del mensaje mailbox de arriba, el valor del mensaje podría verse así: 12345|3.56|44.55|27.4