setup “quick start” de comunicação utilizando xbees … · microcontrolador. e através da...

9

Click here to load reader

Upload: ngodang

Post on 24-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

Setup “quick start” de comunicação utilizando XBEEs 802.15.4 sobre as plataformas Arduino UNO e .NET Gadgeteer.

1. IntroduçãoO intuito deste documento é facilitar a novos usuários de equipamentos do SEMBEI a

usar módulos XBee em conjunto com Arduinos e .NET Gadgeteers presentes no laboratório.

2. Referencias úteisLinks úteis na familiarização com as plataformas. Ao primeiro contato com as plataformas recomenda-se ao menos uma leitura rápida de todos os itens.

Assunto Nome Link Comentário

XBee Site da Digi (fabricante)

http://digi.com Não contém tanta informação de primeira, mas útil procurando informações específicas sobre a plataforma. (O site é meio difícil de usar, mas há informação. É só procurar)

Datasheet XBee ftp://ftp1.digi.com/support/documentation/90000976_C.pdf

Datasheet dos XBees que temos. Documento detalhado

Comandos AT http://dlnmh9ip6v2uc.cloudfront.net/learn/materials/29/22AT%20Commands.pdf

Lista não extensiva de comandos AT do XBee.

Arduino Site oficial http://arduino.cc Drivers, instaladores, “getting started”. Basicamente alguém pode precisar.

Todos os outros http://www.google.com Dá pra achar praticamente qualquer coisa com Arduino na internet. Use esse fato a seu favor.

Gadgeteer Página oficial http://www.netmf.com/gadgeteer/

Pagina oficial do Gadgeteer. É um bom “do que essa plataforma é capaz?”, mas não tem tanta informação técnica

FEZ Spider https://www.ghielectronics.com/catalog/product/297

Esse é o kit que temos no laboratório

Getting Started https://www.ghielectronics.com/support/.net-gadgeteer

Instruções sobre configuração (no link do item 1) e instruções para o seu primeiro projeto na plataforma

Ex Forum TinyClr.

Atual Forum GHI

https://www.ghielectronics.com/community/forum

Melhor fórum para pesquisa sobre projetos .NET Gadgeteer. A comunidade é bastante ativa e eles respondem perguntas rapidamente

Page 2: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

3. Introdução ao hardware básico necessário e disponível1.1 XBee’sTemos três tipos de módulo em laboratório:

i. 802.15.4 2.4GHZ

ii. 802.15.5 900MHz

iii. 802.11

Apesar de serem todos compatíveis fisicamente (possuem o mesmo formato/socket), funcionam de maneira diferente e têm configurações diferentes. Os dois primeiros se baseam no protocolo de comunicação 802.15.4, próprio para comunicação em redes PAN de baixa taxa de transferencia de dados. O último, no WiFi. O foco deste documento será nos módulos 802.15.4

1.2 Placa de configuração XbeeÉ uma placa através da qual é possível estabelecer uma comunicação serial entre o computador e o Xbee através do cabo USB. Assim é possível configurar o Xbee, atualizar seu firmware ou fazer testes.

Também é possível usar a placa (sempre com um Xbee plugado) para receber e enviar dados (funcionando como um nó sorvedouro1).

A função da placa de configuração podem ser substituída (com algumas restrições, como botão de reset, etc) com o Arduíno configurado com um programa “bare minimum”2 e Shield Xbee com jumpers na posição “PC”. Até o final de maio/2013 havia um par Arduino-shield no laboratório pré configurado para esta funcionalidade. Está marcado com um papel escrito “The one”.

1.3 ArduínoÉ uma placa através da qual é possível se comunicar, programar e configurar um microcontrolador. E através da sua IDE, é possível utilizar diversas bibliotecas prontas e uma infinidade de exemplos online para vários projetos. Seu site é bastante completo e altamente recomendado para mais informações. Os Arduinos do SEMBEI são do tipo UNO.

1.4 .NET Gadgeteer.NET Gadgeteer é uma plataforma de desenvolvimento rápido incentivada pela Microsoft onde a programação é feita inteiramente em C# através da .NET Micro Framework e a instalação física é feita com módulos com conectores padronizados que dispensam soldagem. No laboratório temos placas FEZ Spider disponíveis.

4. Por onde começarComo o foco deste documento é no setup dos XBee’s, considera-se que já estão instalados os drivers do Arduíno ou Gadgeteer no computador (se não sabe fazer isto, leia as referencias da seção 2).

1 Sorvedouro é um nó da rede que é responsável por capturar os dados dos nós sensores e enviá-lo a uma estação de processamento (tipicamente um PC)2 É um dos exemplos da IDE do Arduíno

Page 3: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

4.1

A primeira coisa a fazer no que tange os XBee’s é instalar o XCTU, o software da Digi (a fabricante) para mexer nas configurações dos módulos de rádio.

Você faz isto seguindo este link:

http://www.digi.com/support/productdetail?pid=3352

E indo em Diagnostics, Utilities and MIBs > XCTU. Baixe e instale. Simples.

4.2

Conecte agora um XBee (qualquer um, a fim de familiarização) à placa de configuração (a placa verde) e um cabo à USB do computador.

4.3

Rode agora o XCTU. (importante: o XCTU não reconhece os dispositivos que você conecta enquanto ele está aberto. Portanto, espere o Windows reconhecer a placa que você espetou antes de abrir o programa.)

A partir deste programa você escolhe a porta serial que você deseja “escutar”: é onde a placa de configuração + Xbee estarão ligados. O programa te ajudará a enviar e receber informações do Xbee.

4.4

O primeiro teste que você deve fazer: Clicar em “Test / Query”

Depois de uns instantes aparecerá na tela a versão do Xbee que você plugou na placa, dizendo que está tudo bem, testes iniciais mostraram que o seu Xbee consegue se comunicar com o computador.3

Se isto não funcionar verifique que todos os cabos estão bem presos e que o Windows reconheceu a placa do Xbee, ou o arduino (ele deve instalar algo como “USB Serial” no Gerenciador de Dispositivos (provavelmente na seção “outros dispositivos”), e deve fazer isto automaticamente). Se você liga e desliga a placa do computador e o Windows não reage de maneira alguma, suspeite de drivers. Tente usar outros XBee’s também.

5. Configuração XBEEs1.5 ComandosA maneira mais direta de comunicação com o Xbee é a através do terminal. Ali você digita comandos que são recebidos pelo Xbee. Você digita um comando, ele executa alguma coisa e responde.

3 Se você estiver usando um Arduíno para esta tarefa, lembre-se de carregar o programa “certo” em sua memória (um programa “bare minimum”, só com um setup(){} e um loop(){}) e que os jumpers estão nas posições corretas (em modo PC).

Page 4: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

Para entrar no modo de comandos, basta digitar “+++” rapidamente no terminal. O Xbee deve responder com “OK”. Depois disto, basta digitar os comandos.

Por exemplo, a sequencia:

+++

ATID

Retorna o ID da PAN que está configurado no Xbee.

1.6 Aba de configuraçãoApesar de se conseguir realizar qualquer tarefa através dos comandos, isto acaba sendo pouco eficiente e de difícil aprendizado. Para isso, o XCTU oferece uma interface mais amigável para a configuração do rádio, na aba “Modem Configuration”.

Após a conexão do Xbee ao computador (seção 4), clique nesta aba e em seguida em “Read”. Ele lerá as configurações salvas na memória do módulo e as exibirá em tela. Você poderá alterá-las e salvá-las de volta (com o botão Write).

Para dois rádios se comunicarem, devem ter o mesmo PAN ID, Canal, devem ter endereços configurados corretamente (quem envia para quem), etc. Estas configurações devem ser realizadas manualmente através do XCTU.

A facilidade de configuração pode, no entanto, levar a alguns problemas. Tenha cuidado com configurações que você não sabe exatamente o que significa, elas podem fazer com que o seu módulo de comunicação fique indisponível se forem configuradas da maneira inadequada. Pesquise antes de mexer nas configurações.

Por exemplo, um dos erros já cometidos foi o de alterar a Baud Rate e quantidade de stop bits da interface serial. Isto fez com que um dos módulos não pudesse mais ser acessado pelo PC de forma alguma (nem “Test/Query”), como se estivesse completamente não operante. Foi necessário fazer um reset em sua memória utilizando os botões da placa de configuração.

Incentiva-se, no entanto, a mudar configurações de rede (endereços, quantidade de retentativas, etc) e níveis de energia e avaliar seus impactos no desempenho da rede. Tais configurações não geraram problemas nos testes já realizados no laboratório.

1.7 Para testarPara testar a configuração dos módulos (ver se os endereços foram configurados adequadamente, etc), a ferramenta Range Test do XCTU pode ser útil, usando os dois rádios ligados ao computador através de placas diferentes (com o material disponível no laboratório, uma das placas evidentemente será um Arduino+Shield).

6. Orientação Arduino + XBeesSe os jumpers do shield XBee estiverem na posição XBee, o rádio “intercepta” as mensagens seriais que o Arduino manda. Isto é, basta abrir uma simples conexão Serial e usar funções Serial.write() e Serial.read() para realizar a comunicação (como se você estivesse enviando/recebendo ao computador).

Page 5: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

7. Orientação Gadgeteer + XBeesPara a comunicação do Gadgeteer com o XBee, as bibliotecas padrão do .NET Framework 4.1 não são de grande valia. Não consideramos bibliotecas pré-existentes na internet, também. Até maio/2013 não estavam funcionais o suficiente para nosso uso.

Resolve-se o problema iniciando uma comunicação serial “na mão” para se comunicar com o XBee.

A idéia é a mesma do Arduino: enviar caracteres ao XBee por uma conexão serial, e se ele estiver corretamente configurado, deve repassar o caracter sem fio ao seu “destination address”, que deve capturar e enviar por sua serial a outro ponto.

Exemplo de código que envia e captura informações com o Gadgeteer + Xbee:

Bibliotecas Utilizadas, tanto para enviar quanto para receber informações:

using System;

using System.Text;

using System.IO.Ports; // Biblioteca que permite abrir e fechar as portas seriais

using System.Collections;

using System.Threading;

using Microsoft.SPOT;

using Microsoft.SPOT.Presentation;

using Microsoft.SPOT.Presentation.Controls;

using Microsoft.SPOT.Presentation.Media;

using Microsoft.SPOT.Touch;

using Gadgeteer.Networking;

using GT = Gadgeteer;

using GTM = Gadgeteer.Modules;

using Gadgeteer.Modules.GHIElectronics;

using Gadgeteer.Modules.Seeed;

Page 6: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

Codigo para enviar informações:

namespace Enviar

{

public partial class Program

{

SerialPort xbee;

void ProgramStarted()

{

Debug.Print("Program Started");

/* criando um objeto com os parâmetros da porta que eu vou desejar abrir */

xbee = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);

accelerometer.Calibrate();

accelerometer.MeasurementComplete += new Accelerometer.MeasurementCompleteEventHandler(accelerometer_MeasurementComplete)

accelerometer.ContinuousMeasurementInterval = new TimeSpan(0, 0, 0, 0, 1);

accelerometer.StartContinuousMeasurements();

}

void accelerometer_MeasurementComplete(Accelerometer sender, Accelerometer.Acceleration acceleration)

{

/* Toda vez que eu faco uma medicao com o acelerometro, eu abro a porta serial */

xbee.Open();

/* Para enviar um dado pela porta serial, este dado tem que ser convertido em um vetor de bytes */

byte[] aceleracaoX = Encoding.UTF8.GetBytes(acceleration.X.ToString());

byte[] aceleracaoY = Encoding.UTF8.GetBytes(acceleration.Y.ToString());

byte[] aceleracaoZ = Encoding.UTF8.GetBytes(acceleration.Z.ToString());

/* xbee.Write envia um vetor de bytes, usa como parametro o vetor de bytes, offset, tamanho do vetor de bytes */

xbee.Write(aceleracaoX, 0, aceleracaoX.Length);

Debug.Print(acceleration.X.ToString() + "\n");

Page 7: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

xbee.Write(aceleracaoY, 0, aceleracaoY.Length);

Debug.Print(acceleration.Y.ToString() + "\n");

xbee.Write(aceleracaoZ, 0, aceleracaoZ.Length);

Debug.Print(acceleration.Z.ToString() + "\n");

xbee.Close(); /* apos enviar a mensagem é importante fechar a porta de comunicacao, para nao causar buffer overflow */

}

}

}

Codigo para receber informações:

namespace Receber

{

public partial class Program

{

SerialPort xbee;

byte[] textByte;

void ProgramStarted()

{

Debug.Print("Program Started");

//criando um objeto com os parametros da porta que eu vou desejar abrir

xbee = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);

//Abrindo a porta de comunicação

xbee.Open();

// Evento que é ativado quando algum pacote chega no XBee

xbee.DataReceived += new SerialDataReceivedEventHandler(xbee_DataReceived);

}

Page 8: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

void xbee_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

int tamanho;

// Antes de ler a mensagem, descobre o tamanho do vetor de bytes que foi enviado

tamanho = xbee.BytesToRead;

//cria um vetor de bytes do mesmo tamanho do vetor recebido

textByte = new byte[tamanho];

// faz a leitura do vetor recebido

xbee.Read(textByte,0,tamanho);

//Traduz a mensagem, ou seja, converte Byte para String novamente

string textChegada = new string(System.Text.Encoding.UTF8.GetChars(textByte));

Debug.Print(textChegada);

}

}

}

8. Apêndice: sobre os módulos 802.11Basicamente funciona do mesmo jeito. Encontramos um programa para computador escrito em C++ que facilitou a comunicação direta utilizando access points, porém não conseguimos utilizar ele para fazer a comunicação com outro Xbee utilizando o Arduíno ou o Gadgeteer.

Achamos dois links de referencia, sendo o primeiro um Getting Started Guide e o outro é referente ao programa em C++ que encontramos para realizar a comunicação com o PC via access point.

http://ftp1.digi.com/support/documentation/90002184_B.pdf

http://www.rogercom.com/XBeeWi-Fi.htm

Ambos possuem uma explicação de como se utiliza e configura o Xbee.

Page 9: Setup “quick start” de comunicação utilizando XBEEs … · microcontrolador. E através da sua ... byte[] aceleracaoX ... //Traduz a mensagem, ou seja, converte Byte para String

9. Quem procurarEm caso de grandes dúvidas, segue o contato de pessoas do SEMBEI que já mexeram com

XBee. Talvez possam ajudar a resolver algum problema, ou dar alguma orientação:

Nome Contato

Rodolfo Rodrigues (Arduino e Gadgeteer) [email protected]

Lucas Batista (Gadgeteer) [email protected]

Renan Cerqueira (Arduino) [email protected]