Software Defined Radio (SDR) ou em português, Rádio Definido por Software é o termo usado para rádios em que a maioria das funções associadas à camada física (Physical Layer – PHY) anteriormente implementadas com componentes de hardware é implementada via software fazendo uso de técnicas de Processamento de Sinais.
O que é RTL-SDR ?
Tipicamente o RTL-SDR é composto de um dispositivo USB e uma antena. Originalmente estes dispositivos USB foram criados para captar sinais de TV Digital (Circuito Integrado RTL2832U, daí o termo RTL), no entanto foi descoberto que estes dispositivos poderiam ser usados como receptores genéricos de radiofrequência e consequentemente em aplicações de SDR (Software Defined Radio).
Mão na massa
Para uso do RTL-SDR no Windows, recomendo o uso de um pacote SDR disponibilizado pela Airspy (clique aqui)
Neste post usei o “SDR Software Package” que inclui a ferramenta SDR# rev 1500.
Se desejar, baixe aqui: sdrsharp-x86
Ao descompactar o arquivo sdrsharp-x86.zip, deve-se estar conectado na internet e executar o seguinte arquivo (install-rtlsdr.bat):
Este arquivo irá se conectar ao servidor da OSMOCOM e baixar o driver para o RTL-SDR e também fará o download do Zadig, responsável por instalar o driver do RTL-SDR. * Neste instante, plugue seu dongle do RTL-SDR e não instale nada que o Windows venha a propor de forma automática.
Na pasta criada a partir do sdrsharp-x86.zip, execute o arquivo zadig.exe como administrador:
Dentro do Zadig, selecione no menu Options > List All Devices de forma a deixar a opção selecionada:
Conforme exemplo acima, ele já encontrou 6 dispositivos (vide barra inferior). * Neste caso, o Zadig já encontrou o driver referente ao RTL-SDR, na figura abaixo como “RTL2838UHIDIR”, no entanto, conforme Quick Start Guide usado de referência, pode ser o caso que o driver não faça referência direta ao RTL e pode aparecer algo como “Bulk-In, Interface (Interface 0)”.
Garanta que a seta esteja apontando para WinUSB e clique em “Replace Driver”
Em seguida podemos verificar (na pasta criada a partir do sdrsharp-x86.zip) os seguintes aplicativos já mencionados:
Execute o SDRSharp.exe e já defina como “Source” o RTL-SDR (USB):
Em seguida clique em “Play” e o SDR# já irá iniciar a captura:
* Importante! Lembrar de ajustar o ganho RF. Um ganho de “zero” só irá captar sinais muito forte por isso é necessário ajustar o ganho até aparecer o sinal desejado (no exemplo acima nenhum sinal está sendo captado). Para ajustar o ganho, clique em configurações e em seguida ajuste o “RF Gain”:
A partir de agora, seu RTL-SDR está configurado no Windows! Agora é procurar projetos para praticar e começar a fuçar com o RTL-SDR.
Qualquer dúvida, use o espaço de perguntas ou entre em contato.
No último final de semana tive a oportunidade de participar do Startup Weekend MAKER Unifei e o grupo que participei definiu como projeto uma plataforma de interação em ambiente virtual (Google Cardboard).
Google Cardboard e Joystick construído
Essa plataforma de interação foi um Joystick construído com módulo arduino e comunicação Bluetooth.
O objetivo deste artigo é mostrar a integração do Intel XDK com comunicação Bluetooth sendo útil para aqueles que querem implantar essa forma de comunicação em suas aplicações mobile criadas através do Intel XDK.
Descrita como “This plugin enables serial communication over Bluetooth. It was written for communicating between Android or iOS and an Arduino.”
Essa mesma API foi criada para uso do arduino com dispositivos mobile. No nosso caso o arduino utilizava um shield do módulo Bluetooth HC-05.
Módulo Bluetooth RS232 HC-05
Inserindo API no Intel XDK
Estou usando o Intel XDK versão 3522, neste caso, com o projeto já aberto:
Clique em “Projects”
Vá até o panel “Cordova Hybrid Mobile APP Settings”
Clique em “Plugin Management”
Clique em “Add Plugins to this Project”
Clique em “Third-Party Plugins”
Nesta parte você pode escolher colocar o link direto do repositório GIT do projeto (link acima) e opção “Git Repo” ou então “Import Local plugin” caso tenha feito download do plugin via Github do projeto. (Para usar a opção “Git Repo” é necessário ter o GIT instalado no computador)
Em seguida clique em “Add Plugin”
Bluetooth Plugin carregado no Intel XDK
Recebendo dados Bluetooth
Voltando para a aba “Develop” do Intel XDK é necessário editar o arquivo “www/js/app.js”, sugiro então modificá-lo para o exemplo “SimpleSerial” disponível no github do projeto, confome segue:
/*
SimpleSerial index.js
Created 7 May 2013
Modified 9 May 2013
by Tom Igoe
*/
var app = {
macAddress: "AA:BB:CC:DD:EE:FF", // get your mac address from bluetoothSerial.list
chars: "",
/*
Application constructor
*/
initialize: function() {
this.bindEvents();
console.log("Starting SimpleSerial app");
},
/*
bind any events that are required on startup to listeners:
*/
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
connectButton.addEventListener('touchend', app.manageConnection, false);
},
/*
this runs when the device is ready for user interaction:
*/
onDeviceReady: function() {
// check to see if Bluetooth is turned on.
// this function is called only
//if isEnabled(), below, returns success:
var listPorts = function() {
// list the available BT ports:
bluetoothSerial.list(
function(results) {
app.display(JSON.stringify(results));
},
function(error) {
app.display(JSON.stringify(error));
}
);
}
// if isEnabled returns failure, this function is called:
var notEnabled = function() {
app.display("Bluetooth is not enabled.")
}
// check if Bluetooth is on:
bluetoothSerial.isEnabled(
listPorts,
notEnabled
);
},
/*
Connects if not connected, and disconnects if connected:
*/
manageConnection: function() {
// connect() will get called only if isConnected() (below)
// returns failure. In other words, if not connected, then connect:
var connect = function () {
// if not connected, do this:
// clear the screen and display an attempt to connect
app.clear();
app.display("Attempting to connect. " +
"Make sure the serial port is open on the target device.");
// attempt to connect:
bluetoothSerial.connect(
app.macAddress, // device to connect to
app.openPort, // start listening if you succeed
app.showError // show the error if you fail
);
};
// disconnect() will get called only if isConnected() (below)
// returns success In other words, if connected, then disconnect:
var disconnect = function () {
app.display("attempting to disconnect");
// if connected, do this:
bluetoothSerial.disconnect(
app.closePort, // stop listening to the port
app.showError // show the error if you fail
);
};
// here's the real action of the manageConnection function:
bluetoothSerial.isConnected(disconnect, connect);
},
/*
subscribes to a Bluetooth serial listener for newline
and changes the button:
*/
openPort: function() {
// if you get a good Bluetooth serial connection:
app.display("Connected to: " + app.macAddress);
// change the button's name:
connectButton.innerHTML = "Disconnect";
// set up a listener to listen for newlines
// and display any new data that's come in since
// the last newline:
bluetoothSerial.subscribe('\n', function (data) {
app.clear();
app.display(data);
});
},
/*
unsubscribes from any Bluetooth serial listener and changes the button:
*/
closePort: function() {
// if you get a good Bluetooth serial connection:
app.display("Disconnected from: " + app.macAddress);
// change the button's name:
connectButton.innerHTML = "Connect";
// unsubscribe from listening:
bluetoothSerial.unsubscribe(
function (data) {
app.display(data);
},
app.showError
);
},
/*
appends @error to the message div:
*/
showError: function(error) {
app.display(error);
},
/*
appends @message to the message div:
*/
display: function(message) {
var display = document.getElementById("message"), // the message div
lineBreak = document.createElement("br"), // a line break
label = document.createTextNode(message); // create the label
display.appendChild(lineBreak); // add a line break
display.appendChild(label); // add the message node
},
/*
clears the message div:
*/
clear: function() {
var display = document.getElementById("message");
display.innerHTML = "";
}
}; // end of app
Modificações Necessárias
Para o plugin funcionar com seu dispositivo Bluetooth é necessário alterar a variável macAddress com o endereço MAC do seu dispositivo.
As mensagens Bluetooth são recebidas e tratadas na função display, caso seja necessário tomar decisões, basta avaliar os valores recebidos na variável “message”.
Mais informações podem ser obtidas na página da API ou qualquer dúvida, pode entrar em contato.