Programmes APRS LoRa pour modules M5Stack

Matériel nécessaire

Photo du module M5Stack

Pour pouvoir mettre en œuvre ce tutoriel, vous avez besoin d’un module M5Stack Basic, d’un module LoRa 433 MHz pour M5Stack, et d’un câble USB C. Bien sûr, il vous faut un ordinateur, fonctionnant de préférence avec le système d’exploitation UBUNTU LINUX gratuit.


Arduino IDE

Capture écran de l'Arduino IDE

L’ensemble de la création d’un programme pour M5Stack en langage C++, peut s’effectuer dans l’environnement de développement Arduino IDE.

Logithèque UBUNTU

Capture écran de la logithèque UBUNTU

Vous pouvez installer l’Arduino IDE avec la logithèque UBUNTU.

Support des cartes ESP32

Capture écran des préférences

Dans le menu fichier de l’Arduino IDE, cliquez sur préférences. Entrez https://dl.espressif.com/dl/package_esp32_index.json dans l’URL de gestionnaire de cartes supplémentaires. Validez sur OK.

Gestionnaire de cartes

Capture écran du gestionnaire de cartes

Dans le gestionnaire de cartes du menu outils, puis type de carte, tapez esp32 dans le champ de recherche, et installez le module esp32 by Espressif Systems. Par la suite, dans le menu outils, puis type de carte, il faudra sélectionner M5Stack-Core-ESP32. Mais installons d’abord la bibliothèque.

Bibliothèque M5Stack

Capture écran du gestionnaire de bibliothèques

Dans le gestionnaire de bibliothèques du menu outils, installez la bibliothèque M5Stack by M5Stack.

Code source

				
// Hello v1.00 : Programme M5Stack.
// Ecrit par Frank LOBA.
// Date création : 05/11/2022.
// Dernière mise à jour : 05/11/2022.
			
			
/**** INCLUSION DES FICHIERS EN-TETE ****/
#include <M5Stack.h>
			
/**** DEFINITION DE LA FONCTION D'INITIALISATION ****/
void setup()
{
	// Initialisation du système.
	M5.begin();
				
	// Effacement de l'écran.
	M5.Lcd.clear();
				
	// Positionnement du curseur.
	M5.Lcd.setCursor(0, 0);
				
	// Définition de la taille des caractères.
	M5.Lcd.setTextSize(5);
				
	// Affichage de Hello à l'écran.
	M5.Lcd.print("Hello\n");
}
				
/**** DEFINITION DE LA FONCTION D'EXECUTION ****/
void loop()
{
}
				
				

Le code source Hello.zip est commenté et ne devrait pas être trop difficile à comprendre pour quelqu’un qui connaît le langage C++. Il s'agit d'un premier programme d'exemple. Il faut décompresser cette archive dans le répertoire des projets de l'Arduino IDE.

La directive #include <M5Stack.h> inclut le fichier d'en-tête permettant d’utiliser la bibliothèque M5Stack.

La fonction setup() est appelée au démarrage du M5Stack, et la fonction loop() en boucle pour l’exécution du programme. C’est donc dans la fonction setup() que l’on va initialiser le système. Ici, nous nous en servons pour effectuer un affichage à l’écran.

La méthode M5.begin() permet d’initialiser le système.

La méthode M5.Lcd.clear() efface l’écran.

La méthode M5.Lcd.setCursor(0,0) sert à positionner le curseur d’affichage au point de coordonnées (0,0), c’est à dire en haut à gauche de l’écran.

La méthode M5.Lcd.setTextSize(5), définit la taille des caractères affichés à l’écran. Ici, ils sont plutôt grands.

Et enfin, la méthode M5.Lcd.print("Hello\n") affiche la chaîne de caractères Hello à l’écran. Une chaîne de caractères s’écrit entre guillemets, et le caractère spécial "\n" effectue un retour à la ligne.

Nous laissons la fonction loop() vide, car nous n’effectuons aucune tâche en boucle dans ce programme.

Téléversement

Capture écran du téléversement

Il faut brancher le module M5Stack au port USB de l’ordinateur. Il est nécessaire de compiler et téléverser le programme, en cliquant sur la flèche droite, sous le menu fichier. Le programme fonctionne normalement.


Boutons

Capture écran de l'Arduino IDE

Ce programme vous apprend à utiliser les boutons du M5Stack. La fonction loop() s'exécute en boucle. La méthode M5.update() effectue à chaque fois la lecture de l'état des boutons. La méthode M5.BtnA.wasPressed() détecte l'appuis sur le bouton A. Cela est aussi valable pour le bouton B et C. La fonction delay(20) attend 20 ms. Vous pouvez télécharger le fichier : Button.zip


Port série

Capture écran de l'Arduino IDE

Ce programme vous apprend à utiliser le port série (USB). La méthode Serial.println() permet d'écrire dans le port série. Vous pouvez télécharger le fichier : Serial.zip

Moniteur série

Capture écran du moniteur série

Branchez le câble USB. Dans le menu outils de l'arduino IDE, cliquez sur moniteur série. Une fenêtre vous permet de voir les caractères envoyés sur le port série.


Haut-parleur

Capture écran de l'Arduino IDE

Ce programme vous apprend à utiliser le haut parleur. La méthode M5.Speaker.begin() initialise le son. La méthode M5.Speaker.setVolume() définit le volume. La méthode M5.Speaker.tone() émet un son. Vous pouvez télécharger le fichier : Speaker.zip


Bibliothèque M5ModemConfig

Capture écran du gestionnaire de fichier

En cliquant sur ce lien, vous pouvez télécharger la bibliothèque M5ModemConfig.zip développée par Robert F1TZU. Elle est indispensable pour pouvoir faire de l'APRS en mode LoRa avec un M5Stack. Il ne faut surtout pas utiliser le gestionnaire de bibliothèques pour l'installer. Il est nécessaire de copier, puis extraire, ce fichier ZIP dans le répertoire libraries de l'Arduino IDE.


Récepteur APRS LoRa

Capture écran de l'Arduino IDE

Ce programme vous apprend à recevoir par radio, en mode LoRa, des trames APRS, issues par exemple du relais F1ZRP. Il utlise la bibliothèque M5ModemConfig développée par Robert F1TZU. Le code source est commenté et ne devrait pas être trop difficile à comprendre pour quelqu’un qui connaît le langage C. La fonction setup() est appelée au démarrage du M5Stack, et la fonction loop() en boucle pour l’exécution du programme. C’est donc dans la fonction setup() que l’on va initialiser le système, et dans la fonction loop() que l’on va effectuer la réception des trames APRS LoRa. Vous pouvez télécharger le fichier : Aprs.zip


Bibliothèque M5Kiss

Capture écran du gestionnaire de fichier

En cliquant sur ce lien, vous pouvez télécharger la bibliothèque M5Kiss.zip développée par moi. Il ne faut surtout pas utiliser le gestionnaire de bibliothèques pour l'installer. Il est nécessaire de copier, puis extraire, ce fichier ZIP dans le répertoire libraries de l'Arduino IDE.

Quatres fonctions sont disponibles. La fonction "String TNC2toAX25(String TrameTNC2)" accepte comme paramètre une trame au format TNC2, et revoie une trame au format AX25. La fonction "String AX25toTNC2(String TrameAX25)" accepte comme paramètre une trame au format AX25, et revoie une trame au format TNC2. La fonction "String EncoderKISS(String TrameX)" accepte comme paramètre une trame au format TNC2 ou AX25, et revoie une trame codée avec le protocole KISS. La fonction "String DecoderKISS(String TrameKISS)" accepte comme paramètre une trame codée avec le protocole KISS, et revoie une trame au format TNC2 ou AX25. S'il y a une erreur, ces fonctions renvoient une chaîne de caractère vide, sauf pour la fonction EncoderKISS().


Tnc KISS APRS LoRa

Capture écran de l'Arduino IDE

Ce programme vous apprend à coder ou décoder avec un ordinateur, des trames APRS, échangées par radio en mode LoRa, issues par exemple du relais F1ZRP. Il utlise la bibliothèque M5ModemConfig développée par Robert F1TZU et la bibliothèque M5Kiss développée par moi. Le code source est commenté et ne devrait pas être trop difficile à comprendre pour quelqu’un qui connaît le langage C. La fonction setup() est appelée au démarrage du M5Stack, et la fonction loop() en boucle pour l’exécution du programme. C’est donc dans la fonction setup() que l’on va initialiser le système, et dans la fonction loop() que l’on va effectuer la conversion des trames APRS LoRa. Vous pouvez télécharger le fichier : Tnc.zip

axlisten ou APRX

Capture écran de axlisten

Le M5Stack est branché au port USB de l'ordinateur et le programme fonctionne. Il décode avec la commande AX25 axlisten les trames APRS issues du relais F1ZRP. Vous pouvez aussi vous en servir, avec APRX, pour faire un iGate et/ou un digipeater.

Installation de Linux AX25

Capture écran de apt-get

Afin de pouvoir utiliser axlisten, il faut d'abord avoir installé Linux AX25 sur votre ordinateur ou raspberry pi. Pour cela il faut écrire la commande suivante dans un terminal : sudo apt-get install ax25-apps ax25-tools.

Fichier axports

Capture écran du fichier axports

Comme le montre la photo, il est également nécessaire d'ajouter une ligne au fichier /etc/ax25/axports pour déclarer l'interface : lora F4XXX 115200 255 1 433.775 MHz (Lora). Il faut remplacer F4XXX par votre indicatif. Le nom du port est lora et la vitesse de transfert 115200. La fréquence 433.775 MHz est un commentaire.

Commande kissattach

Capture écran de kissattach

Pour finir, il est nécessaire d'attacher le port série avec la commande suivante : sudo kissattach /dev/ttyACM0 lora. /dev/ttyACM0 identifie le port série USB sur lequel est branché le module M5Stack. Il peut être différent chez vous. lora est le nom du port que l'on a configuré dans le fichier axports. Vous pouvez maintenant utiliser les commandes AX25 (axlisten, beacon, etc.) si tout s'est bien passé. Si vous tapez la commande ifconfig, vous verrez normalement votre port AX25 dans les interfaces réseau.


iGate APRS LoRa

Capture écran de l'Arduino IDE

Ce programme vous apprend à envoyer par Internet, à la base de données APRS-IS, des trames reçues par radio, en mode LoRa, issues par exemple du relais F1ZRP. Il utlise la bibliothèque M5ModemConfig développée par Robert F1TZU. Le code source est commenté et ne devrait pas être trop difficile à comprendre pour quelqu’un qui connaît le langage C. La fonction setup() est appelée au démarrage du M5Stack, et la fonction loop() en boucle pour l’exécution du programme. C’est donc dans la fonction setup() que l’on va initialiser le système, et dans la fonction loop() que l’on va effectuer les tâches. Vous pouvez télécharger le fichier : iGate.zip