setup “quick start” de comunicação utilizando xbees … · microcontrolador. e através da...
TRANSCRIPT
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
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
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).
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).
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;
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");
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);
}
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.
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]