Les modules LoRa de Lilygo sont annoncés pour fournir une puissance à la sortie de l'émetteur de +20dBm (100mW). Ayant eu un module qui me semblait suspect, j'ai été confronté au problème de la mesure de puissance. Mesurer la puissance d'un signal fugitif comme l'est celui en LoRa n'est pas toujours évident. J'ai donc écrit un petit script qui permet de le faire facilement. J'en ai profité pour en écrire un deuxième pour tester la sensibilité de la réception. J'ai ainsi pu constater qu'aucun de mes modules n'atteignait la puissance annoncée, elle était plutôt de +17dBm. |
Logiciel de test émission
Le logiciel est conçu de manière à produire un signal modulé en FM sur 433,775 MHz (paramétrable) de façon cyclique et continue.
La boucle principale produit plusieurs niveaux de puissances successifs (nombre et niveaux paramétrables) et d'une durée paramétrable.
A chaque niveau de puissance, la fréquence de modulation augmente d'un pas programmable (100Hz par défaut) permettant ainsi de mieux appréhender le processus en écoutant le signal produit sur un récepteur.
Par exemple, une séquence peut être : 5s à +2dBm modulé à 1000Hz, puis 5s à +10dBm à 1100Hz, puis 5s à +20dBm à 1200Hz, etc...
Une fois le dernier niveau atteint, la boucle recommence au 1er niveau, et ainsi de suite.
On peut donc ainsi facilement mesurer la puissance et la fréquence d'émission.
Sur mes modules, je n'ai atteint que +17,1dBm sur le meilleur d'entre eux. La fréquence est rarement parfaitement calée et stable.
L'écran OLED affiche toutes les phases d'initialisation et en cours de programme. Les mêmes informations détaillées sont disponibles sur le port série à 115200 bauds (par défaut)
Les lignes à modifier dans le script pour correspondre à vos besoins sont :
// If LilyGo T-beam board. Comment out for this board
//#define Lilygo_tbeam
// If LilyGo T3 board. Comment out for this board
#define Lilygo_T3
// defines the OLED driver type comment out if using SSD1306 driver. Comment if 1.3" inch uses SH11106
#define ssd1306
// TX delay in ms at each power
int TXdelay = 2000;
// TX frequency in MHz
double TXfreq = 433.775;
// audio start frequency in Hz
int TXtonebase = 1000;
// audio step in Hz
int TXtonestep = 100;
// array in which all desired power levels are given in dBm
const int PowerArray [] = {2,4,6,8,10,17,20};
La configuration ci-dessus produit un signal sur 433,775 MHz de niveaux de +2,+4,+6,+8,+10,+17,+20 dBm d'une durée de 2s et modulé de 1000Hz par pas de 100Hz.
Le module utilisé est un LilyGO T3 avec un écran utilisant le driver SSD1306.
Logiciel de test réception
Le script passe le module en réception FSK et affiche en continu le niveau RSSI sur l'écran OLED et le transmet sur le port série à 115200 bauds (par défaut)
On peut alors mesurer la sensibilité en injectant un signal de niveau connu à l'aide d'un générateur et comparer à celui affiché.
Le niveau sans signal est, sur mes modules, d'environ -118 dBm.
Peu de choses à paramétrer, le type de module, le type de driver écran et la fréquence.
#define Lilygo_Tbeam
//#define Lilygo_T3
//#define ssd1306
double RXfreq = 433.775;
Les logiciels ont été testés avec des modules Lilygo T3 et Tbeam.
Les logiciel ont été écrits sous PlatformIO et sont disponibles sur mon site Github