LoRa – Emetteur et Gateway

Deux cartes LoRa qui communiquent entre elles, c’est bien ! Une carte LoRa qui communique sur le réseau, c’est mieux ! Voyons ici comment une carte LoRa peut envoyer des messages sur un serveur MQTT local à l’aide d’une Gateway particulière :

Même si les deux appareils peuvent communiquer de manière bidirectionnel, un sera utilisé comme émetteur et l’autre comme récepteur. Pour plus d’informations sur les cartes LoRa et sur les Gateway, voire l’article : LoRa et LoRaWAN – Présentation

Carte Heltec LoRa32 V2 émettrice

Gateway Dragino LPS8 récepteur

Présentation

Les cartes LoRa32 sont des ESP32 équipés de puces LoRa pour la communication longue distance. Ces cartes peuvent à la fois émettre et recevoir. Cependant, pour que le message soit parfaitement compris par le destinataire (notre Gateway), il y a 4 paramètres à régler

  • Facteur d’étalement (SF)
  • Bande passante (kHz)
  • Sync Word (1 ou 2 octets)
  • Fréquence (MHz)

Or notre Gateway est limité en termes de réglages. On devra donc adapter notre carte LoRa32 à notre Gateway.


Une Gateway est un appareil réseau (WiFi, 4G, ou Ethernet) équipé d’une puce LoRa. Elle sert de passerelle :

  • entre des cartes LoRa simples et le réseau local, voire Internet.
  • entre des cartes LoRa avec le protocole LoRaWAN et le réseau local, voire Internet.

Chaque Gateway possède des fonctions différentes. Je ne m’intéresserai ici qu’à mon modèle


Un serveur MQTT (ou broker MQTT) est un serveur de messagerie fonctionnant sur le principe de Publish-Subscribe. La Gateway se connecte au serveur MQTT en tant que Publisher afin d’y relayer les messages de la carte LoRa. Nous nous y connecterons en tant que Subscriber pour lire les messages reçus par le serveur. Nous utiliserons le broker MQTT Mosquitto

  • https://mosquitto.org/
  • https://mosquitto.org/man/mosquitto_pub-1.html
  • https://mosquitto.org/man/mosquitto_sub-1.html

Préparation

Commençons avec le broker MQTT Mosquitto. Téléchargez le, installez le, puis ouvrez deux terminaux et tapez sur chacun d’entre eux :

  • mosquitto -v
  • mosquitto_sub -h localhost -t # -v

La 1e commande sur l’un des terminaux va lancer le serveur sur votre PC. La 2e commande sur l’autre terminal va recevoir et afficher l’ensemble des messages publiés. Notre broker peut donc maintenant recevoir les messages de la Gateway et les afficher. Retenez l’IP de votre broker (donc de votre PC), vous en aurez besoin plus tard.


Configurons maintenant notre Gateway. Elle pourra ainsi recevoir les messages de notre carte LoRa et les retransmettre au broker via le réseau. Branchez la sur une prise Ethernet de votre réseau local, allumez la, puis :

  1. Repérez l’IP de la Gateway sur votre réseau local
  2. Tapez sur un navigateur IP:8000
  3. Rentrez le login : root / mdp : dragino
  4. Allez dans Service > Dragino menu, une nouvelle page s’ouvre
  5. Allez dans MQTT > MQTT Client. Rentrez, puis cliquez sur Save&Apply
    • Broker Address : l’IP de votre broker MQTT (de votre PC donc)
    • Broker port : le port de votre broker MQTT (par défaut 1883)
  6. Allez dans MQTT > MQTT Channel > Add Channel. Rentrez, puis cliquez sur ADD_CHAN
    • Local ID : l’ID de votre choix. Elle devra aussi être codé dans la LoRa32 (ex : 36)
    • Remote ID : L’ID de votre choix. Elle sera affichée dans le broker (ex : 41)
  7. Allez dans LogRead > LoRa log > FreqINFO et repérez une fréquence, une SF et une bande passante pour votre LoRa32

Votre Gateway est maintenant prête à recevoir les messages LoRa de votre carte et de les retransmettre au broker. Retenons l’ID local, la fréquence, la SF et la bande passante. On en aura besoin.


Enfin, il nous faut configurer l’IDE pour qu’il reconnaisse notre carte LoRa32 afin de la programmer ensuite. Nous n’allons pas tout détailler ici, juste les principales étapes. Premièrement il faut Installer l’IDE Arduino, ensuite :

  1. Fichier > Préférences > URL de gestionnaire … : Ajoutez la ligne suivante https://resource.heltec.cn/download/package_heltec_esp32_index.json
  2. Outil > Type de carte > Gestionnaire de cartes : Recherchez puis choisissez Heltec ESP32 …
  3. Croquis > Inclure un bibliothèque > Gérer les bibliothèques : Recherchez puis choisissez Heltec ESP32 …

Une fois cela fait, il faut connecter la carte LoRa32 à l’IDE

  • Branchez l’antenne sur la carte LoRa32 (sauf si tu veux perdre ta carte)
  • Branchez la carte LoRa32 au PC
  • Outil > Type de carte : Choisir WiFi LoRa32 V2
  • Outil > Port : Choisissez le port apparu après avoir branché la carte

L’IDE reconnait notre LoRa32, il ne nous reste plus qu’à la programmer pour qu’elle émette des messages sur l’ID local choisie.

Code

Retrouvez ici le code C pour notre carte LoRa32. Elle émettra en LoRa des messages avec le contenu <Local ID>temp=25&compteur=valeur avec :

  • Local ID : l’ID défini plus tôt dans la Gateway (pour moi 36)
  • temp, compteur : les champs
  • 25, Valeur : Les valeurs des champs

Notre code contient aussi les 4 paramètres suivants afin de correspondre aux spécificités de la Gateway :

LoRa.setSpreadingFactor(7);       //SP 7
LoRa.setSignalBandwidth(125000);  //125 kHz
LoRa.setFrequency(868100000);     //868,1 Mhz
LoRa.setSyncWord(0x34);           //0x34 (par défaut)

Le code est donc à téléverser sur la carte. Une fois compilée puis exécuté par la carte, vous devriez voir l’un des terminaux du broker afficher chaque 5s les messages ci-dessous. Notez qu’il affiche le Remote ID 41 et pas le Local ID 36.

dragino-...../41/data 'temp=25&compteur=0'
dragino-...../41/data 'temp=25&compteur=1'
dragino-...../41/data 'temp=25&compteur=2'
dragino-...../41/data 'temp=25&compteur=3'

Code émetteur
#include "heltec.h"

void setup()
{
             //OLED  LoRa  Serial PABOOST Fréquence
  Heltec.begin(true, true, true,  true,   868100000);
  
  LoRa.enableCrc();
  LoRa.setSyncWord(0x34);
  LoRa.setSpreadingFactor(7);                         // Setup Spreading Factor (6 ~ 12)
  LoRa.setSignalBandwidth(125000);                    // Setup BandWidth, option: 7800,10400,15600,20800,31250,41700,62500,125000,250000,500000
  //LoRa.setCodingRate4(8);                           // Setup Coding Rate:5(4/5),6(4/6),7(4/7),8(4/8) 
  //LoRa.setFrequency(868100000);                     // Déjà lancé par le Heltec.begin()
  //LoRa.dumpRegisters(Serial);
  //LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST); //20dB output must via PABOOST
  
  /*
  * LoRa.setTxPower(txPower,RFOUT_pin);
  * txPower -- 0 ~ 20
  * RFOUT_pin could be RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO
  *   - RF_PACONFIG_PASELECT_PABOOST -- LoRa single output via PABOOST, maximum output 20dBm
  *   - RF_PACONFIG_PASELECT_RFO     -- LoRa single output via RFO_HF / RFO_LF, maximum output 14dBm
  */
}

void loop()
{
  // Création du message
  static int ID = 36;
  static int counter = 0;
  String message = "<" + String(ID) + ">temp=25&compteur=" + String(counter);
  counter++;
  
  // Log sur le port série du PC (CTRL + MAJ + M)
  Serial.print("Sending packet: ");
  Serial.println(message);

  // Log sur l'écran OLED
  Heltec.display->clear();
  Heltec.display->setFont(ArialMT_Plain_10);
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->drawString(0, 0, message);
  Heltec.display->display();
    
  // Envoi du message
  LoRa.beginPacket();
  LoRa.print(message);
  LoRa.endPacket();

  // Attend 5 secondes
  delay(1000);                       // wait for a second
  digitalWrite(25, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(4000);                       // wait for a second
  digitalWrite(25, LOW);    // turn the LED off by making the voltage LOW
}

Sources

  • https://github.com/HelTecAutomation/Heltec_ESP32
  • https://heltec.org/project/wifi-lora-32/
  • https://www.dragino.com/products/lora-lorawan-gateway/item/148-lps8.html
  • https://www.dragino.com/downloads/downloads/LoRa_Gateway/LPS8/LPS8_LoRaWAN_Gateway_User_Manual_v1.2.0.pdf
  • http://www.dragino.com/downloads/downloads/LoRa_Gateway/LG02-OLG02/Firmware/Application_Note/MQTT_WebUserInterface-v0.5.pdf

Votez cet article :

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Laisser un commentaire