Arquivo de etiquetas: iot

Instalando e usando o RTL-SDR no Windows

  • O que é SDR ?

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 ?

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)

RTL-SDR no Windows

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):

Install RTL-SDR batch

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:

Zadig as Admin
Dentro do Zadig, selecione no menu Options > List All Devices de forma a deixar a opção selecionada:
Zadig All Devices
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”

Zadig Replace DriverZadig Driver Installed
Em seguida podemos verificar (na pasta criada a partir do sdrsharp-x86.zip) os seguintes aplicativos já mencionados:
SDR Apps
Execute o SDRSharp.exe e já defina como “Source” o RTL-SDR (USB):
SDR# Source
Em seguida clique em “Play” e o SDR# já irá iniciar a captura:
SDR# Capture
* 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”:

SDR# Configure drwxr
drwxr SDR# Running

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.

* Apostila drwxr sobre Radiofrequência e RTL-SDR (apresentada no Roadsec 2016)

* Post elaborado usando o Windows 10 (originalmente publicado no drwxr)

Criando aplicativo Mobile com Intel XDK e comunicação Bluetooth

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
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.

Uso de API para Bluetooth

Para isso, usamos a API disponível em: https://github.com/don/BluetoothSerial

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
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 no Intel XDK
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.