Ce référentiel vous donne tout ce dont vous avez besoin pour construire facilement (c'est un projet de bricolage!) Une passerelle LORA-TO-MQTT de grande qualité, basée sur les modules EBYTE LORA et un ESP32 et fonctionne avec Wi-Fi ou Ethernet, en déplaçant 5V. Il existe deux versions différentes de la passerelle, des détails sur ces versions et que vous devriez d'abandonner ci-dessous:
Pour donner la capacité de la carte Ethernet, j'utilise le chapeau Ethernet Quinled ESP32. Bien sûr, il est naturel que j'aurais également dû utiliser un ESP32 en quindule, mais j'avais quelques Devboards ESP32 standard de rechange qui ne sont pas utiles, alors j'ai conçu la planche autour de ceux-ci. Mais cela dit, je pourrais un jour concevoir une version entièrement basée sur le Quinled-ESP32.
Pour basculer facilement entre Wi-Fi et Ethernet, il y a un cavalier sur la planche pour faire exactement cela. Cela fonctionne même avec le conseil d'administration; Pas besoin de couper la puissance.
Encore une fois, c'est un projet de bricolage! Donc, tout d'abord, vous avez besoin de quelques compétences en soudage et je recommande vivement une plaque chauffante SMD ou un pistolet à air chaud pour souder le module EBYTE E32. Il est très très difficile de le souder avec juste un fer!
Vous souhaitez donc imprimer les PCB dans une usine de prototype de PCB de votre choix, comme JLCPCB ou PCBWAY. J'ai inclus les fichiers Gerber pour les deux dans le dossier respectiv. Si vous souhaitez utiliser un autre fournisseur de services, vous devez vérifier s'ils peuvent accepter ces gerbers ou les générer vous-même.
Je vous recommande également de commander ce PCB avec un pochoir, sinon vous aurez du mal à mettre la pâte sur les coussinets du module Ebyte!
Chaque dossier PCB dispose d'un fichier HTML IBOM qui vous donne de belles instructions de soudage / vue d'ensemble, trouvez-la dans le dossier ibom dans chaque dossier de versions. Lorsque vous avez soudé la planche, câblez simplement avec une source d'alimentation 5V et voilà! Il consomme moins de 200 mA, vous pouvez donc facilement utiliser un ancien chargeur de téléphone de 500mA, 1A (ou plus).
La source est disponible dans le dossier src . Téléchargez Arduino IDE, vérifiez le fichier config.h et remplacez les espaces réservés par vos paramètres, compilez et téléchargez sur ESP32. Cela devrait être cela et la passerelle doit apparaître dans votre serveur MQTT et envoyer des messages de vérification de la santé toutes les 5 secondes.
Comment vous pouvez maintenant que vos capteurs et cartes aient des messages LORA envoyés ci-dessous dans la section "code source / logiciel" ci-dessous.
Lequel devez-vous choisir? C'est assez facile et défini par un facteur:
Vous devez choisir entre ceux-ci, car les modules EBYTE qui utilisent la communication série ne peuvent pas communiquer avec les modules RFM95, bien qu'ils utilisent la même puce SEMTECH SX1276 LORA. En effet, les modules EBYTE opérés en série ont également un Littte MCU à bord qui fait déjà son propre "truc" / protocole lors de l'envoi de messages via LORA. Vous ne parlez donc pas directement à la puce Semtech, mais ce petit MCU à la place. Il faudrait comprendre comment cela fonctionne exactement pour lire ces messages avec un module LORA qui utilise une communication SPI directe à la puce SemTech (comme le module E32 spécifique que j'utilise, ou le RFM95) pour les faire fonctionner les uns avec les autres.
Cette version est basée sur l'EBYTE E32-400M20S ou E32-900M20S, qui offre une communication série directe au SEMTECH SX1276. Au moment de la dernière recherche (début 2022), il s'agit du seul module d'alté électronique qui fonctionne sur ce PCB, vous ne pouvez donc pas utiliser d'autres qui utilisent la communication série: ils ne rentreront pas sur le tableau / ont un épingle différent! Choisissez le bon pour votre région (TL; DR: 400 pour nous / Asie, 900 pour l'Europe).
Le module n'est pas dans le fichier BOM CSV, vous devez le retirer AliExpress:
Si vous travaillez habituellement dans l'écosystème EBYTE avec ses modules interfacés en série, cette carte est pour vous. Cependant, je n'ai pas fait de port de mon logiciel basé sur E32 pour cette carte. Et je ne prévois pas de le faire, car j'utilise personnellement la version E32. Mais vous êtes invités à le porter à l'aide de la bibliothèque Renzo Mischianctis Arduino.
Le module n'est pas dans le fichier BOM CSV, vous devez le retirer AliExpress:
Le logiciel que j'ai développé pour cela est censé être facilement extensible sans toucher la logique réelle de la passerelle elle-même, mais ajoutant plutôt un petit morceau de code à un fichier séparé.
Jetez un œil à lora-ids.h . Ce fichier est destiné à être partagé entre cette passerelle et tous les capteurs que vous développez. Il a une liste de différents types de messages et vous pouvez facilement ajouter le vôtre. Par exemple, il a un type de "boîte aux lettres" qui définit quelques propriétés qu'une boîte aux lettres enverrait. Cela le rend très facile à lire et à traiter ces messages et à créer des sujets dans votre serveur MQTT que vous pouvez ensuite écouter. Il existe également un type "personnalisé" qui a essentiellement du texte libre et est peut-être bon pour le débogage.
N'hésitez pas à ajouter vos propres types dans ce fichier. Vous devrez ajouter deux choses:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseLe sujet dans lequel un message tombe est construit à partir de l'ID de passerelle, de l'ID de périphérique et de l'ID de message. Donc, pour l'exemple suivant, nous supposons que:
0xA et nom mailbox-sensor a envoyéLORA_MESSAGE_ID_MAILBOX et0x1 et le nom de lora-gateway-e32 le reçoivent. Prenons donc d'abord le type de message mailbox comme exemple. Il définit ces propriétés:
De plus, il définit son propre nom (et avec cela: le parent de ces propriétés):
String getMqttTopicName() { return "mailbox"; }Ainsi, chaque fois que la passerelle recevra un message de ce type, il en lira les propriétés et les déposera dans ces sujets:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature Mais où le /messages/ la partie se présentent-ils et qu'est-ce que ???/ . C'est facile: l'appareil / capteur facile que vous développez doit également être enregistré dans lora-ids.h . Tout en haut, il y a une liste d'appareils, chacun avec:
La passerelle triera tous les messages qu'il reçoit par appareil et le préfixe avec ce nom de périphérique, et trie tous les messages sous un sujet messages pour permettre à l'appareil d'avoir d'autres sujets à côté des messages réels. Cela vous permet d'écouter des champs / valeurs spécifiques de types de messages spécifiques à partir d'un appareil spécifique!
Nous savons donc maintenant ceci:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureLa dernière pièce manquante est la passerelle qui reçoit les messages. Il est également défini comme un appareil, il a donc également un nom, nous pouvons donc facilement construire le nom de sujet complet pour notre exemple:
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/temperatureMaintenant, vous pouvez facilement:
LORA_DEVICE_IDS avec un identifiant et un nom Jetez un œil à la fonction sendLoRaMessage : bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) Il s'attend à ce que nous lui donnions:
Nous pouvons également spécifier éventuellement:
LORA_GATEWAY_IDLORA_DEVICE_ID , s'il n'est pas spécifié Donc, dans votre code, créez simplement une instance de l'ID de message que vous souhaitez envoyer et passez-le à sendLoRaMessage :
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
Et c'est ça :)
Pour cela, nous examinons comment le message réel est construit qui est envoyé via Lora. L' idée de base est volée à la bibliothèque Arduino-Lora, qui utilise des octets individuellement pour identifier les expéditeurs, les récepteurs, etc.
En regardant un seul message:
| . Donc, en prenant l'exemple du message mailbox d'en haut, la valeur du message pourrait ressembler à ceci: 12345|3.56|44.55|27.4