Redes P2P MiWi

Propaganda
____________________________________________________________________________
Application Note FBEE
Aplicação de redes P2P
REV03
____________________________________________________________________________________________________________________
‐ 1 ‐ Rev03
____________________________________________________________________________
1. INTRODUÇÃO
Aplicações com redes sem fio vêm se tornando bastante comuns. De aplicações
industriais a projetos específicos, criou-se enorme expectativa quanto à capacidade dos
dispositivos se comunicarem wireless, ou seja, sem fio. O maior desafio é conseguir atender a
estas expectativas e apresentar um baixo custo para o desenvolvimento e implementação dos
projetos. Com o FBee Kit e os protocolos de comunicação sem fio disponíveis pela Microchip, é
possível alcançar estes objetivos de uma forma simples e rápida.
Os protocolos MiWi™ Wireless Networking Protocol e MiWi™ P2P Wireless Protocol são
uma variação do padrão IEEE 802.15.4™ e utilizam o transceptor MRF24J40 da Microchip,
para qualquer microcontrolador da Microchip de 8, 16 ou 32 bits com SPI (Serial Peripheral
Interface). Os protocolos são gratuitos e foram desenvolvidos para promover comunicação com
baixa taxa de dados, pequena distância, e redes de baixo custo. Baseada no IEEE 802.15.4™
para redes sem fio pessoal (WPANs), a pilha MiWi fornece um modo alternativo de
comunicação sem fio de fácil uso. É possível realizar aplicações de redes de pequeno porte
com transferência de informações entre os dispositivos da rede com alguns hops (pulos).
Este documento faz a apresentação de exemplos utilizando o FBee Kit, e ensina como
utilizar a pilha MiWi™ P2P Wireless Protocol da Microchip para determinadas aplicações de
comunicação de rede. Para fazer um estudo e entender o funcionamento mais detalhado da
pilha Miwi P2P, é necessário que o leitor estude o documento “AN1204 Microchip MiWi P2P
Wireless Protocol” que pode ser encontrado no site da Microchip (www.microchip.com). É
necessário também que o leitor tenha um entendimento da linguagem C, e uma noção de como
trabalhar com microcontroladores.
2. FBEE KIT
O FBee Kit permite que sejam desenvolvidas aplicações para soluções sem fio (wireless).
O kit contém duas placas de aplicação e dois módulos FBee com o transceptor MRF24J40 de
2.4GHz que podem ser usados para formar uma simples rede wireless com dois nós. É
possível ter uma rede com maior número de dispositivos adquirindo outros FBee kit ou outros
módulos FBee.
Figura 1: FBee Kit
____________________________________________________________________________________________________________________
‐ 2 ‐ Rev03
____________________________________________________________________________
3. Protocolo MiWi P2P™
O protocolo MiWi™ P2P Wireless Protocol permite que sejam feitas aplicações sem fio
para redes PAN (Personal Area Network) com topologias estrela (star) ou ponto a ponto (Peerto-peer). Além das capacidades básicas de comunicação, o protocolo MiWi™ P2P dispõem
funcionalidades como Active Scan, Energy Scan, Frequency Agility e Sleeping Device. A
versão em que esta aplicação se baseia é a primeira pilha que suporta as interfaces MiMAC e
MiApp da Microchip.
A interface MiMAC permite a troca de transceptores RF da Microchip com simples
definições na camada de aplicação. Para esta versão, tanto o transceptor MRF24J40 de
2.4GHz padrão IEE 802.15.4 da Microchip, e o MRF49XA que trabalha abaixo de faixas de
GHz, também fornecido pela Microchip, são aceitos pela pilha. Nesta aplicação, trabalharemos
com o MRF24J40, que é o transceptor do módulo FBee.
A interface MiApp permite a troca de protocolos de comunicação wireless da Microchip com
simples definições na camada de aplicação. Para esta versão, o protocolo MiWi™ P2P
Wireless Protocol é aceito. Para fazer um estudo e entender o funcionamento mais detalhado
da pilha Miwi P2P, é necessário que o leitor estude o documento “AN1204 Microchip MiWi P2P
Wireless Protocol” que pode ser encontrado no site da Microchip (www.microchip.com).
Para usar o MiWi Wireless Networking Protocol Stack P2P é necessário que o usuário
instale uma versão do MPLAB da Microchip (www.microchip.com), o compilador C18
(www.microchip.com), o arquivo do protocolo MiWi e os arquivos de definições no computador.
3.1.
Overview Protocolo MiWi P2P™
O protocolo MiWi P2P modifica a camada MAC (Media Access Control) da especificação
IEEE 802.15.4 somando comandos que simplificam o processo de Handshaking. Simplifica,
também, a desconexão do link de comunicação e processo de channel hope (mudança do
canal de operação) fornecendo alguns comandos MAC suplementares. Entretanto, decisões
específicas de aplicações, como quando executar uma detecção de energia nos canais, ou
quando mudar o canal de operação, não está definido no protocolo. Esses procedimentos são
de responsabilidade do desenvolvedor.
3.2.
Especificação IEEE 802.15.4 e Protocolo MiWi P2P™
O protocolo MiWi P2P utiliza uma pequena parte das definições PHY e MAC do padrão
IEEE 802.15. A especificação define três camadas PHY, operando nas faixas de 868MHz,
915MHz e 2.4GHz. O transceptor MRF24J40 opera na faixa de 2.4GHz. O espectro contém 16
canais disponíveis e um pacote de dados com tamanho máximo de 127 bytes, incluindo o valor
de 2 bytes de CRC. A taxa de comunicação máxima é, teoricamente, 250kbps.
Tabela 1: Canais disponíveis para o IEEE 802.15.4
____________________________________________________________________________________________________________________
‐ 3 ‐ Rev03
____________________________________________________________________________
3.3.
Tipos de Dispositivos
O protocolo MiWi P2P classifica os dispositivos baseado nas suas definições no IEEE e
seu envolvimento nas conexões da comunicação (tabelas 2 e 3). O protocolo MiWi P2P suporta
todos estes tipos de dispositivos:
Tabela 2: Dispositivos para o IEEE 802.15.4 Baseado na Funcionalidade
Tabela 3: Dispositivos para o IEEE 802.15.4 Baseado no Envolvimento na rede
3.4.
Topologias de Rede para o Protocolo MiWi P2P™
O protocolo MiWi P2P suporta duas topologias de rede: Peer-to-Peer e Estrela.
3.4.1. Rede Estrela (Star Network)
A configuração de rede Estrela (figura 2) consiste em um coordenador PAN e um ou
mais dispositivos de rede. Nesta configuração, todos os dispositivos se comunicam apenas
com o coordenador PAN. Se um End Device precisa transferir informações para outro End
Device, ele envia sua informação para o coordenador PAN. Em seguida, o coordenador PAN
reenvia esta mensagem para o End Device de destino, o qual recebe a informação.
Figura 2: Configuração de Rede Estrela
____________________________________________________________________________________________________________________
‐ 4 ‐ Rev03
____________________________________________________________________________
3.4.2. Rede Peer-to-Peer (P2P)
A configuração peer-to-peer é a forma de comunicação mais simples, com apenas um
dispositivo conversando diretamente com outro dispositivo. Nesta configuração, não há
distinção de parent (pai) ou child (criança), ou roteamento para outros nós da rede.
Figura 3: Configuração de P2P
4. Exemplo de Aplicação P2P
Para esta aplicação, serão necessários dois dispositivos de rede wireless (nós). Como o
FBee Kit já está configurado para esta aplicação, não será necessário qualquer alteração no
hardware(esta aplicação é gravada em todo FBEE KIT). Neste tópico, será visto um exemplo
de aplicação utilizando o protocolo MiWi™ P2P Wireless Protocol.
É necessário instalar a pilha MiWi™ P2P em seu computador. O arquivo executável
chama-se MiWi P2P-v2.1.1 e pode ser baixado gratuitamente no site da Microchip
(www.microchip.com). Após executar o arquivo, será criado todo o diretório necessário para a
pilha, que estará dentro da pasta Microchip Solutions\P2P. Será preciso, também, que o
compilador C18 seja da versão 3.31 ou outra que suporte o extended mode. O arquivo
executável para este compilador também se encontra no cd de documentação do FBee Kit.
4.1.
Aplicação de Rede Peer-to-Peer (P2P)
A configuração peer-to-peer é a forma de comunicação mais simples, com apenas um
dispositivo conversando diretamente com outro dispositivo. Para esta aplicação, utilizaremos o
código Simple Example que foca na simplicidade da pilha MiWi™ P2P. Com menos de 30
linhas de código em linguagem C para rodar a camada de aplicação, é possível criar uma
conexão wireless estável entre dois dispositivos.
Abra o firmware Simple Example que se encontra no diretório criado na instalação e que se
encontra na pasta Microchip Solutions\P2P\P2P Node (1 ou 2).
____________________________________________________________________________________________________________________
‐ 5 ‐ Rev03
____________________________________________________________________________
Figura 4: Programa Simple Example Node 1
A aplicação consiste em apertar a chave SW1 em um dos dispositivos e transmitir uma
mensagem Broadcast (para todos os dispositivos da rede), e apertar a chave SW2 e enviar
uma mensagem Unicast (para um dispositivo apenas). O monitoramento das informações
poderá ser acompanhado por qualquer um dos nós, utilizando a interface serial, que deve ser
configurado como a figura abaixo:
Figura 5: Configuração da porta serial
Abra o arquivo SimpleExampleNodeX. A primeira alteração necessária é configurar o
programa para trabalhar com o PIC18F4620. No workspace do programa se encontra a pasta
Linker Script contendo o arquivo linker para o PIC18F87J11. Remova este arquivo e adicione o
arquivo 18f4620_e.lkr assim como a figura abaixo:
____________________________________________________________________________________________________________________
‐ 6 ‐ Rev03
____________________________________________________________________________
Figura 6: Adicionando o arquivo linker para o PIC18F4620
Além disso, será necessário selecionar o microcontrolador PIC 18F4620. Na janela
Configure>Select Device selecione o PIC para a aplicação.
Figura 7: Selecionando o PIC18F4620
Outra configuração necessária é a definição do hardware. Como a placa de aplicação
FBee Kit é compatível com o módulo PICDEMZ da Microchip, faremos a referência de
hardware como PICDEMZ. No arquivo HardwareProfile.h, faça a definição do PICDEMZ e não
mais o EXPLORER16, como mostra a figura abaixo:
____________________________________________________________________________________________________________________
‐ 7 ‐ Rev03
____________________________________________________________________________
Figura 8: Definição do Hardware para o FBEE KIT
Seguindo com o programa, temos todas as configurações iniciais feitas, declaração de
variáveis e constantes, inclusão de arquivos, assim como qualquer outro programa.
Na função void main (void) temos a iniciação do sistema e do protocolo e em seguida
um loop infinito (while(1){...}). Esta parte do programa é a que nos interessa. É onde faremos o
processamento das informações recebidas e onde faremos a transferência de mensagens.
Primeiramente temos o processamento das informações recebidas. É feito um o teste
if( MiApp_MessageAvailable( ) ) para saber se houve alguma nova mensagem disponível.
Para a recepção, faremos:
if( MiApp_MessageAvailable() )
{
/*******************************************************************/
// Se um pacote foi recebido, o seguinte código mostra
// algumas informações disponíveis no rxFrame.
/*******************************************************************/
ConsolePutROMString((ROM char *)"Pacote Recebido");
#ifdef ENABLE_SECURITY
// Se houver código de segurança no pacote, imprime...
if( rxMessage.flags.bits.secEn )
{
ConsolePutROMString((ROM char *)"Com segurança ");
}
#endif
#ifndef TARGET_SMALL
if( rxMessage.flags.bits.broadcast )
{
// Se for uma mensagem broadcast, imprime...
ConsolePutROMString((ROM char *)"Broadcast com RSSI ");
}
else
{
// Se for uma mensagem unicast, imprime...
ConsolePutROMString((ROM char *)"Unicast com RSSI ");
}
// Imprime o nível do sinal recebido...
PrintChar(rxMessage.PacketRSSI);
if( rxMessage.flags.bits.srcPrsnt )
{
// Imprime o Endereço do dispositivo que enviou a informação...
ConsolePutROMString((ROM char *)" de ");
if( rxMessage.flags.bits.altSrcAddr )
{
PrintChar(rxMessage.SourceAddress[1]);
PrintChar(rxMessage.SourceAddress[0]);
____________________________________________________________________________________________________________________
‐ 8 ‐ Rev03
____________________________________________________________________________
}
else
{
for(i = 0; i < MY_ADDRESS_LENGTH; i++)
{
PrintChar(rxMessage.SourceAddress[MY_ADDRESS_LENGTH-1-i]);
}
}
}
#endif
ConsolePutROMString((ROM char *)": ");
// Imprime a mensagemn...
for(i = 0; i < rxMessage.PayloadSize; i++)
{
ConsolePut(rxMessage.Payload[i]);
}
// Inverte o estado do Led 2, para informar que uma mensagem foi recebida.
LED_2 ^= 1;
/*******************************************************************/
// Função MiApp_DiscardMessage é usada para descartar
// o pacote recebido.
// Após esta função ser chamada, a pilha pode começar
// o processo de recepção do próximo pacote de dados.
/*******************************************************************/
MiApp_DiscardMessage();
}
Para a transmissão:
else
{
/*******************************************************************/
// Se não houver mais pacotes recebidos, agora podemos checar se
// queremos transmitir alguma informação.
// A função ButtonPressed retorna qual das chaves do FBEE Kit que foi
// pressionada.
/*******************************************************************/
BYTE PressedButton = ButtonPressed();
switch( PressedButton )
{
case 1:
/*******************************************************************/
// Chave SW1 pressionada. Será enviada o bitmap da palavra "HELLO".
// Primeiramente a função MiApp_FlushTx é chamada para resetar o
// buffer de Transmissão. Então irá preencher o buffer byte por byte
// chamando a função MiApp_WriteData.
/*******************************************************************/
MiApp_FlushTx();
if( (TxSynCount % 6 ) == 0 )
{
//Transmitir uma linha em branco após completar o bitmap
MiApp_WriteData(0x0D);
MiApp_WriteData(0x0A);
}
else
{
for(i = 0; i < 20; i++)
{
MiApp_WriteData(Hello[(TxSynCount%6)-1][i]);
}
}
TxSynCount++;
/*******************************************************************/
// Função MiApp_BroadcastPacket é usada para mensagens broadcast
____________________________________________________________________________________________________________________
‐ 9 ‐ Rev03
____________________________________________________________________________
// O único parâmetro necessário é utilizado para enviar pacotes com
// código de segurança ou não.
/*******************************************************************/
MiApp_BroadcastPacket(FALSE);
break;
case 2:
/*******************************************************************/
// Chave SW2 pressionada. Será enviado o bitmap da palavra "P2P".
// Primeiramente a função MiApp_FlushTx é chamada para resetar o
// buffer de Transmissão. Então irá preencher o buffer byte por byte
// chamando a função MiApp_WriteData.
/*******************************************************************/
MiApp_FlushTx();
if( (TxSynCount2 % 6 ) == 0 )
{
MiApp_WriteData(0x0D);
MiApp_WriteData(0x0A);
}
else
{
for(i = 0; i < 13; i++)
{
MiApp_WriteData(P2P[(TxSynCount2%6)-1][i]);
}
}
TxSynCount2++;
/*******************************************************************/
// Função MiApp_UnicastAddress é uma das funções para enviar uma
// mensagem unicast.
// O primeiro parâmetro é um vetor que contém o endereço do
//
dispositivo peer o qual queremos enviar a mensagem.
// O segundo parâmetro indica se o endereço de destino acima
//
é permanente ou alternativo. Este parâmetro é usado
//
somente em um protocolo de rede.
//
//
O terceiro indica se necessitamos colocar código de segurança
no pacote. Se for aplicável a segurança, o security level
//
//
e o security key são definidos no ConfigApp.h.
level and security key are defined in ConfigApp.h
// Outra forma de enviar um pacote unicast é chamando a função
// MiApp_UnicastConnection. Ao invés de fornecer o endereço do
// outro dispositivo peer, é fornecido o índice da Conexão de
// Entrada para o dispositivo peer.]
/*******************************************************************/
MiApp_UnicastAddress(EndDevice1, TRUE, TRUE);
break;
default:
break;
}
}
Como utilizamos a função MiApp_UnicastAddress(EndDevice1, TRUE, TRUE); para enviar um
pacote unicast, necessitamos declarar o vetor que contém o endereço do outro dispositivo
peer, e pode ser declarado no começo do programa:
BYTE EndDevice1[8]= {0x55,0x01,0x02,0x03,0x04,0x05,0x06,0x01};
____________________________________________________________________________________________________________________
‐ 10 ‐ Rev03
____________________________________________________________________________
Este exemplo contém o endereço que deve ser compatível com o outro dispositivo
peer, ou seja, para o outro nó da rede, deve ser configurado o endereço 55-01-02-03-04-05-0601. Este endereço é configurado no arquivo ConfigApp.h:
Figura 9: Configuração do Endereço MAC
O outro dispositivo peer deve conter o mesmo procedimento para transmissão e
recepção dos dados. Lembrando que a função de transmissão de dados unicast do segundo
peer deve conter o endereço do primeiro dispositivo, e vice versa. Os endereços MAC de cada
um dos dispositivos peer devem ser configurados de acordo com o exemplo seguido.
Exemplo:
Dispositivo peer 1
Dispositivo peer 2
Transmissão Unicast:
MiApp_UnicastAddress(EndDevice2, TRUE, TRUE);
Transmissão Unicast:
MiApp_UnicastAddress(EndDevice1, TRUE, TRUE);
Declarar:
Declarar:
BYTE EndDevice2[8]= {0x55,0x01,0x02,0x03,0x04,0x05,0x06,0x02};
BYTE EndDevice1[8]= {0x55,0x01,0x02,0x03,0x04,0x05,0x06,0x01};
Configurar Endereço MAC:
0x55-0x01-0x02-0x03-0x04-0x05-0x06-0x01
Configurar Endereço MAC:
0x55-0x01-0x02-0x03-0x04-0x05-0x06-0x02
Tabela 4: Configuração dos Dispositivos peer
Após configurar os dois dispositivos de acordo com o exemplo acima, a aplicação P2P
está pronta. Os arquivos do projeto se encontram no CD de documentação que acompanha o
FBEE Kit.
____________________________________________________________________________________________________________________
‐ 11 ‐ Rev03
____________________________________________________________________________
Figura 10: Aplicação P2P
____________________________________________________________________________________________________________________
‐ 12 ‐ Rev03
____________________________________________________________________________
SUPORTE DE ATENDIMENTO:
Fractum Indústria e Comércio de Equipamentos Eletrônicos LTDA
Av. Antônio Américo Junqueira 335 Pôr do Sol
Santa Rita do Sapucaí-MG
CEP 37540-000
TEL: 55 35 3471 0019
Site: www.fractum.com.br
Email: [email protected]
____________________________________________________________________________________________________________________
‐ 13 ‐ Rev03
Download