Déploiement d'un réseau LoRaWAN : Différence entre versions

De Wiki d'activités IMA
(Configuration du iC880A-SPI)
Ligne 79 : Ligne 79 :
 
Ce driver nécessite une interface SPI pour fonctionner, et elle doit être activée sur le Pi. Pour cela, retourner dans le menu <code>raspi-config</code>, puis dans '''Interfacing Options''', activer '''SPI'''. Maintenant que SPI est activé, il faut préparer le ''Reset Pin Control'', pour contrôler le pin du GPIO qui sera connecté au pin Reset du iC880A. C'est très simple, il existe dans le dossier ''lora_gateway'' un fichier shell nommé ''reset_lgw.sh'' et il est lancé de cette manière <code>./reset_lgw.sh {start|stop} [<gpio number>]</code>, dans notre cas, 17 est le pin du GPIO. Plus tard, on configurera le lancement de cette commande au démarrage du Pi. Connectez le concentrateur comme indiquez ci-dessous:
 
Ce driver nécessite une interface SPI pour fonctionner, et elle doit être activée sur le Pi. Pour cela, retourner dans le menu <code>raspi-config</code>, puis dans '''Interfacing Options''', activer '''SPI'''. Maintenant que SPI est activé, il faut préparer le ''Reset Pin Control'', pour contrôler le pin du GPIO qui sera connecté au pin Reset du iC880A. C'est très simple, il existe dans le dossier ''lora_gateway'' un fichier shell nommé ''reset_lgw.sh'' et il est lancé de cette manière <code>./reset_lgw.sh {start|stop} [<gpio number>]</code>, dans notre cas, 17 est le pin du GPIO. Plus tard, on configurera le lancement de cette commande au démarrage du Pi. Connectez le concentrateur comme indiquez ci-dessous:
  
[[File:P62017_PINIC880ASPI.jpg|500px|center|thumb|Aperçu du concentrateur]]
+
[[File:P62017_PINIC880ASPI.jpg|500px|center|thumb|Aperçu des composants du concentrateur]]
  
 
{| class="wikitable" style="margin: 0 auto;"
 
{| class="wikitable" style="margin: 0 auto;"

Version du 3 juin 2019 à 08:50


Présentation générale

  • Nom du projet : Déploiement d'un réseau LoRaWAN
  • Stagiaire : Ibrahim BEN DHIAB

Sujet de stage

Dans le cadre des travaux de recherches menés sur les objets connectés, l'étudiant devra déployer au sein de l'IRCICA un réseau expérimental LoRaWan. Pour cela, il devra installer et configurer une passerelle LoRaWAN pour la réception des données. Puis, il déploiera une dizaine de noeuds. Chaque noeud est composé d'un microcontrôleur STM32F4, d'une radio LoRa I-NUCLEO-LRWAN1 et de capteurs (température, ouverture de porte, ...). L'étudiant devra réaliser la programmation de chaque noeud et mettre en place une solution pour faciliter le redéploiement du code. Les noeuds seront ensuite installés dans différents bureaux.

LoRaWAN

LoRaWAN est un protocole de télécommunication permettant la communication à bas débit, par radio, d'objets à faible consommation électrique communiquant selon la technologie LoRa et connectés à l'Internet via des passerelles, participant ainsi à l'Internet des objets. Ce protocole est utilisé dans le cadre des villes intelligentes, le monitoring industriel ou encore l'agriculture. La technologie de modulation liée à LoRaWAN est LoRa, née à la suite de l'acquisition de la startup grenobloise Cycléo par Semtech en 2012. Semtech promeut sa plateforme LoRa grâce à la LoRa Alliance, dont elle fait partie. Le protocole LoRaWAN sur la couche physique LoRa permet de connecter des capteurs ou des objets nécessitant une longue autonomie de batterie (comptée en années), dans un volume (taille d'une boite d'allumettes ou d'un paquet de cigarettes) et un coût réduits.

LoRaWAN est l'acronyme de Long Range Wide-area network que l'on peut traduire par « réseau étendu à longue portée ».

Matériel

  • 1 Raspberry Pi 3 Model B + carte SD minimum 8go : utilisé pour héberger le serveur LoRaWAN et la passerelle
  • X ST-NUCLEO-F401RE : composé d'un microcontrôleur STM32F4 et d'une connectivité type Arduino Uno Revision 3
  • Capteurs... (HT11 pour la température et l'humidité, PIR pour détection de mouvement infrarouge)
  • Lecteur de carte SD
  • Câble USB vers série

Configuration du Rasperry Pi

Installation de l'OS et configuration initiale

Tout d'abord, télécharger Raspbian Stretch Lite, Lite car l'interface graphique n'est pas utile pour notre utilisation. Ensuite, il s'agit simplement de suivre le guide d'installation de l'image sur la carte SD qui sera ensuite insérée dans le Pi.

Avant d'insérér la carte, pensé à ajouter la ligne enable_uart=1 à la fin du fichier config.txt situé dans la partition BOOT de la carte pour activer la liaison série du Raspberry. Une fois insérer, connecter le câble USB vers série sur le PC et les fils TX et RX sur les pins RX et TX du Pi respectivement. Les pins 8 et 10 de la liaison série du Pi sont visibles ci-dessous :

GPIO Raspberry Pi 3 Model B

Le Pi peut maintenant être alimenté, et on peut y accéder via un terminal à l'aide de la commande minicom -8 -b 9600 -o -D /dev/ttyUSB0. Les logins par défaut sont pi : raspberry .

Maintenant, il est nécessaire de connecter l'appareil à Internet, relier le ainsi par Ethernet, et il devrait se configurer automatiquement par DHCP. Par la suite, on souhaite se connecter par SSH au Pi, il est ainsi nécessaire de mettre en place une IP statique, pour cela, il faut au préalable récupérer des informations.

Lancer ip -4 addr show | grep global qui retournera ce genre de résultat inet 192.168.42.12/24 brd 192.168.42.255 scope global eth0. On connaît maintenant l'adresse IP du Pi, mais l'IP statique qu'on lui attribuera sera 192.168.42.250 pour s'assurer qu'aucun autre appareil utilise la même IP.

Ensuite, trouver l'adresse du routeur (ou de la gateway) avec ip route | grep default | awk '{print $3}', dans notre cas on obtient 192.168.42.1.

Enfin, récupérer l'adresse du serveur DNS à l'aide de cat /etc/resolv.conf et garder en tête l'adresse après nameserver.

La méthode dhcpcd sera utilisée pour définir l'IP statique:

Edité /etc/dhcpcd.conf comme suit à l'aide de l'éditeur de votre choix (dans mon cas nano):

# Example static IP configuration:
interface eth0
static ip_address=192.168.42.250/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.42.1
static domain_name_servers=192.168.42.12

Changer le mot de passe du Pi à l'aide de passwd puis rédemarrer le avec sudo halt.

Il est maintenant possible de se connecter en SSH au Pi avec ssh pi@192.168.42.250, il n'est plus nécessaire d'utiliser le câble série.

Configuration du iC880A-SPI

Tout d'abord, on configure les locales pour éviter d'éventuel problèmes, pour cela, taper sudo raspi-config, et naviguer vers Localisation Options/Change Locale. Une fois dans le menu Locale, sélectionner les locales en_GB.UTF-8 et fr_FR.UTF-8 avec la touche espace, puis entrée, et sélectionner fr_FR.UTF-8.

Mettez à jour les pacquettages du Pi avec sudo apt-get update && sudo apt-get upgrade -y.

Il existe un driver open source sur le github de Semtech pour les appareils LoRa basé sur un SX1301, et le concentrateur est justement équipé d'un SX1301. Installez git sur le Pi avec sudo apt-get install git, créé un dossier mkdir -p ~/LoRa/, navigué dedans cd ~/LoRa/ et cloné le git https://github.com/Lora-net/lora_gateway. Pour des raisons de débuguage, il faut modifier au préalable la ligne DEBUG_HAL= 1 dans /lora_gateway/libloragw/library.cfg.

Compilez la librairie et les quelques programmes de test situés dans les sous-dossiers de lora_gateway avec make. Si la compilation est réussie, la librairie libloragw.a a dû être créée et est prête à l'usage par le packet tracer qu'y sera installé par la suite.

Ce driver nécessite une interface SPI pour fonctionner, et elle doit être activée sur le Pi. Pour cela, retourner dans le menu raspi-config, puis dans Interfacing Options, activer SPI. Maintenant que SPI est activé, il faut préparer le Reset Pin Control, pour contrôler le pin du GPIO qui sera connecté au pin Reset du iC880A. C'est très simple, il existe dans le dossier lora_gateway un fichier shell nommé reset_lgw.sh et il est lancé de cette manière ./reset_lgw.sh {start|stop} [<gpio number>], dans notre cas, 17 est le pin du GPIO. Plus tard, on configurera le lancement de cette commande au démarrage du Pi. Connectez le concentrateur comme indiquez ci-dessous:

Aperçu des composants du concentrateur
Correspondance des PINS IC880A <> RaspBerry Pi 3
21 (VDD) 2 (+5V)
22 (GND) 6 (GND)
14 (SPI_CLOCK) 23 (SPI0_CLOCK)
15 (SPI_MISO) 21 (SPI0_MISO)
16 (SPI_MOSI) 19 (SPI0_MOSI)
17 (SPI_NSS) 24 (SPI0_CE0)
13 (Reset) 11 (GPIO_17)

Pour s'assurer que tout fonctionne bien, lancez l'utilitaire 'util_tx_test' avec ./util_tx_test -r 1257 -f 866.5 et vous devriez observer un résultat de ce genre:

Sending -1 LoRa packets on 866500000 Hz (BW 125 kHz, SF 10, CR 1, 16 bytes payload, 8 symbols preamble) at 14 dBm, with 1000 ms between each
lgw_board_setconf:427: Note: board configuration; lorawan_public:1, clksrc:1
lgw_rxrf_setconf:488: Note: rf_chain 0 configuration; en:1 freq:866500000 rssi_offset:0.000000 radio_type:2 tx_enable:1 tx_notch_freq:129000
lgw_rxrf_setconf:488: Note: rf_chain 1 configuration; en:1 freq:866500000 rssi_offset:0.000000 radio_type:2 tx_enable:0 tx_notch_freq:129000
lgw_start:823: Note: calibration started (time: 2300 ms)
lgw_start:844: Note: calibration finished (status = 159)
WARNING: problem in calibration of radio A for TX DC offset
Info: Initialising AGC firmware...
Info: putting back original RADIO_SELECT value
INFO: concentrator started, packet can be sent
Sending packet number 1 ...INFO: tx_start_delay=1495 (1495.500000) - (1497, bw_delay=1.500000, notch_delay=0.000000)
INFO: Enabling TX notch filter
58.a0.0.0.6a.5.1.2.0.9a.10.0.0.8.0.0.54.45.53.54.0.1.61.62.63.64.65.66.67.68.69.6a.end
OK
Sending packet number 2 ...INFO: tx_start_delay=1495 (1495.500000) - (1497, bw_delay=1.500000, notch_delay=0.000000)
INFO: Enabling TX notch filter
58.a0.0.3.3d.5.1.2.0.9a.10.0.0.8.0.0.54.45.53.54.0.2.61.62.63.64.65.66.67.68.69.6a.end
OK

Pour arrêter l'utilitaire, appuyer sur Ctrl+C. Si le test est bien réussi, on peut passer à la mise en place du serveur LoRa.

Configuration du LoRaServer

Au préalable, il faut installé le packet forwarder de Semtech, il tournera sur la Pi et permettra de transmettre les paquets RF reçus par le concentrateur vers le serveur LoRa à l'aide d'une liaison IP/UDP.

Comme pour lora_gateway, dans le même dossier, on clone le projet avec git clone https://github.com/Lora-net/packet_forwarder. Il faut maintenant le configurer.