Dieses Repository bietet Ihnen alles, was Sie für die einfache Erstellung (es ist ein DIY-Projekt!) Ein hochwertiges Lora-to-MQTT-Gateway, das auf EBYTE LORA-Modulen und ESP32 basiert, und funktioniert entweder mit Wi-Fi oder Ethernet und läuft 5 V. Es gibt zwei verschiedene Versionen des Gateways, Details zu diesen Versionen und die Sie unten abholen sollten:
Um dem Board -Ethernet -Fähigkeit den Quinled ESP32 -Ethernet -Hut zu geben. Natürlich ist es natürlich, dass ich auch ein Quinled ESP32 hätte verwenden sollen, aber ich hatte ein paar Ersatzstandard -ESP32 -Devboards ohne Verwendung, also habe ich das Board um diese um diese gestaltet. Aber das heißt, ich könnte eines Tages eine Version komplett auf dem Quinled-Esp32 entwerfen.
Um leicht zwischen Wi-Fi und Ethernet zu wechseln, gibt es einen Jumper auf dem Brett, um genau das zu tun. Dies funktioniert sogar mit dem Board mit Strom versorgt; Keine Notwendigkeit, Strom zu schneiden.
Auch dies ist ein DIY -Projekt! Zuerst benötigen Sie ein paar Lötkenntnisse und ich empfehle entweder eine SMD -Hotplatte oder eine Heißluftpistole, um das EBYTE E32 -Modul zu löten. Es ist sehr sehr schwer , es mit nur einem Eisen zu löten!
Daher möchten Sie die PCBs in einer PCB -Prototyp -Fabrik Ihrer Wahl wie JLCPCB oder PCBWAY ausdrucken lassen. Ich habe die Gerber -Dateien für beide im Respesiv -Ordner aufgenommen. Wenn Sie einen anderen Dienstanbieter verwenden möchten, müssen Sie überprüfen, ob er diese Gerbers akzeptiert oder sie selbst generiert.
Ich empfehle Ihnen auch dringend , diese PCB mit einer Schablone zu bestellen. Andernfalls wird es Ihnen schwer fällt, die Paste auf die Pads des EBYTE -Moduls zu legen!
Jeder PCB -Ordner verfügt über eine IBOM -HTML -Datei, mit der Sie eine gute Lötanleitung / -übersicht erhalten. Finden Sie sie im ibom -Ordner in den einzelnen Versionen. Wenn Sie das Brett gelötet haben, verdrahten Sie es einfach mit einer 5 -V -Stromquelle und da gehen Sie! Es konsumiert weniger als 200 mA, sodass Sie problemlos ein altes Telefonladegerät mit 500 mA, 1A (oder höher) verwenden können.
Die Quelle ist im src -Ordner erhältlich. Laden Sie Arduino IDE herunter, überprüfen Sie die Datei config.h und ersetzen Sie die Platzhalter durch Ihre Einstellungen, kompilieren Sie und laden Sie sie in das ESP32 hoch. Das sollte es sein und das Gateway sollte in Ihrem MQTT -Server auftauchen und alle 5 Sekunden Gesundheitscheckmeldungen senden.
Wie Sie jetzt Ihre Sensoren und Boards von Lora -Nachrichten gesendet haben, finden Sie unten im Abschnitt "Quellcode / Software" unten.
Welches solltest du auswählen? Das ist ziemlich einfach und definiert durch einen Faktor:
Sie müssen zwischen diesen wählen, da die EBYTE -Module, die serielle Kommunikation verwenden, nicht mit den RFM95 -Modulen kommunizieren können, obwohl sie dieselbe SemTech SX1276 LORA -Chip verwenden. Das liegt daran, dass die seriell betriebenen Module von EBYTE auch eine kleine MCU an Bord haben, die beim Senden von Nachrichten über LORA bereits sein eigenes "Zeug" / Protokoll macht. Sie sprechen also nicht direkt mit dem Semtech -Chip, sondern mit dieser kleinen MCU. Man müsste verstehen, wie genau das funktioniert, um diese Nachrichten mit einem LORA -Modulen zu lesen, das die direkte SPI -Kommunikation zum SemTech -Chip (wie das spezifische E32 -Modul, das ich verwende, oder dem RFM95), damit sie miteinander arbeiten.
Diese Version basiert auf dem EBYTE E32-400M20S oder E32-900M20S, das dem Semtech SX1276 direktes serielles Kommunikaton bietet. Zum Zeitpunkt der letzten Untersuchung (Beginn von 2022) ist dies das einzige E-Byte-Modul, das auf dieser Leiterplatte funktioniert. Sie können also keine anderen verwenden, die eine serielle Kommunikation verwenden: Sie passen nicht auf die Platine / haben eine andere Spannung! Wählen Sie das richtige für Ihre Region (TL; DR: 400 für US/Asien, 900 für Europa).
Das Modul befindet sich nicht in der BOM -CSV -Datei, Sie müssen es von Aliexpress abholen:
Wenn Sie normalerweise im EBYTE -Ökosystem mit seinen seriellen Modulen miteinander verbunden sind, ist dieses Board genau das Richtige für Sie. Ich habe jedoch keinen Port meiner E32 -basierten Software für dieses Board durchgeführt. Und ich habe eigentlich nicht vor, dies zu tun, da ich die E32 -Version persönlich benutze. Aber Sie können es gerne mit Renzo Mischiantis Arduino Library portieren.
Das Modul befindet sich nicht in der BOM -CSV -Datei, Sie müssen es von Aliexpress abholen:
Die Software, die ich dafür entwickelt habe, soll leicht erweiterbar sein, ohne die tatsächliche Logik des Gateways selbst zu berühren, sondern ein kleines Stück Code zu einer separaten Datei hinzuzufügen.
Schauen Sie sich lora-ids.h . Diese Datei soll zwischen diesem Gateway und allen von Ihnen entwickelten Sensoren geteilt werden. Es enthält eine Liste verschiedener Nachrichtentypen und Sie können problemlos Ihre eigenen hinzufügen. ZB, es hat einen "Mailbox" -Typ, der einige Immobilien definiert, die ein Mailbox senden würde. Dies erleichtert es sehr einfach, diese Nachrichten zu lesen und zu verarbeiten und Themen in Ihrem MQTT -Server zu erstellen, die Sie dann anhören können. Es gibt auch einen "benutzerdefinierten" Typ, der im Grunde genommen kostenlosen Text hat und vielleicht gut zum Debuggen ist.
Fühlen Sie sich frei, Ihre eigenen Typen in diese Datei hinzuzufügen. Sie müssen zwei Dinge hinzufügen:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseDas Betreff, in das eine Nachricht fällt, wird aus der Gateway -ID, der Geräte -ID und der Nachrichten -ID erstellt. Für das folgende Beispiel gehen wir also davon aus:
0xA und Name mailbox-sensor hat gesendetLORA_MESSAGE_ID_MAILBOX und0x1 und Name lora-gateway-e32 empfängt es. Nehmen wir also zunächst den mailbox -Nachrichtentyp als Beispiel. Es definiert diese Eigenschaften:
Darüber hinaus definiert es seinen eigenen Namen (und damit: das Elternteil für diese Eigenschaften):
String getMqttTopicName() { return "mailbox"; }Wenn das Gateway also eine Nachricht von diesem Typ erhält, wird die Eigenschaften daraus gelesen und in diese Themen fallen:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature Aber woher kommt die /messages/ Teil und was ist ???/ . Das ist einfach: Einfaches Gerät / Sensor, das Sie entwickeln, sollte auch in lora-ids.h registriert werden. Ganz oben gibt es eine Liste von Geräten, jeweils mit:
Das Gateway sortiert alle Nachrichten, die es nach Gerät empfängt und es mit diesem Gerätenamen vorfixiert, sowie alle Nachrichten unter einem messages , damit das Gerät neben den tatsächlichen Nachrichten andere Themen enthält. Auf diese Weise können Sie bestimmte Felder/Werte bestimmter Nachrichtentypen von einem bestimmten Gerät anhören!
Also wissen wir das jetzt:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureDas letzte fehlende Stück ist das Gateway, das die Nachrichten empfängt. Es ist auch als Gerät definiert, sodass es auch einen Namen hat, sodass wir den vollständigen Themennamen für unser Beispiel problemlos erstellen können:
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/temperatureJetzt können Sie leicht:
LORA_DEVICE_IDS hinzu Schauen Sie sich die sendLoRaMessage -Funktion an: bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) Es wird erwartet, dass wir es geben:
Wir können optional auch angeben:
LORA_GATEWAY_ID verwendetLORA_DEVICE_ID ausfällt, wenn nicht angegeben, wenn nicht angegeben ist Erstellen Sie also in Ihrem Code einfach eine Instanz der Nachrichten -ID, die Sie senden möchten, und geben Sie sie an sendLoRaMessage weiter:
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
Und das ist es :)
Dazu werfen wir einen Blick darauf, wie die tatsächliche Nachricht erstellt wird, die über Lora gesendet wird. Die Grundidee wird aus der Arduino-Lora-Bibliothek gestohlen, die einzelne Bytes verwendet, um Absender, Empfänger usw. zu identifizieren.
Betrachten Sie eine einzige Nachricht:
| miteinander verbunden sind . Wenn Sie also das mailbox von oben nehmen, könnte der Wert für die Nachricht so aussehen: 12345|3.56|44.55|27.4