O Fmdx Webserver é um projeto open-source mantido pela FMDX.org, uma plataforma colaborativa dedicada à pratica do DXing, o hobby de captar e identificar sinais de rádio ou TV de longa distância.
Esse projeto consiste em um servidor web muito leve, que se comunica com receptores baseados no chip TEF668x e permite que usuários via internet interajam com ele.
Essa interação é feita através de uma interface web simples e amigável, onde o usuário acessa o receptor remoto, obtém o streaming de áudio e as informações automáticas de transmissão via RDS.
Dessa maneira, pessoas ao redor do mundo podem explorar e ouvir faixas de frequência como se estivessem no local do receptor com seus próprios equipamentos de rádio.
Além disso, o Fmdx Webserver pode se conectar à lista de servidores da plataforma FMDX.org, aumentando a visibilidade do seu receptor e fortalecendo a comunidade.
A ideia do projeto é manter um computador conectado ao receptor de rádio, preferencialmente 24hs por dia. Portanto, SBCs como Raspberry Pi são boas escolhas pelo baixo consumo elétrico.
Como a maioria das SBCs funcionam com sistemas operacionais Linux, o foco aqui será nele – mais especificamente no Raspberry Pi OS.
No entanto, uma vez que o Raspberry Pi OS é baseado no Debian, os mesmos passos apresentados aqui também servem para outros sistemas derivados, como o Ubuntu.
Lembrando que toda a documentação oficial consta no Github do projeto: https://github.com/noobishsvk/fm-dx-webserver
Nesse artigo veremos como preparar o Raspberry Pi OS, adicionar uma interface de áudio USB e instalar o servidor propriamente dito.
Ainda, veremos como configurar o rádio para se comunicar com o servidor no Raspberry Pi e por fim realizar as configurações básicas através do assistente de configuração.
Se você gosta deste universo, leia também sobre SDR: SDR com RTL2838, ADS-B com Raspberry e OpenWebRX
Equipamento Necessário
- SBC (Single Board Computer) como Raspberry Pi 3 ou superior
- Interface de áudio USB
- Cabo de áudio
- Rádio receptor com tuner TEF668x com firmware PE5PVB
Enquanto o Fmdx Webserver se comunica via rede com o rádio para enviar e receber comandos, o áudio, por sua vez, não é transmitido por esse meio.
Portanto, fazemos isso através de um simples cabo de áudio, conectando a saída de som do rádio com a entrada de microfone (ou line in) do servidor.
Como normalmente as SBCs não possuem hardware capaz de receber áudio, então você precisará de um dispositivo externo que tenha essa função.
Por sorte, esses dispositivos costumam ter preço acessível e podemos encontrá-los facilmente com uma simples pesquisa no Google por “placa de som usb”.
Certifique-se somente de escolher um dispositivo compatível com Linux, sobretudo com a versão ARM do sistema.
Já com relação ao rádio, você pode encontrá-lo no Aliexpress com o termo TEF6686. No meu caso, utilizo esse modelo:

Preparando o Raspberry Pi
Como não precisaremos de interface gráfica para interagir com o sistema operacional, utilizaremos a versão Lite do Raspberry Pi OS.
Baixe e instale o Pi Imager (https://www.raspberrypi.com/software/) e marque as opções conforme abaixo, apenas alterando o tipo do seu Raspberry:

Em seguida, clique em NEXT e EDIT SETTINGS:

Neste próximo passo, é importante criar o usuário fmdx com uma senha de sua preferência. Isso facilitará bastante a instalação do Fmdx Webserver.
Além disso, insira as informações de sua rede sem fio. Caso utilize rede por cabo, deixe desmarcado. Preencha também a Time zone e Keyboard layout de acordo com sua localização:

Na aba SERVICES, marque Enable SSH também conforme abaixo:

Em seguida, clique em SAVE e após, clique YES para gravar o cartão SD. Agora é só aguardar o término da gravação.
Assim que o PI Imager concluir, coloque o cartão SD no Raspberry, ligue-o e aguarde alguns minutos. O primeiro processo de BOOT costuma demorar um pouco.
Primeiro acesso com SSH
Para acessar o Raspberry OS, você precisará de um programa cliente SSH. Tanto no Linux como a partir do Windows 10, esse programa vem com o próprio sistema.
Caso ainda utilize Windows 7 e inferiores, você precisará baixar e instalar algum programa que faça esse papel. Recomendo o Putty (https://www.putty.org/)
Antes de executarmos o comando de conexão, você precisará descobrir qual IP seu Raspberry obteve na rede. Para isso, você precisará entrar nas configurações do seu roteador.
Como cada roteador possui sua própria interface web, fica impossível instruí-lo por aqui. Procure por algo como DHCP e veja se aparece uma lista de IPs com algum deles se referindo a fmdx.
Em posse do IP, basta executarmos apenas um único comando responsável pela conexão remota com nosso Raspberry.
O comando é igual em ambos Linux e Windows. Portanto, basta abrir um terminal (ou cmd) e digitar:
sudo ssh fmdx@<número do IP> //normalmente começa com 192.168
No Windows, apenas remova “sudo” do comando:
ssh fmdx@<número do IP>
Caso a seguinte mensagem de confirmação apareça, simplesmente digite yes:

Em seguida, digite a senha que você definiu para o usuário fmdx nas configurações do Pi Imager. Se tudo ocorrer conforme o esperado, você verá algo semelhante a isso:

Tudo pronto! Agora é só instalar a interface de áudio e o Fmdx Webserver.
Testando a Interface de Áudio
Primeiramente precisamos ter certeza de que sua interface de áudio foi devidamente reconhecida pelo sistema.
Assim sendo, logo após plugar o dispositivo na porta USB do seu Raspberry, digite o seguinte comando:
dmesg -T | tail -n 30
Esse comando mostra as 30 últimas linhas do arquivo de log do kernel do sistema operacional. Nele, podemos obter informações sobre o carregamento do “driver” da interface de áudio.
Veja abaixo as últimas linhas do dmesg no meu Raspberry, após conectar minha interface de áudio:

Esse registro mostra todos os passos que o sistema operacional percorreu desde o reconhecimento dispositivo até o carregamento do módulo correto para seu funcionamento.
No entanto, o que mais nos interessa aqui é a última linha. Ela confirma que a interface de áudio está pronta para uso.
Se o seu Raspberry Pi OS apresentar uma saída semelhante a essa, tudo indica que seu dispositivo também está apto para funcionar com o Fmdx Webserver.
Para eliminar qualquer dúvida, rode o comando aplay -l conforme abaixo e veja se um terceiro dispositivo aparece:
aplay -l

O Raspberry Pi 3 já tem dois dispositivos de áudio embutidos: uma saída de fone de ouvido (card 0: Headphones) e outra saída de som HDMI (card 1: vc4hdmi).
Ao plugar a sua interface, um outro dispositivo (normalmente card 2: alguma-coisa) deverá constar na lista. No meu caso, com a minha interface plugada, aparece: card 2: Device [USB PnP Sound Device].
Agora, vamos aumentar um pouco o volume de captura do microfone para evitarmos problemas de áudio.
Nesse sentido, rode o programa alsamixer no seu prompt de comando Linux, tecle F6 e selecione seu novo dispositivo na lista.
Em seguida tecle F4 para selecionar dispositivos de captura. O volume do microfone (Mic) deverá aparecer. Ajuste o volume com as setas (cima/baixo)
Observe, conforme abaixo, como ficou meu alsamixer:

Instalação do Fmdx Webserver
Antes de baixarmos a aplicação, precisamos instalar todos os softwares (dependências) que ele precisa para funcionar corretamente.
Nesse sentido, rode o seguinte comando de instalação: (pode demorar um pouco no RPi3)
sudo apt update && sudo apt install -y git build-essential libssl-dev pkgconf ffmpeg nodejs npm
Opcionalmente, instale algum editor de texto como neovim ou nano: (talvez precise editar algum arquivo de configuração)
sudo apt install nano
Assim que todas as dependência estiverem instaladas, rode os seguintes comandos para baixar o Fmdx Webserver diretamente do GitHub do projeto para sua pasta local do usuário:
cd ~
git clone https://github.com/NoobishSVK/fm-dx-webserver.git
Agora, vamos entrar no diretório do servidor e instalá-lo:
cd fm-dx-webserver
npm install
Em seguida, precisamos conceder permissão para o usuário fmdx acessar o dispositivo de áudio que instalamos anteriormente:
sudo adduser "$(whoami)" audio
newgrp audio
Nesse momento, nosso servidor está praticamente pronto para uso. Portanto, vamos colocá-lo no ar com o comando:
node .
Então acesse no seu navegador o endereço IP de seu Raspberry na porta 8080, por exemplo: 192.168.0.10:8080. Como resultado, você deverá ver uma tela parecida a essa:

De volta ao terminal, pressione CTRL+C para encerrar o servidor.
Por fim, vamos configurá-lo para rodar como um serviço no Linux. Isso é importante para que você possa verificar com maior facilidade o funcionamento da aplicação.
Além disso, com essa configuração, o servidor inicializará automaticamente quando o Raspberry Pi for ligado. Você também poderá parar e reinicializar o Fmdx Webserver sem precisar dar BOOT no sistema.
Primeiramente crie o seguinte arquivo com o comando:
sudo nano /etc/systemd/system/fm-dx-webserver.service
Em seguida cole o seguinte conteúdo dentro do arquivo:
[Unit]
Description=FM-DX Webserver
[Service]
ExecStart=npm run webserver
WorkingDirectory=/home/fmdx/fm-dx-webserver
User=fmdx
Restart=always
[Install]
WantedBy=multi-user.target
Salve com CTRL+o e saia do editor com CTRL+x. Agora rode os seguintes comandos:
sudo chmod 644 /etc/systemd/system/fm-dx-webserver.service
sudo systemctl daemon-reload
sudo systemctl start fm-dx-webserver
sudo systemctl enable fm-dx-webserver
Verifique se o serviço está funcionando corretamente com o seguinte comando:
systemctl status fm-dx-webserver
Como resultado você deverá ver algo parecido com isso: (ignore a mensagem de erro, pois ainda não fizemos todas as configurações)

Pressione q para sair. Pronto! Seu Fmdx Webserver foi instalado com sucesso. Agora vamos as configurações!
Configuração do rádio TEF6686 para comunicação via TCP/IP
Antes de qualquer coisa, é importante destacar que o rádio precisa utilizar o firmware do PE5PVB – https://github.com/PE5PVB/TEF6686_ESP32/releases/.
Verifique se seu rádio é compatível com esse firmware. A maioria deles, principalmente aqueles comprados da China, já vêm com o TEF6686_ESP32 do PE5PVB.
Estando tudo certo com o equipamento, o primeiro passo é fazer com que seu rádio se conecte à rede local.
Assim sendo, você precisa colocar o rádio em uma espécie de ‘modo de configuração de rede’, no qual ele próprio cria uma rede sem fio temporária à qual você se conecta a partir de qualquer dispositivo wireless.
No menu principal, selecione o menu Connectivity:

Em seguida, selecione Configure Wi-Fi:

Como resultado seu rádio deverá informar um nome de rede temporário e um número IP para acesso, mais ou menos parecido com isso:

Para facilitar, sugiro que você se conecte a esta rede com um celular. Em seguida, abra o app de navegação, digite o endereço http da tela e siga os passo a passo para informar o nome e senha da sua rede wireless.
Em algum momento, você também precisará definir uma senha para acesso XDRD. Guarde-a, pois mais adiante a utilizaremos para conceder acesso ao servidor.
Ao final, se tudo ocorrer conforme o esperado, o rádio desligará a rede temporária (ESP_XXX…) e você verá uma tela com a mensagem “Connected”.
De volta ao menu Connect, você deverá ver o IP que seu rádio obteve na sua rede local na linha “Wi-Fi Active IP”, como por exemplo 192.168.0.32. (varia de acordo com sua rede)
Guarde bem o número IP do seu rádio, pois será fundamental para configurar o Fmdx Webserver mais adiante.
Por fim, nesse mesmo menu, garanta que o USB mode fique com o valor XDRGTK conforme abaixo:

Configuração básica do Fmdx Webserver
Logo após a instalação do servidor, um processo de configuração preliminar começa automaticamente ao acessarmos o Fmdx Webserver via navegador.
Esse processo preliminar é composto de um assistente de configuração em cinco etapas, muito simples de serem cumpridas.
1. Basic Settings
A primeira delas (Basic Settings) você viu anteriormente no teste de pós-instalação e para nossa sorte, não precisa de alteração. Portanto basta clicar em NEXT.
2. Tuner Settings
Em contrapartida, a segunda etapa (Tuner Settings) precisa de bastante atenção. Em Tuner Type, deixe como está (TEF668x/TEA685x). O mesmo vale para Tuner Connection – TCP/IP.
Já nos campos XDRD IP ADDRESS e XDRD PASSWORD, você precisa alterar para os valores anotados anteriormente durante a configuração do rádio.
XDRD IP ADDRESS é o IP do seu rádio na rede, já XDRD PASSWORD é a senha XDRD definida anteriormente.
XDRD PORT pode ficar como está, ou seja, 7373.

Finalize clicando em NEXT.
3. Audio Settings
Essa etapa (Audio Settings) também requer atenção extra, pois nela definimos qual será a entrada de áudio do servidor.
Repare que, assim como apareceram três dispositivos na linha de comando (aplay -l), aqui também temos os mesmos três.
Sabemos que não se trata de Headphones, nem vc4hdmi. Portanto selecione seu terceiro dispositivo, no meu caso, é o Device. Esse nome pode mudar de acordo com a interface de áudio.
O restante pode ficar do jeito que veio por padrão.

Uma vez feitas as devidas configurações, clique em NEXT.
4. Webserver info
Na quarta etapa (Webserver info) você pode configurar os seguintes parâmetros:
- Webserver name: nome para o servidor
- Webserver Description: uma breve descrição sobre o seu servidor, equipamentos e antenas utilizadas, etc
- Location: onde seu receptor está
- Broadcast to Map: se você deseja aparecer no mapa de servidores em https://servers.fmdx.org
- Allow Tuning Without Password: se deseja permitir que qualquer pessoa utilize seu rádio


Essa etapa não é vital para o funcionamento do Fmdx Webserver, porém recomendo fortemente que preencha corretamente essas informações.
Por fim, clique em NEXT e prossiga para a última etapa do assistente.
5. Admin panel settings
Finalizando temos a quinta e última etapa (Admin panel settings) onde definimos o mais importante: a senha do administrador da aplicação.
Assim sendo, escolha uma senha forte contendo letras maiúsculas, minúsculas, número e caracteres especiais. Sugiro uma senha com 8 ou mais caracteres.
Preencha o campo ADMIN PASSWORD com sua nova senha. Opcionalmente crie outra senha para TUNE PASSWORD, caso queira que somente pessoas com essa senha acessem seu receptor.
Do contrário, deixe TUNE PASSWORD em branco.

Em seguida clique em SAVE e pronto! Seu Fmdx Webserver já tem o mínimo para funcionar e ainda pode melhorar com configurações mais avançadas.
Testando o Fmdx Webserver
O primeiro passo para checar se o servidor está ativo e conectado ao rádio é abrir o Dashboard na área administrativa do Fmdx Webserver.
No navegador, digite o IP do servidor e acrescente /setup, como por exemplo: 192.168.0.32:8080/setup. Digite a senha de administrador definida anteriormente e clique no botão ao lado para logar.
Automaticamente você será direcionado ao Dashboard. Em seguida role a tela até a seção Console.
Nela, você verá o log do servidor. Procure pela mensagem “Connection to xdrd established successfully” conforme abaixo:

Isso indica que o servidor estabeleceu com sucesso uma conexão com o rádio e está pronto para controlá-lo através da rede.
Por fim, ainda no navegador, acesse a porta 8080 do servidor, como em 192.168.0.32:8080 e veja na prática se tudo está funcionando:

Você deverá ver algo um pouco mais simples, mas bem parecido a essa tela. No meu caso ela está assim por conta de plugins que adicionam funcionalidades.
Pretendo escrever outro artigo falando à respeito de funcionalidades mais avançadas e plugins que estendem as capacidades do Fmdx Webserver!
Por hora, clique no botão de Play para iniciar a reprodução de áudio do rádio. Digite uma nova frequência no campo Frequency ou retroceda/avance no botões à esquerda/direita.
Parabéns, seu servidor está funcional e pronto para receber acessos!
Conclusão
Nesse artigo você aprendeu como sair do zero e montar um servidor Fmdx básico, capaz de se comunicar com um rádio TEF668X e disponibilizar acesso via rede local.
Ainda não vimos como disponibilizar o acesso para a internet, de forma que visitantes ao redor do mundo consigam operar seu rádio.
Existem algumas formas de fazer isso que exigem um pouco de conhecimento, como por exemplo encaminhamento de porta ou túnel reverso.
Com o intuito de evitar que esse artigo fique longo e cansativo, pretendo abordar esse e outros assuntos mais avançados em uma outra oportunidade.
No entanto, os fundadores do projeto disponibilizam um recurso automático que coloca seu servidor online na internet.
Para isso você precisa entrar em contato com eles via Discord e obter informações de como tornar-se um membro “Supporter“.
Você pode obter maiores informações na comunidade do Discord: https://discord.gg/ZAVNdS74mC
Espero ter ajudado!
Até a próxima!