Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Réaliser une passerelle LoRaWAN basée sur Raspberry Pi

title

Utiliser un Raspberry Pi 2 + iC880A pour construire la première passerelle pour Things Network Calderdale

Le mois dernier, j’ai écrit un article sur The Things Network (TTN), un réseau de données LoRaWAN gratuit et ouvert pour applications IoT, et sur la façon dont nous avons créé une communauté à Calderdale, avec comme priorité immédiate d’utiliser ce réseau pour renforcer un réseau participatif de capteurs d'inondations.

Cet article reprend là où le précédent s’était arrêté, et s’intéresse plus en détail au matériel utilisé pour la construction d'une passerelle artisanale (c’est-à-dire un “point d’accès” ou une “station de base”) et porte sur le logiciel, sa configuration et les tests initiaux.

Notez qu’il existe de nombreuses passerelles LoRaWAN en vente dans le commerce, ainsi que des solutions artisanales plus simples et moins coûteuses. Mais l’approche utilisée ici offre un bon équilibre entre coût, flexibilité et performance, tout en nous permettant de mieux connaître le fonctionnement du réseau LoRaWAN

Matériel

title

Le front-end est une carte “concentrateur” IMST iC880A LoRaWAN. Elle inclut deux circuits intégrés Transceiver SX1257 Semtech et un processeur de bande de base SX1301. Cette combinaison permet l’émulation de démodulateurs LoRa 49x, avec 10 voies de démodulation parallèles pour recevoir jusqu’à 8 paquets LoRa envoyés simultanément avec différents facteurs de répartition sur des canaux différents.

Cela peut paraître complexe, mais c’est grâce au format de modulation du LoRa qu’il est possible d’atteindre des plages aussi incroyables avec des niveaux de puissance de transmission étonnamment modestes, tout en prenant également en charge des milliers de nœuds par passerelle. En pratique, vous n’avez probablement pas besoin de vous soucier de tous les détails, bien qu'une configuration radio et de couche MAC soit possible et puisse être requise dans certains cas.

Un Raspberry Pi 2 modèle B a été sélectionné pour exécuter le logiciel de passerelle et ses interfaces avec le concentrateur via SPI et un circuit imprimé, réalisé à partir d'une carte d'essai. Vous trouverez les détails des connexions de l’iC880A dans les documents annexes. Notez également qu’en plus de la connexion SPI, une broche GPIO standard est également nécessaire sur le Raspberry Pi pour réinitialiser le module.

Les cartes ont été installées dans un boîtier en aluminium moulé pour fournir un blindage RF, dans lequel ont été percés des trous pour un connecteur d'alimentation, un commutateur et une LED, et un accès à l’Ethernet.

Logiciel

title

The latest Raspbian Jessie Lite image was downloaded and written out to a Micro SD card. Upon then booting the Raspberry Pi, this was followed by the usual sequence of:

L’image Raspbian Jessie Lite la plus récente a été téléchargée et chargée sur une carte microSD. Puis le Raspberry Pi a été démarré, suivi par la séquence habituelle de :

$ sudo apt-get update
$ sudo apt-get upgrade

Mais aussi :

$ sudo apt-get install git wiringpi

 

"Git" est requis pour cloner les sources des logiciels, et "WiringPi" pour fournir un mécanisme simple permettant de basculer la broche GPIO qui réinitialise la carte concentrateur.

Le nom d’hôte a été changé en modifiant /etc/hostname, ainsi que l’entrée correspondante dans /etc/hosts.

L’outil de configuration de Raspberry Pi a ensuite été exécuté avec :

$ sudo raspi-config

 

Pour permettre les communications via le bus SPI, Options avancées (9), suivi de SPI (A6) a été sélectionné, afin de permettre au SPI et au module de noyau de se charger au démarrage.

Comme nous avons utilisé une carte microSD 16 Go, l’outil raspi-config a également été utilisé pour étendre le système de fichiers racine, avant de redémarrer.

La documentation d’IMST conseille de créer le programme LoRaWAN à partir des sources de référence fournies par Semtech. Cependant, différents aspects sont gérés par The Things Network, dans leur  organisation GitHub.

The Things Network Zurich est allé encore plus loin en fournissant un programme d’installation automatisé. Mais je n’étais pas satisfait de plusieurs des étapes de ce programme, comme le fait de donner un nom générique au Raspberry Pi (ttn-gateway) et de créer WiringPi depuis la source, au lieu de simplement utiliser le package disponible dans les répertoires Raspbian.

J’ai donc privilégié le script install.sh comme crib pour réaliser une installation manuelle, et j’ai procédé de la façon suivante :

  1. J’ai récupéré la branche SPI du programme d’installation automatique (git clone, git checkout…)
  2. J’ai cloné et créé l’application de passerelle LoRa
  3. J’ai cloné et créé l’application de transmission de paquets
  4. J’ai créé le répertoire corbeille, plus le lien symbolique pour poly_pkt_fwd et je les ai copiés sur le fichier global_conf.json
  5. J’ai omisde créer local_conf.json ou de réinitialiser l’ID de la passerelle
  6. J’ai copié start.sh dans le répertoire de la corbeille et configuré l’application de transmission de paquets comme un service

Notez que lors de la création de l’application passerelle :

  • Le fichier libloragw/library.cfg doit être mis à jour de façon à ce que la valeur de PLATFORM soit imst_rpi (se reporter à la lignesed correspondante dans install.sh)
  • Le débogage peut être activé en définissant la ou les variables correspondantes dans libloragw/library.cfg
  • The libloragw/library.cfg file must be updated so that PLATFORM is set to imst_rpi (see the corresponding sed line in install.sh)

  • Debugging can be turned on by setting the appropriate variable(s) in libloragw/library.cfg

La capacité à activer le débogage pour SPI, les registres de circuit, le HAL, etc. peut s’avérer très utile si l’application ne démarre pas correctement après sa configuration.

Notez également que si vous souhaitez utiliser le fichier de description de service fourni (pour lancer l’application au démarrage) vous devez vous assurer que le logiciel et la configuration ont été mis aux emplacements attendus sous /opt/ttn-gateway, ou effectuer les modifications nécessaires.

Je finirai probablement par cloner le répertoire du programme d’installation et par modifier légèrement le script en fonction de mes préférences personnelles. Il serait cependant bien plus intéressant que les applications de passerelle et de transmission de paquets soient regroupées correctement et puissent être installées via un répertoire Debian et apt-get. Dans ce cas, la configuration réside à un emplacement plus adapté, tel que /etc/ttn/, au lieu d’être de figurer près des programmes exécutables dans le répertoire de la corbeille.

À ce stade, j’ai pu exécuter un utilitaire pour tester la transmission, et ainsi confirmer le fonctionnement du SPI et du logiciel.

title

Il faut noter que l’analyseur de spectre était doté d'une petite antenne connectée à son port et n’était pas connecté directement. Il faut donc ignorer la mesure de niveau. De plus, à ce stade, la passerelle fonctionnait avec une alimentation n’offrant pas un courant suffisant. L'impulsion de transmission pourra donc être légèrement différente lorsque la puissance fournie au concentrateur sera suffisante.

Configuration

title

Nous disposons donc maintenant de deux logiciels, lora_gateway et packet_forwarder. Mais à quoi servent-ils ?

lora_gateway est essentiellement une bibliothèque (libloragw.a) permettant de créer une passerelle configurée via le fichier library.cfg pour la plate-forme matérielle et l'interface exécutant le logiciel, ainsi qu'un débogage en option, etc. Des programmes d’aide sont également fournis et vous permettent d’enregistrer les paquets reçus et de tester le SPI et la transmission.

packet_forwarder est ensuite ajouté en supplément de la bibliothèque (c’est-à-dire le "pilote" ou "HAL") pour transmettre les paquets reçus sur l’interface hertzienne, via une liaison IP/UDP vers un hôte. En plus de l’opération de liaison montante, la passerelle prend également en charge l’envoi descendant (vers les nœuds) de paquets générés par le serveur, par exemple pour la synchronisation de l’heure. Notez qu’à ce stade elle ne prend pas en charge de service général de liaison descendante.

Au moment où j’écris cet article, il existe quatre applications de transmissions de paquets :

  • Basique, comme son nom l’indique ! Elle transmet simplement les paquets reçus via UDP vers un hôte.
  • Prend en charge un récepteur GPS pour synchroniser l’heure absolue et la localisation de la passerelle.
  • Comme gps, mais avec en plus la prise en charge de l’envoi de paquets de balise pour la synchronisation des nœuds.
  • Comme beacon, mais avec en plus la prise en charge de plusieurs serveurs et autres fonctionnalités.
  •  
  •  

    L’application poly_pkt_forward semble être la plus populaire, même si vous n’avez pas besoin de certaines fonctionnalités les plus avancées, en raison de sa stabilité améliorée.

    Les applications de transmission de paquets sont configurées par un fichier global_conf.json générique, qui fournit la masse de la configuration requise, notamment pour les transceivers, les canaux radio, les clés MAC et réseau, etc. La configuration du site est ensuite fournie par local_conf.json (comme le montre l’illustration ci-dessus), qui permet de définir de nouveaux paramètres et de remplacer les paramètres par défaut. Globalement, les paramètres sont les suivants :

  • ID de la passerelle. Composé du préfixe FFE plus l’adresse MAC de l’interface Ethernet sur le Raspberry Pi.
  • E-mail de contact et description.
  • Coordonnées GPS et altitude. L’activation de fake_gps comme module récepteur n’est pas possible à ce stade.
  • Adresse et ports du serveur. Ceux du serveur géré par The Things Network.
  • Sur ce dernier point de configuration, notez que vous pourriez également configurer les informations pour votre propre serveur.

    Une fois la configuration terminée, l’application de transmission de paquets a été lancée manuellement avec :

$ ./poly_pkt_fwd

title

Une fois l’application de transmission de paquets de la passerelle démarrée correctement, le Pi a été éteint.

Installation sur site

title

La passerelle dans son boîtier en aluminium moulé a été placée dans un coffret mural en acier certifié IP. Celui-ci est suffisamment grand pour accueillir un récepteur SDR large bande qui pourra être utilisé pour la surveillance du spectre. Un rail DIN est installé en bas de l’armoire.

title

Celle-ci contient pour le moment le système de distribution d'alimentation secteur et une alimentation 5 V avec une importante capacité et un espace généreux au cas où nous aurions besoin de rails de tension supplémentaires plus tard.

title

En haut de l’armoire se trouvent des éclateurs fixés devant les antennes, avec un câble de grande section de 10 mm2 raccordant celles-ci à un piquet de terre dédié.

title

L’intérieur contient deux petits câbles coaxiaux pour les antennes 868 MHz et GPS. À leur gauche se trouve un connecteur type N traversant pour l’antenne 25-30 000 MHz. Un connecteur supplémentaire se trouve encore plus à gauche, et pourra être utilisé à l’avenir pour connecter cette antenne, via un relais coaxial, à une autre alimentation dans l’atelier, permettant ainsi de l’utiliser avec un autre équipement.

Essais

title

Une fois la passerelle installée, nous avons pu la tester. Pour le moment, le seul nœud LoRaWAN complet dont nous disposons est un prototype du nouveau capteur de Flood Network. Nous avons donc décidé de mettre l’installation sous tension et de voir si nous pouvions le trouver via l’API The Things Network. Et heureusement, oui !

title

Et maintenant ? Voici nos projets :

  • Travailler avec Flood Network pour mettre en ligne quelques capteurs supplémentaires
  • Cartographier la couverture de la première passerelle
  • Travailler avec le hackerspace local,Bridge Rectifier, pour mettre une 2ème passerelle en ligne

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.