Perroquet radio-amateur avec un ESP32

Article en date du et modifié le
Catégorie : Projet Tags : , , ,

Interface perroquet radio (M5Stack)
Interface perroquet radio (M5Stack)

En radio, pour dire aux autres stations que nous sommes sur une fréquence et qu’ils peuvent nous répondre, il faut se signaler. On appelle ça « lancer un appel ». C’est très simple, il suffit de dire qui on est avec notre indicatif et laisser un silence de quelques secondes pour une éventuelle réponse. Tout ça en boucle…

Vous comprendrez que quand je fais de la radio pendant plusieurs heures d’affilée comme pendant les concours, ma voix me quitte pendant quelques temps !

Un perroquet à la rrrrescouuusse !

Le remède est tout simple : il faut un « perroquet » ! Autrement dit, il faut un dispositif qui répète en boucle un fichier audio de notre appel et qui passe le poste radio en émission en même temps.

Mais quelle race ou espèce de perroquet choisir ?

Il existe énormément de logiciels pour faire cette fonction assez simple. Ils tournent tous sur un ordinateur ou smartphone. On les relie à un poste radio et le tour est joué !

Le point négatif du PC dans mes expéditions radio souvent portables est le poids. Le poids est vraiment critique pour mon dos en montagne !

Pour le smartphone, quand je suis en sortie ce n’est vraiment pas la chose qui doit tomber en panne de batterie donc je préfère le garder chargé au cas où je devrais contacter quelqu’un. De plus, je ne préfère pas compter sur une batterie externe au cas où je l’oublierai.

La solution Home-Made

En somme, je veux quelque chose de léger et qui ne consomme pas beaucoup.

Il y a plusieurs façons pour le fabriquer nous même :

  • En recyclant un vieux lecteur MP3 et en utilisant la fonction VOX des postes (émission à la détection de la voix).
    C’est simple et rapide mais je n’aime pas la latence que peut avoir un VOX.
  • En prenant une carte Arduino et un module audio.
    C’est bien et simple mais je n’ai pas le module audio.
  • En prenant une carte ESP8266 ou ESP32.
    Celle-ci est évidemment celle que j’ai retenu et qui a le mérite de ne pas vraiment nécessiter de bidouiller de l’électronique. C’est donc plus simple et moins à risque de tomber en panne !

Le perroquet est en route

Le petit plus qui serait bien pour ce projet serait d’avoir un écran. Je n’ai pas beaucoup d’écrans dans les tiroirs mais j’ai un vieux M5Stack Core (le premier du nom que j’ai eu à sa sortie).

Perroquet radio à base de M5Stack
M5Stack branché au poste en prototypage

C’est quoi un M5Stack ?

Un M5Stack n’est qu’un ESP32 packagé dans un petit boîtier et accompagné de petits atouts autour de lui sympathiques :

  • Un ESP32 avec WiFi et Bluetooth
  • Un écran LCD rétro-éclairé de 320×240
  • 3 boutons sous celui-ci
  • Un lecteur de carte micro SD
  • Un haut-parleur
  • Une batterie intégrée
  • 40€ …

Le « stack » vient du fait qu’on peut empiler des modules faits par la marque comme des modules GPS, LoRa, GSM etc. Pour ce faire il suffit d’enlever la dernière partie de la pile (la batterie). De mettre la nouvelle sous l’écran puis remettre la batterie. Et voilà !

Pour ce projet ultra simple, prendre cette carte M5 est un peu too much mais au moins je l’utilise au lieu de la laisser dans mon tiroir !

Partie logiciel

L’audio

Il existe des bibliothèques pour générer de l’audio par ESP et la principale est ESP8266Audio. Elle permet de lire les fichiers WAV, MP3 et plus depuis une carte SD (et plus !) donc c’est parfait.

Pour les curieux, elle utilise la liaison I2S de l’ESP (Inter-IC Sound) qui permet d’envoyer de l’audio encodé ou brut à un dispositif qui peut le décoder ou à un DAC. L’avantage c’est qu’il supporte le débit de l’audio et que son utilisation n’est pas bloquante pour le CPU (il faut juste lui alimenter son buffer avec toutes les données et lui dire de jouer à chaque tour de boucle).

Communication avec le poste radio (Yaesu FT-857D)

Les postes radio-amateurs peuvent communiquer avec un ordinateur grâce à une liaison série. Le protocole utilisé entre les 2 s’appelle CAT. Il est très simple à utiliser et chaque constructeur de postes fourni les commandes usuelles comme par exemple la récupération ou le changement :

  • de la fréquence
  • du mode de modulation (FM, USB, LSB, etc.)
  • de la valeur du S-Mètre
  • de l’état du PTT
Documentation pour le Yaesu 857 des commandes CAT
Documentation pour le Yaesu 857 des commandes CAT

Tout comme pour l’audio, il existe des bibliothèques qui ont déjà implémenté tout ça pour nous. J’ai décidé de prendre et modifier celle de Philippe F6CZV.

Je l’ai modifié pour qu’elle prenne en charge les ESP32 qui utilise d’une manière différente les ports séries qu’un Arduino ou ESP8266. J’en profite également pour remanier le code d’origine pour le mettre plus à mon goût.

Au boulot et avec une interface jolie si possible…

Maintenant que j’ai toutes mes pierres, au boulot ! Le développement se déroule sans problèmes mais j’ai dû couper la connexion entre le haut-parleur et le M5 pour que le son soit meilleur à la sortie du pin.

Déroulement du programme

Au démarrage, je teste si le poste est connecté et je scanne les dossiers sur la carte mémoire.

Chaque dossier est un groupe d’appels. Dans ce groupe on trouve les fichiers MP3 ou WAV qui seront joués de manière aléatoire (histoire de ne pas trop trop faire robot non plus pour les autres).

Ensuite, on peut utiliser les différents boutons en faisant des appuis courts ou longs pour changer le groupe d’appel, les secondes entre les appels etc.

À l’écran on voit le groupe utilisé, les secondes d’intervalles ou restantes, la fréquence actuelle, son mode et la valeur du signal reçu. En émission, un gros TX rouge apparaît et le mot playing.

Partie matériel

Niveau matériel il n’y a vraiment rien de compliqué. Je vais me servir du DAC de l’ESP32 (sortie 25) pour l’audio. Pour la partie communication avec le poste radio j’utilise les ports RX et TX 2 (sorties 16 et 17).

Pour l’alimentation, j’utilise un L7805CV qui convertit les 13.8V du port CAT du poste en 5V.

Démonstration

Voici une petite démonstration sur table du système (attention elle est en accéléré). L’audio sort du M5, rentre dans le poste et je l’écoute par une clé SDR sur mon PC.

Vous pouvez retrouver les sources de mon projet ici : https://github.com/valentintintin/HamRadio-M5Stack-Logger

Et ensuite ?

On a un ESP entre les mains donc pourquoi pas utiliser sa partie Wi-Fi ? Je vais donc lui rajouter un serveur Web pour manipuler les fichiers sur la SD afin de gérer les appels depuis mon téléphone.

J’aimerais aussi rajouter une fonction de log de contact. Je le fais actuellement sur une feuille à chaque sortie mais je dois refaire une saisie une fois à la maison et des fois j’oublie et ça traîne… Surtout que ce genre de clavier est pas mal.

Pourquoi pas rajouter la fonction enregistrement audio des contacts ? Le poste nous donne l’audio et avec une carte spécial I2S (ou l’ADC de l’ESP mais légèrement plus pénible en filtrage et code). J’ai trouvé ce projet à creuser https://github.com/MhageGH/esp32_SoundRecorder ou celui-ci https://www.pjrc.com/author/paul/

Une version plus « light »

Après avoir présenté ce petit projet à mon radio-club, Christophe F1JKY a été touché par sa simplicité et son côté évolutif. Son usage serait plus dans l’optique de lancer des balises morses pendant ses sorties hyperfréquences où il faut émettre pendant un petit moment pour que l’interlocuteur d’en face ait le temps de pointer sa parabole. Je lui ai donc proposé de le refaire en mode plus allégé.

Le choix de la carte

Au vu de la différence de prix entre un ESP32 et un ESP8266, je suis resté sur le 32. Il faut également un lecteur de carte SD.
J’ai dans mes tiroirs un ESP32-CAM qui est un shield tout fait pour utiliser une caméra. Ce shield incorpore directement un lecteur de carte micro SD. Par simplicité je pars là dessus !

Partie matériel

Petite subtilité auquel je n’avais pas pensé ! Le pin 25 du DAC est utilisé par la caméra… Je ne l’utilise pas donc ce n’est pas grave et cette dernière s’enlève. Il va néanmoins falloir souder un fil directement sur le Core de l’ESP32 pour l’avoir.

ESP32-CAM I2S pin 25
ESP32-CAM soudure sur la sortie I2S pin 25

Pour l’état, on peut peut-être utiliser le flash (sur le pin 26 donc à voir car il est utilisé par l’I2S) ou mettre une LED sur une autre sortie. Ensuite, un bouton pour lancer la boucle de lecture et c’est plié !

Partie logicielle

Le shield utilise une manière différente de contrôler les cartes SD (ce n’est pas le même branchement). Il faut donc changer de bibliothèque. Ce n’est pas un souci car elles sont faites de manière objet et donc elles sont interchangeables.

Le contrôle du poste radio se fait de la même manière car Christophe a un Yaesu 817 de la même famille que le mien. Le code viendra plus tard 😉