24 outubro 2014

Tutorial comunicação Arduino usando Xbee 802.15.4 Serie 1

Quem já montou uma rede wireless utilizando módulos Xbee sabe que o processo às vezes não é muito simples. Existem dezenas de parâmetros para serem configurados, além das particularidades de cada tipo de módulo, já que os da Serie 1 e Serie 2 não conversam entre si.

Nesse post eu vou mostrar como configurar dois Módulos Xbee Serie 1 1mW, ligar um deles no computador e outro ao Arduino, e enviar um texto para que seja mostrado em um display LCD 16x2. No final do post, há um vídeo mostrando o circuito em funcionamento.

Modulo Xbee Serie 1 802.15.4

Com esse módulo é muito simples montar uma rede ponto-a-ponto  ou mesmo uma rede com vários módulos se comunicando ao mesmo tempo. A comunicação é feita na frequência de 2.4 Ghz e o alcance do módulo pode chegar a 100 metros em campo aberto. Um modo "sleep" permite uma grande economia de energia quando o módulo não está sendo utilizado, e é ideal para configurações que usem algum tipo de bateria para alimentação do circuito.

Material Utilizado

Nesse tutorial vamos utilizar :
  • 2 módulos Xbee Serie 1 1mW
  • Xbee Explorer USB : Esta placa é ligada ao computador via cabo mini USB e serve tanto para programar os módulos Xbee S1 como também para testar a comunicação entre eles
  • Xbee Shield - Shield que será conectado ao Arduino e receberá os comandos enviados pelo Xbee conectado ao computador
  • Display LCD 16x2 - Ligado ao Arduino, mostra os caracteres recebidos pelo módulo Xbee
  • Fonte de alimentação para o Arduino

Instalação do Xbee Explorer USB

Xbee Explorer USB é a placa conectada ao computador via cabo mini USB, que vamos utilizar para configurar os módulos Xbee. Simplesmente encaixamos o módulo na placa, e ligamos o cabo no computador :
 
Xbee USB Explorer Adapter

No Windows 7 (64 bits) o adaptador foi reconhecido automaticamente, e foram adicionados dois dispositivos. O USB Serial Converter, e o USB Serial Port, que no nosso caso, foi alocado na porta serial COM20:

Xbee Explorer USB - Drivers


Instalação do XCTU

XCTU é o software da Digi utilizado para fazer a programação dos módulos Xbee conectados ao computador. Além da programação, é possível atualizar o firmware dos módulos, enviar comandos de um módulo Xbee para o outro e até mesmo recuperar módulos com problema. Faça o download do XCTU acessando esse link, e depois acessando Diagnostics, Utilities anda MIBS :

XCTU - Download


Na tela seguinte, clique em XCTU Next Gen Installer, Windows x32/x64, se você estiver utilizando Windows.

XCTU - Download Windows
Após o download, execute o instalador. Na tela inicial, clique em NEXT :

XCTU Instalacao - Tela Inicial

Na tela seguinte, leia TODO o contrato de licença e caso concorde com o contrato, clique em I AGREE :

XCTU Instalacao - Licença

Na tela seguinte, há uma advertência de que o usuário deve ter direitos de administrador no Windows 7 e Windows Vista, para evitar problemas na hora de copiar os arquivos. Clique em NEXT :

XCTU Instalacao - Path

Escolha uma pasta para instalação do programa e clique em NEXT :

XCTU Instalacao - Pasta destino

Na tela de confirmação de instalação, revise os itens que serão instalados e também a pasta de instalação do programa, e clique em Install para iniciar a cópia de arquivos :

XCTU Instalacao - Revisao

Aguarde o final do processo e o XCTU estará instalado no seu computador :

XCTU Instalacao

Configurando o módulo Xbee Serie 1 utilizando XCTU

Com o módulo Xbee encaixado no Xbee Explorer USB, entre no XCTU e clique em Discover Devices, conforme destacado na imagem. Esse comando vai fazer com que o XCTU efetue uma varredura no computador procurando por módulos Xbee :

XCTU - Tela inicial


Na próxima tela, selecionamos a porta serial que foi detectada na instalação do Xbee Explorer USB. No caso, a COM20 :

XCTU - Selecionando porta serial

Na próxima tela, mantenha os valores padrão para a serial e clique em Finish para iniciar a varredura :

XCTU - Parametros da porta serial

 Aguarde o módulo Xbee aparecer na lista de dispositivos detectados e clique em Add Selected Devices :

XCTU - Modulo Xbee identificado

Após o dispositivo ser adicionado ao XCTU, ele irá aparecer no lado esquerdo da tela do programa. Clique sobre o dispositivo para que os parâmetros de configuração sejam lidos e apareçam no lado direito da tela :

XCTU - Modulo Xbee Parâmetros


No lado direito você encontra as informações de firmware do módulo Xbee e na seção Networking & Security os parâmetros que vamos utilizar para configurar a rede Xbee.

Parâmetros de configuração

Rolando a tela, podemos ver que existem muitas possibilidades de configuração dos módulos Xbee. Mas em uma configuração básica, para comunicação ponto-a-ponto, vamos modificar apenas quatro deles :

ID PAN ID - É o número de identificação da rede Xbee ao qual o módulo irá se conectar. PAN significa Personal Area Network. Para juntar dois ou mais módulos Xbee à mesma rede, basta que estejam com o mesmo PAN ID.
MY 16-bit Source Address - É um número único que identifica o módulo Xbee na rede.
DH Destination Address High - Determina a parte "alta" (32 bits), do endereço de 64 bits que podemos atribuir aos módulos Xbee. Como estamos utilizando apenas dois módulos, vamos setar esse valor para 0 e utilizar apenas a parte baixa do endereço, especificada no próximo comando.
DL Destination Address Low - Aqui vamos colocar o endereço do módulo de destino. Como setamos 0 para o parâmetro DH, vamos utilizar o endereço de 16 bits especificado em MY 16-bit Source Address.

Essa questão dos endereços parece um pouco complicada, mas na prática fica mais fácil de entender. Vamos configurar o primeiro módulo com os parâmetros abaixo :

Parâmetros do primeiro módulo Xbee
Figura 1 : Parâmetros do primeiro módulo Xbee

E o segundo módulo vamos configurar assim :

Parâmetros do segundo módulo Xbee
Figura 2 : Parâmetros do segundo módulo Xbee

Dessa maneira, estamos determinando que os dois módulos pertencem à mesma rede (PAN ID 1234), que o primeiro módulo tem endereço 1 e vai se comunicar com o módulo que tem endereço  2 e o segundo módulo tem endereço 2 e vai se comunicar com o módulo que tem endereço 1. Compliquei ? :-)

Para gravar esses parâmetros nos módulos, primeiro coloque o Xbee que vai ser o número 1 no Xbee Explorer USB, faça a varredura conforme eu expliquei anteriormente e em seguida configure os valores conforme a Figura 1 acima. Não se esqueça de clicar no botão Write Radio Settings (abaixo), para que os valores que você alterou sejam gravados no módulo:

Xbee Write Radio Settings

Faça a mesma coisa com o segundo módulo, utilizando os parâmetros mostrados na Figura 2.

Programando o Arduino e conectando o Xbee

Agora que já temos os módulos configurados, vamos carregar o seguinte programa no Arduino, ANTES de colocarmos o Xbee Shield. Assim evitamos conflitos de serial, já que tanto a IDE como o Xbee utilizam a serial para se comunicar com o Arduino :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Programa : Envio de texto utilizando Xbee S1
// Autor : Arduino e Cia

// Carrega a biblioteca LiquidCrystal
#include <LiquidCrystal.h>   
   
// Define os pinos que serão utilizados para ligação ao display  
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

int incomingByte = 0;
char buf[20];     //Tamanho da mensagem - 20 caracteres
int num = 0;
String dados;

void setup()
{
  // Inicializacao do display e mensagem inicial
  lcd.begin(16, 2); 
  lcd.print("Aguardando...");
  // Inicializacao da serial e mensagem inicial
  Serial.begin(9600);
  Serial.println("Aguardando envio de texto...");
  Serial.println();
}

void loop()
{
  while(Serial.available() > 0)
  {
    // Armazena os caracteres no buffer
    buf[num] = Serial.read();
    // Verifica se foi recebido o caracter de nova linha
    if (buf[num] == '\n') 
    {
      lcd.clear();
      String dados = buf;
      dados.trim();
      int tamanho_string = dados.length();
      
      // Imprime o texto recebido na serial
      Serial.print("Dados recebidos : ");
      Serial.println(dados);
      
      // Mostra no display o texto recebido
      lcd.print(dados);

      // Apaga o buffer para receber novo texto
      for (int ca =0; ca<20; ca++)
      {
        buf[ca]=0;
      }
      num=0;
      break;
    }
    num++;
  }
}

Agora encaixe o segundo módulo Xbee no Xbee Shield, encaixe o shield no Arduino,  e ligue o display LCD 16x2 ao conjunto conforme a imagem abaixo. Vamos utilizar as portas analógicas de A0 a A5 para controle do display, e um potenciômetro de 10 K (podem ser usados outros valores) para ajuste do contraste :

Circuito Arduino Xbee Shield LCD


Utilize uma fonte externa (7 à 12 volts) para alimentação do Arduino.

Testando a comunicação

Mantenha o primeiro módulo Xbee conectado ao computador usando o Xbee Explorer USB. O que vamos fazer agora é usar o próprio serial monitor da IDE do Arduino para enviar textos ao segundo módulo Xbee. Na IDE do Arduino, selecione Ferramentas -> Porta Serial e escolha a porta relacionada ao Xbee Explorer (relembrando que no nosso caso é a porta COM20).

Certifique-se que o caracter de NOVA LINHA esteja selecionado conforme destacado na imagem abaixo, pois o programa aguarda esse caracter ( \n ) para determinar o tamanho da string e também para saber quando ela acabou de ser enviada.

Comunicação Xbee

Digite o texto na parte superior do serial monitor, conforme mostrado acima, e pressione ENVIAR ou aperte a tecla ENTER para que o texto seja enviado do computador para o Arduino e reproduzido no display LCD. Todo esse processo você pode conferir nesse vídeo :



7 comentários:

  1. Consigo fazer comunicação entre 3 xbee? *1 servidor e 2 estação.

    ResponderExcluir
  2. Cara poderia postar uma demonstração para ler uma porta analógica do xbee e transmitir essa informação para o arduino?

    ResponderExcluir
    Respostas
    1. Boa sugestão, vou ver o que consigo. :)

      Abraço!

      Excluir
  3. Existe alguma forma de comunicação sem usar o shield?

    ResponderExcluir
    Respostas
    1. Oi Jadir,

      O shield facilita a comunicação, pq a pinagem do módulo Xbee não é "padrão"... uma outra opção é você usar um adaptador como esse:

      http://www.filipeflop.com/pd-30427c-adaptador-xbee-para-protoboard.html

      Apenas não esqueça que o Xbee trabalha com nível de sinal de 3.3V, assim você terá que converter a tensão de sinal se for usa-lo com Arduino Uno, por exemplo.

      Abraço!

      Excluir
  4. Bom Dia, Modo API.... daria pra fazer no modelo do Xbee s3B 900 mhz?!

    ResponderExcluir
  5. Boa tarde.
    como faria pra conectar um sensor de umidade no xbee e enviar dados lidos pelo sensor para o arduino remoto?vejo projetos com xbee no arduino e outro modulo no pc.caso eu queira fazer uma comunicção entre arduino e o xbee sem conexao usb com pc,como eu poderia fazer?

    obrigado.

    ResponderExcluir