____________________________________________________________________________ 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