Mise en oeuvre du protocole LORA par radio logicielle
Sommaire
Description du stage
Dans le cadre de ma quatrième année de ma formation d'ingénieur spécialités IMA, j'effectue un stage qui a pour but d'étudier la mise en place du protocole LoRa par radio logicielle. Pour réaliser cette étude j'utilise le hackRF One un émetteur-récepteur SDR (par radio logicielle). Dans un premier temps il est nécessaire d'étudier les différentes documentations liées a l'utilisation du HackRF One afin d'établir un descriptif technique facilitant son implémentation. Pour ensuite implémenter l'application qui devras gérer le protocole LoRa.
Avancement du Stage
Semaine 1
HackRF One
Descriptif
HackRF One est un périphérique de radio logiciel (Software Defined Radio), capable de de gérer la réception et l'émission de signal Radio allant de 1MHz à 6GHz. Crée pour permettre le test et le développement de technologie radio. HackRF One peut être utilisé en tant que périphérique USB ou peut être programmé pour un fonctionnement autonome.
- Réception half-duplex.
- 20 millions d'échantillons par seconde.
- 8 bit d'échantillons en quadrature (8-bit I et 8-bit Q).
- Compatible avec de nombreux radio logiciel.
- Gain RX, TX et filtre passe bande paramétrable par logicielle.
- Puissance de l'antenne contrôlée par logicielle (50 mA a 3.3V).
- Connecteur SMA femelle pour antenne.
- Connecteur SMA femelle pour synchronisation du signal d'horloge.
- Hi-Speed USB 2.0.
- Alimentation USB.
- Partie matériel open source.
Vous trouverez plus de détails sur les caractéristiques techniques sur le wiki du projet hackrf.
Le HackRF One se présente comme une alternative innovante et à bas prix aux projets d'étude de technologie Radio, en effet une grande partie du traitement de signal est effectué par logiciel ce qui réduit les coûts matériels comparativement aux autres alternatives du marché. De plus pour son prix le HackRF One propose une gamme de fréquence très large qui lui permet d'étudier tout signal radioélectrique utilisant tout type de modulation.
GNU Radio et SDR
Une radio logicielle ou Software Defined Radio(SDR), est un récepteur/émetteur Radio où les composants matériel ont été remplacés par logiciel. Les signaux sont traiter numériquement, après une conversion analogique-numérique.Le traitement est effectué via un DSP (Digital Signal Processor) qui permet une grande flexibilité et permet de s'adapter a différent type de système radio.
GNU Radio
Gnu Radio est une suite logicielle libre dédiée à l'implémentation de radios logicielles et de systèmes de traitement du signal. Gnu radio permet d'effectuer toute opération de traitement du signal. Implémenté en Python et en C++ à permit l'ajout constant de nouveaux module rendant ce logiciel de plus plus en performant. GNU Radio embarque un outil en interface graphique (GUI) qui permet d'implémenter avec plus de facilité les différents modules.
C'est via cette suite que la prise en main du HackRF One ce fait. D'autres SDR son disponible est compatible avec l'hackRF One, l'avantage qu'offre GNU Radio c'est qu'elle permet l'implémentation de notre propre solution.
Gqrx
Il existe plusieurs logiciels graphique implémentant un analyseur de spectre par radio logicielle, je me suis tourné vers le logiciel Gqrx qui permet la prise en main rapide du HackRF One. Gqrx est une radio logicielle open source exploitant GNU Radio, fonctionne seulement en tant que récepteur. Elle est compatible avec de nombreux équipement SDR.
Installation
L'utilisation du HackRF One se fait par la radio Logicielle GNU Radio et de librairie hackrf. Pour installer les différents packages il est préconiser d'utiliser le package manager Pybombs, d'autres alternatives sont possibles ici. Nous ne détaillerons que l’installation via Pybombs.
Installation via Pybombs
Le logiciel Pybombs étant un projet opensource nous pouvons récupérer la dernières version du logiciel d’installation sur Git.
- 1. Récupérer le dépôt GIT:
$ git clone https://github.com/pybombs/pybombs.git
- 2. On ce place dans le répertoire pybombs, Nous utilisons l'installateur Python pour installer PyBOMBS.
$ cd pybombs
$ sudo python setup.py install
- 3.On initialise un chemin de prefix c'est ici que seras installés les paquets.
$ pybombs prefix init ~/prefix
- 4.Nous installons le paquet gnu radio.
$ pybombs install gnuradio
- 5.On fait la meme chose pour la recette hackrf
$ pybombs install hackrf
- 5.Une fois les paquets installés, pour pouvoir utiliser les commande associés on exécute la commande suivante.
$ source /home/<user>/prefix/setup_env.sh
- 6.Ajouter cette même ligne a la fin du fichier /home/<user>/.bashrc.
Prise en main du Hackrf One
Test du Hackrf One
Après avoir connecter l'HackRF, on exécute la commande suivante:
$ hackrf_info
Si le HackRF One fonctionne correctement on a la réponse suivante:
hackrf_info version: git-9bbbbbf libhackrf version: git-9bbbbbf (0.5) Found HackRF Index: 0 Serial number: ###################### Board ID Number: 2 (HackRF One) Firmware Version: 2017.02.1 (API:1.02) Part ID Number: 0x######## 0x#########
Dans mon cas j'ai tout d'abord eu l'erreur suivante:
hackrf_open() failed: HACKRF_ERROR_LIBUSB (-1000)
Cela est dû aux droits accordés aux utilisateurs concernant l'accès arbitraire des périphériques USB. Une option pour contourner ce problème est d'écrire un règles udev afin d'autoriser à un utilisateur appartenant à un groupe de pouvoir gérer un périphérique. Pour cela il faut crée un nouveau fichier dans le répertoire /etc/udev/rules.d:
$ vim /etc/udev/rules.d/52-hackrf.rules
et ajouter les lignes suivantes:
ATTR{idVendor}=="1d50", ATTR{idProduct}=="604b", SYMLINK+="hackrf-jawbreaker-%k", MODE="660", GROUP="plugdev" ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev" ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="hackrf-dfu-%k", MODE="660", GROUP="plugdev"
Ensuite il suffit de redémarrer ou d’exécuter la commande suivante udevadm control --reload-rules en root. Ensuite rebrancher le hackRF One. Si vous n'avez toujours pas accès au hackrf one vérifier que vous appartenais bien au groupe "plugdev".
Mise à jour du hackrf one
Avant d'utiliser notre Hackrf il faut s'assurer qu'il soit bien mise a jour. Tout d'abord avec la commande hackrf_info on vérifie la version du firmware.
hackrf_info version: git-9bbbbbf libhackrf version: git-9bbbbbf (0.5) Found HackRF Index: 0 Serial number: 0000000000000000a06063c82316395f Board ID Number: 2 (HackRF One) Firmware Version: 2017.02.1 (API:1.02) Part ID Number: 0xa000cb3c 0x00544f59
Vous pouvez trouver la dernière version du firmware ici ou sur le dépôt git. Une fois télécharger, on extrait le paquet:
tar -xvf hackrf-2017.02.1.tar.xz
On ce place dans le répertoire où à été extrait les fichiers, on accède au dossier firmware-bin.
cd firmware-bin/
La mise à jours ce fait via la commande hackrf_spiflash.
hackrf_spiflash -w hackrf_one_usb.bin
Une fois la mise à jour effectué, il faut redémarrer votre hackrf en pressant le bouton reset. Parfois il est aussi nécessaire de mettre a jours le fichier de configuration du cpld embarqué sur l'hackrf one, le cpld permet d'interfacer le microcontrôleur et les CAN et CNA.
hackrf_cpldjtag -x firmware/cpld/sgpio_if/default.xsvf
De la même façons redémarrés l'hackrf one. Vérifier avec hackrf_info si le firmware à bien été mise à jour.
Gqrx
Il vous faut tout d'abord installer les packages gnuradio avant d'installer Gqrx. Une fois gnuradio installer, on utilise la commande suivante pour installer gqrx.
$ sudo apt-get install gnuradio gqrx
Semaine 2
Gqrx
Prise en main du logiciel
Connecter tout d'abord le module HackRF One, et exécuter gqrx:
$ gqrx
Configuration
Une fois exécuté la première fenêtre qui s'affiche et la suivante:
Elle permet de sélectionner les paramètres de votre installation. Dans la plus part des cas gqrx détecte automatiquement votre périphérique et ajuste les paramètres pour une performance optimal.
Menu
Sous le menu vous trouvez différents raccourcis:
- Bouton On/off
- Configuration du périphériques.
- Récupérer une configuration sauvegardé.
- Sauvegarder la configuration actuel.
- Enregistrer données I/Q.
- Configuration des paramètre de contrôle a distance (TCP).
- Pleine écran.
Fenêtre principale
Le logiciel gqrx ce présente comme suit:
Le fenêtre principale ce compose de:
- La fréquence centrale sur lequel est calibré le récepteur.
- Dessous ce trouve l'analyseur de spectre autour de la fréquence centrale.
- Dessous ce trouve ce qu'on appel "waterfall frame" qui affiche l'historique du spectre dans le temps.
Option récepteur
A gauche vous trouverez les options de réglage du récepteur.
La fréquence affiché est l'offset entre la fréquence de réception et la fréquence centrale calibré. Dessous nous avons la possibilité de sélectionner différents filtre (passe bas, coupe bande, large bande, réglages personnalisés) la qualités du filtre va principalement dépendre de la puissance de calcul de votre PC. Plusieurs types de démodulation peuvent être configurer:
- CW-U ou CW-L :Pour la démodulation d'onde entretenue.
- USB or LSB: Pour les modulation à bande latéral unique (en Bande latéral supérieur ou bande latéral inférieur).
- WFM(stéréo ou mono): Pour la démodulation FM.
- AM: Pour la démodulation d'amplitude.
- RAW I/Q: pour la démodulation en quadrature de phase.
- Demod Off: Aucune démodulation.
Le Squelch permet de régler la sensibilités du récepteur, elle permet par exemple d'ajusté la sensibilité au bruit pour éliminer ce dernier. Attention un gain trop élevé peut endommager le récepteur lors d'une mauvaise utilisation.
Les paramètres NB1 et NB2 sont deux limiteur de bruit.
Fenêtre de réglage de l'entrée (Imput control)
Gqrx offre la possibilité de configurer plusieurs paramètres pour traiter les signaux reçus par l'antenne. La fenêtre ce présente comme suis:
Il y a plusieurs option intéressante, voici les principaux paramètres que vous pouvez être amenez à utiliser.
LNB LO permet de régler ma fréquence de oscillateur local dans le cas ou un up/down converter est utilisé en amont du périphérique. Dans les autres cas on l'initialise à 0.000000 MHz.
Hadware AGC: Dans le cas ou votre périphérique possède un AGC (Automatic gain control), elle permet d’adapter le gain selon la puissance des signaux reçus
Swap I/Q:Permet d'inverser les chaîne I et Q
No limits:Désactive les limites du logiciel, et permet de dépasser le domaine fréquentiel recommander par la SDR.
DC rem: Permet d'éliminer la composante continue.
Freq Correction: Cette option permet de régler les erreur de déviation de l'oscillateur interne. Pour cela vous commencez par régler votre récepteur sur la fréquence d'un générateur de fréquence fiable, et ensuite régler la valeurs de Freq.correction afin que la fréquence du signal ce rapproche au maximum de celle du signal de référence.
Antenna:spécifie si l'antenne est en réception ou émission ou les deux.
Fenêtre audio
En bas à droite, nous trouvons la fenêtre "audio" qui correspond au spectre du signal démodulé. Nous pouvons régler l’échelle de la fenêtre, ainsi qu'enregistrer le signal reçus sous un format .wav.
Fenêtre de réglage de la FFT
Cette fenêtre permet de régler les paramètres de la FFT.
Le paramètre FFT size permet de régler le nombre de points utilisés lors du calcul de la FFT (la resolution de la FFT). FFT Averaging permet d’effectué une moyenne sur la FFT, ce qui a pour effet de réduire le niveau de bruit. Vous trouverez une option de détection des raies via Peak D, et Peak H qui permet d'effectué une moyenne sur les valeur max des raies ce qui a pour effet de garder l'enveloppe du spectre de la FFT. les bouton Zoom R, C, D sont utilisés pour:
- R: Remise à zéro des réglages du spectre du signal.
- C: Centrer le spectre du signal autour de la fréquence originale.
- D:Centrer le spectre du signal autour de la fréquence du démodulateur.
Récepteur FM
Une premières application intéressante pour vérifier le bon fonctionnement du HackRF One, et pour la prise en main du logiciel est la réalisation d'un récepteur FM.
- 1:Connecter votre HackRF One au PC, et lancer le logiciel qgrx.
- 2:Une fois le logiciel lancé, régler le mode de démodulation sur WFM(Mono), le filtre sur wide.
- 3:Choisissez la fréquence radio sur laquelle vous voulez écouter puis lancer l'analyse via le bouton On/off.
- 4:Vous remarquerez que la fréquence d'émission n'ai jamais exactement celle prévus, il vous faut donc déplacer le filtre de réception vers la raie la plus proche.
- 5:Dans la fenêtre audio vous pouvez régler la valeur du gain ce qui permet d'augmenter le volume. Via la fonction averaging vous pouvez réduire le bruit afin d'avoir un signal plus propre.
Sniffer GSM
La seconde application intéressante qui permet d'utiliser pleinement les différente fonction du HackRF One est le GPS sniffing. La popularités des logiciel SDR à permis la mise en place de nombreuse application open source. De nombreux propose l'analyse des paquets GSM.
Prise en main de GnuRadio
Pour pouvoir comprendre utiliser j'ai commencé par suivre la suite de vidéo de cours permettant la prise en main de GNU Radio. Suivis de plusieurs application intéressante utilisant le HackRF One tels que le hacking du télécommande d'ouverture de porte de garage.
LoRa
Le domaine de l'IoT (Internet of things) étant en pleine essor ces dernières années, de nouvelle problématiques on vu le jours en ce qui concerne leur réseaux de communication. On cherche à interconnecter des systèmes basique qui doivent être isolés et fonctionnant en autonomie, il est donc nécessaire de trouver un moyen de communiquer consommant peu d'énergie, sans-fil, facilement configurable et pouvant être utilisé n'importe où. Dans le domaine des objets connectés, il y a tout d'abord deux catégories de réseaux sans fils. Tout d'abord les réseaux sans fils faibles distance d'avantage utilisés en domotique dans le cadre des maisons connectées. Puis de l'autre cotés les réseaux longue portée.