Client Web vers GNU Radio
Dans le cadre du projet « Remote SDR« , il est nécessaire d’envoyer, depuis une page web, un flux audio et des paramètres vers l’émetteur BLU distant codé dans GNU Radio .
Parmis les blocs de traitement présent dans GNURADIO-companion, il existe le bloc UDP source pour entrer un flux de données audio. Pour envoyer ce flux depuis un client Web, on peut utiliser les websockets. Le programme proposé ci-après en python 3, récupère le flux audio reçu du client web suivant le protocole websocket (port 8005) et passe ces données à GNU Radio suivant le protocole UDP (port 9005).
En plus ce programme à chaque réception d’une trame audio (paquet de 512 octets), fait changer d’état la pin 26 du GPIO de l’Orange PI One Plus. Cela permet de générer un signal alternatif qui une fois redressé, va exciter des relais pour alimenter l’émetteur. Voir le détail ici.
#!/usr/bin/python3 # This is client.py file
import socket
import asyncio
import websockets
import os # To execute system command
# create a socket object
s_audio = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# get local machine name
host = '127.0.0.1'
port_audio_Web = 8005
port_audio_GR = 9005
numgpio=227 # GPIO 227 corresponds to pin 26 in Orange PI One PLUS H6
numgpio=str(numgpio)
# Préparation port commande relais
os.system("sudo echo "+numgpio+" > /sys/class/gpio/export") #activation
os.system("sudo echo out > /sys/class/gpio/gpio"+numgpio+"/direction") # Output
# connection to hostname on the port.
print ("Passerelle audio client Web vers TX")
# Receive bytes audio
async def audio(websocket_a, path):
etat=True
while True:
# on recupere les data du micro du client
donnee_audio = await websocket_a.recv()
s_audio.sendto(donnee_audio,(host,port_audio_GR))
# Oscillateur pour activer le relais alimentation via un condensateur et un redressement
# Oscillator on pin 26 as watchdog
etat=not etat #inversion à chaque trame recue
if etat:
os.system("echo 1 > /sys/class/gpio/gpio"+numgpio+"/value")
else:
os.system("echo 0 > /sys/class/gpio/gpio"+numgpio+"/value")
start_server_audio = websockets.serve(audio, "", port_audio_Web)
asyncio.get_event_loop().run_until_complete(start_server_audio)
asyncio.get_event_loop().run_forever()
Pour l’envoi des commandes de configuration de l’émetteur, on utilise le protocole xmlrpc coté GNU Radio (port 9004) et toujours les websockets coté client Web (port 8004).
#!/usr/bin/python3 #
import asyncio
import websockets
import json
import xmlrpc.client
# create a socket object
# get local machine name
host = 'localhost'
port_para_Web = 8004
adr_local = "http://localhost:9004"
Sxml = xmlrpc.client.ServerProxy(adr_local)
print("Passerelle Parametres TX du client WEB")
async def consumer_handler(websocket_p, path):
async for message_recu in websocket_p:
F=json.loads(message_recu)
if "Fr_TX" in F :
print("Fr_TX ",F["Fr_TX"])
Sxml.set_Fr_TX(float(F["Fr_TX"]))
if "GRF_TX" in F :
print("GainRF TX ",F["GRF_TX"])
Sxml.set_GainRF_TX(float(F["GRF_TX"]))
if "GIF_TX" in F :
print("GainIF TX ",F["GIF_TX"])
Sxml.set_GainIF_TX(float(F["GIF_TX"]))
if "GBB_TX" in F :
print("GainBB TX ",F["GBB_TX"])
Sxml.set_GainBB_TX(float(F["GBB_TX"]))
if "LSB_USB" in F :
print("LSB USB ",F["LSB_USB"])
Sxml.set_LSB_USB(float(F["LSB_USB"]))
await websocket_p.send("OK")
start_server_para = websockets.serve(consumer_handler, "", port_para_Web)
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(start_server_para)
loop.run_forever()
except KeyboardInterrupt:
logging.info("Process Para interrupted")
finally:
loop.close()
logging.info("Arret Para service.")
Pour le récepteur décrit ici, nous utilisons les mêmes protocoles pour passer les paramètres de configuration.
Les sources sont disponibles sur Github F1ATB/Remote-SDR.
Articles décrivant Remote-SDR
- Remote SDR V5 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v5 – Installation manuelle
- Remote SDR v5
- Écoute Satellite QO-100 en direct
- RTTY
- Dépannage
- Émetteur – Récepteur pour QO-100
- SSTV
- WSJT-X – FT8
- Omnirig – Remote SDR
- Ports de communication
- Générateurs de tonalités
- Positionnement sorties GPIO
- Scanning en réception
- Gains et Dynamiques
- Gestion des fréquences
- Lancement de Remote SDR
- Refroidissement CPU
- Autorisation traitement audio et microphone
- Configurations
- Caractéristiques
- Introduction à Remote SDR
- Remote SDR – Canaux Audio
- CW avec Remote SDR
- Bouton Rotatif et Manipulateur Morse pour Remote SDR
- VHF et UHF NBFM Transceiver
- Remote SDR v4
- Gpredict – Remote SDR
- Remote SDR V4 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v4 – Installation manuelle
- SA818 / RTL-SDR
- Remote SDR – Exemples de Réalisations
- QSO via QO-100 avec un smartphone
- Remote SDR V2 – Architecture Logiciel
- Remote SDR V1 – Approvisionnements
- Remote SDR V1 – Interface Homme Machine
- Remote SDR V1 – Traitement du Signal
- Client Web vers GNU Radio
- GNU Radio vers client Web
- Emetteur BLU distant
- Récepteur BLU distant
- GPIO de l’Orange PI One Plus H6
- Émetteur et récepteur vers Q0-100 avec 2 SDR – Remote SDR V1
- Installation TCXO sur un HackRF
Commentaires récents