Controlando a luz LED no modo Zigbee API: IOT Parte 38

No tutorial anterior, a comunicação IoT entre dois dispositivos através do protocolo Zigbee foi demonstrada usando dois módulos Xbee. Os dois módulos comunicavam-se entre si automaticamente, sem qualquer intervenção humana. Os dois módulos também operaram em modo transparente no projeto anterior.
Neste projeto, um controlador de luz LED é projetado onde um dispositivo controla o LED conectado a outro, comunicando dados no modo API. Neste tutorial, dois dispositivos IoT baseados em módulo Xbee serão projetados e configurados para se comunicarem entre si através do protocolo Zigbee. Um desses dispositivos na rede Zigbee será um dispositivo Coordenador e o outro será um dispositivo Roteador. O dispositivo roteador controlará o LED conectado ao dispositivo Coordenador. Um switch é conectado ao roteador Xbee. O roteador Xbee lê o estado deste switch a cada 1 segundo e envia o estado sem fio para o Coordenador Xbee. O coordenador Xbee envia as informações ao seu controlador via comunicação serial. O Arduino controla o LED conectado a ele com essa informação e notifica no monitor serial.
O protocolo Zigbee é um dos padrões mais populares para redes de sensores sem fio. O Zigbee é comumente usado em aplicações industriais de IoT.
Os dispositivos Xbee se comunicam entre si sem fio pelo ar. Eles não possuem nenhum microcontrolador ou processador próprio, portanto não podem gerenciar os dados recebidos ou enviados. Eles podem simplesmente transferir as informações que recebem. Mas eles podem ser interligados com outros microcontroladores e processadores como Arduino, Raspberry Pi ou PC via interface serial.
Então, basicamente, os módulos Xbee são capazes de dois tipos de comunicação – comunicação sem fio e comunicação serial. A comunicação sem fio ocorre entre dispositivos Xbee para que os dispositivos atuem como dispositivos de radiofrequência (RF). Para que os dados sejam transmitidos e recebidos de um módulo Xbee para outro, ambos os dispositivos devem estar na mesma rede. Os dados entre dois dispositivos são transmitidos sem fio. Por comunicação serial (UART), os módulos Xbee podem se comunicar com microcontroladores e processadores.
Um microcontrolador, processador ou PC pode enviar dados através da interface serial para o módulo Xbee (transmissor) e o módulo Xbee transmite os dados sem fio para outro módulo Xbee (receptor). O módulo receptor Xbee transmite os dados através da interface serial para o controlador, processador ou PC ao qual está conectado. O controlador interligado ao módulo Xbee processa as informações recebidas pelos dispositivos Xbee. Desta forma, os controladores podem monitorar e controlar dispositivos remotos enviando mensagens através dos módulos Xbee locais.
Os módulos Xbee se comunicam entre si em dois modos – modo Transparente e modo API (Application Peripheral Interface). Este projeto é baseado no modo Transparente. No modo transparente, os módulos Xbee atuam como substitutos da linha serial. Todos os dados recebidos através da entrada serial são imediatamente transmitidos pelo ar. Quando outro módulo Xbee recebe dados sem fio, ele os envia exatamente como os recebe através da interface serial e vice-versa. Ao contrário disso, no modo API, os dados são transmitidos com algumas informações adicionais.
Neste projeto, dois módulos Xbee serão interligados com placas Arduino. Eles serão configurados para comunicar dados entre si no modo API. Um dos dispositivos Arduino terá interface com um LED e será configurado como Coordenador Zigbee. O outro dispositivo Arduino será configurado como Zigbee Router. O dispositivo roteador controlará o LED conectado ao dispositivo coordenador, passando mensagens pelo protocolo Zigbee no modo API. Os módulos Xbee interligados em ambos os dispositivos serão configurados como coordenador ou roteador usando o software XCTU.
Este projeto é uma demonstração simples de serviços de automação residencial sobre protocolo Zigbee. Assim como o LED, qualquer eletrodoméstico pode ser controlado remotamente de maneira semelhante.
O modo API fornece uma interface estruturada onde os pacotes são transferidos de forma organizada por meio da interface serial e em uma ordem determinada. Por padrão, os dispositivos Xbee são configurados para trabalhar no modo transparente. O modo transparente tem algumas limitações importantes, como segue –
1) Para ler ou escrever a configuração de um dispositivo, o dispositivo deve entrar no modo de comando.
2) Quando o Xbee recebe os dados sem fio, ele não conhece o endereço de origem dos dados. Se o Xbee receber os dados de vários dispositivos, será muito difícil para o Xbee distinguir qual dispositivo enviou os dados para o Xbee. Para isso, em modo transparente, um protocolo customizado precisa ser configurado na pilha do protocolo padrão do Xbee. Todas as informações extras precisam ser incluídas no protocolo personalizado.
3) Se um dispositivo precisar transmitir mensagens diferentes para dispositivos diferentes, sua configuração precisará ser atualizada a cada vez, um novo destino será definido.
Para superar esses problemas, surge o modo API. No modo API, existem as seguintes disposições para combater as limitações mencionadas acima –
1) Existem diferentes frames para diferentes finalidades (como configuração e comunicação), os dispositivos de leitura ou gravação podem ser configurados sem entrar no modo de comando.
2) Os frames da API incluem o endereço de origem da mensagem para que os dispositivos possam ser facilmente diferenciados quando vários dispositivos enviam dados para um dispositivo. Quando o dispositivo recebe as informações, a fonte também é notificada sobre o sucesso da entrega das informações.
3) A estrutura do quadro da API inclui o endereço de destino para que diferentes mensagens possam ser enviadas para diferentes dispositivos no modo API.
Componente necessário –
Lista de componentes necessários para controlador de luz LED no modo API Zigbee
Fig. 1: Lista de componentes necessários para o controlador de luz LED no modo Zigbee API
Software necessário –
• XCTU (6.3.1 ou posterior)
• ArduinoIDE
Diagrama de bloco –
Diagrama de blocos do controlador LED do modo API Xbee
Fig. 2: Diagrama de blocos do controlador LED do modo API Xbee
Conexões de circuito –
Os módulos Xbee Série 2 serão utilizados neste projeto. O módulo X-Bee é um módulo de 20 pinos com a seguinte configuração de pinos –
Tabela de listagem de configuração de pinos do módulo Xbee Série 2
Fig. 3: Tabela listando a configuração dos pinos do Módulo Xbee Série 2
Para conectar o módulo ao PC para configuração, primeiro coloque o Xbee no Xbee Shield e conecte o módulo a um Arduino. O Arduino UNO ou Arduino Mega atua como um conversor USB para módulos Xbee. Antes de usar o Arduino UNO com módulos Xbee, um esboço mínimo deve ser carregado nele ou o microcontrolador Atmega deve ser removido da placa. O módulo Xbee pode ser alimentado por uma fonte de alimentação externa ou pelo Arduino. O módulo Xbee e a placa Arduino devem se comunicar serialmente. O módulo Xbee deve ser conectado ao Arduino conforme tabela a seguir –
Tabela de listagem de conexões de circuito entre Arduino e módulo Xbee Série 2
Fig. 4: Tabela listando as conexões do circuito entre o Arduino e o módulo Xbee Series 2
Agora o Arduino pode ser conectado ao PC usando um cabo USB.
Após conectar o módulo ao computador, execute as seguintes etapas –
1) Abra o software XCTU. Certifique-se de que o software esteja no modo de funcionamento de configuração.
2) Clique em “Descobrir Módulos de Rádio”.
3) Clique na porta COM desejada na qual o módulo está conectado.
4) Clique em próximo, na janela ‘Definir parâmetros de porta’, altere os valores de acordo com os requisitos e clique em finalizar.
5) Conforme o XCTU localiza os módulos de rádio após a varredura completa, selecione os módulos de rádio clicando em 'Add selected devices'. Agora, os módulos de rádio selecionados devem aparecer na janela do módulo de rádio.
Para transmitir ou receber dados nos módulos Xbee, eles precisam estar devidamente configurados na mesma rede. De acordo com o protocolo Zigbee, um dispositivo precisa estar no modo coordenador e os demais podem ser roteadores ou dispositivos finais. Neste caso, um dispositivo é o coordenador e o outro é o roteador. O Coordenador Xbee faz interface com LED e recebe os frames API do Roteador Xbee. Assim, o coordenador Xbee estará em modo API. O Roteador Xbee envia exatamente as informações recebidas serialmente do PC para que fique no modo AT.
Agora, restaure a configuração padrão de todos os módulos Xbee com o botão 'Carregar configuração de firmware padrão' na parte superior da seção de configuração de rádio e use XCTU para configurar o seguinte parâmetro –
Parâmetros de configuração de listagem de tabela para módulo Xbee Série 2
Fig. 5: Tabela listando parâmetros de configuração para o módulo Xbee Series 2
Parâmetros de configuração de listagem de tabela para módulo Xbee Série 2
Fig. 6: Tabela listando os parâmetros de configuração do Módulo Xbee Série 2
Mantenha o restante dos valores como padrão e escreva as configurações de todos os módulos Xbee com o botão 'write radio modules' no topo da configuração do rádio. Assim que a configuração for concluída, clique no botão discover radio modules on same network de qualquer módulo de rádio. Agora, os módulos de rádio para a mesma rede podem ser encontrados.
Agora os módulos Xbee podem ser conectados nos respectivos circuitos.
Um desses dispositivos funcionará como Zigbee Coordinator. Conecte o módulo Xbee configurado como coordenador em seu circuito. O módulo Xbee pode se comunicar com o Arduino através de comunicação serial. A serial do software Arduino é usada para ler os dados do Xbee e a serial do hardware para ler os dados seriais do controlador. Como o Xbee opera em nível lógico CMOS e o Arduino opera em nível lógico TTL, há necessidade de um conversor de nível lógico. Um módulo conversor de nível de interface de nível lógico IIC I2C de 5 V a 3,3 V para Arduino é usado como conversor de nível lógico. O módulo Xbee pode ser alimentado por uma fonte externa ou pelo Arduino. Para comunicação serial entre a placa Arduino e o módulo Xbee, o pino RX do Xbee é conectado ao TX do Arduino e o pino TX do Xbee é conectado ao RX do Arduino. O pino de aterramento está conectado ao aterramento comum. Um LED faz interface com o Arduino em seu pino PD2 (pino 4) por meio de um resistor pull up de 220 ohms.
O outro dispositivo funciona como roteador Zigbee. Conecte o módulo Xbee configurado como roteador em seu circuito. Um switch está conectado ao pino 15 do Roteador Xbee. O pino 15 por padrão é aterrado, mas quando a chave é pressionada, ele recebe VCC. Também pode ser alimentado por uma placa Arduino ou por uma fonte de alimentação externa.
As seguintes precauções devem ser tomadas ao interligar os módulos Xbee –
1) Os módulos Xbee operam em 3V3 com corrente de 40 mA para transmitir e receber os dados. Não forneça 5V do Arduino.
2) Os módulos Xbee possuem nível de sinal tolerante 3V3. Para fornecer comunicação entre arduino e Xbee, use o conversor de nível lógico CMOS para TTL (bidirecional).
3) Às vezes, ao tentar descobrir o Xbee, pode ocorrer um erro como – 'Não foi possível encontrar nenhum dispositivo na porta COM6 >Para string de entrada: “ERROR” ou erro ao inicializar o parâmetro do dispositivo = tempo limite de conexão ou não foi possível encontrar o parâmetro do dispositivo' então o O erro pode ser devido à taxa de transmissão incorreta.
Para isso, conecte o modem usando o cabo FTDI ao PC, abra o XCTU, selecione a porta COM e várias taxas de transmissão como 9600, 115200, 57600 e procure o módulo de rádio e possivelmente lá o módulo de rádio poderá ser encontrado. Mas se não for encontrado, abra o XCTU legado (versão antiga), selecione a taxa de transmissão possível e na janela de configuração do modem selecione o firmware/conjunto de funções do modem correto, ative 'sempre atualizar firmware' e selecione gravar. Depois disso, quando a caixa de informações (ação necessária) aparecer, reinicie o Xbee conectando RST ao GND ou simplesmente retire o Xbee e coloque-o novamente no assento. Agora a caixa de informações desaparecerá. Em seguida, os módulos de rádio piscarão novamente automaticamente.
4) Se ocorrer o erro de diferença de taxa de transmissão, o erro pode ser que o PC e o módulo de rádio não estão funcionando na mesma taxa de transmissão. Nesse caso, tente trocar o PC e atualizar o firmware com outro PC. O módulo Xbee também pode ser recuperado desta forma.
5) Configure o módulo (Roteador) corretamente ao trabalhar no modo API.
Imagem mostrando conexões de circuito do controlador LED do modo API Xbee
Fig. 7: Imagem mostrando as conexões do circuito do controlador LED do modo API Xbee
Como funciona o circuito –
É importante compreender a estrutura do quadro da API para saber como os dados são comunicados no modo API. Os pacotes de dados de estrutura no modo API são chamados de frames. Eles são enviados e recebidos através da interface serial do dispositivo. Eles contêm a mensagem sem fio e algumas informações extras, como endereço de origem/destino dos dados. Principalmente o comprimento do quadro é de 22 bytes e contém as seguintes informações –
Estrutura do quadro da API de listagem de tabelas
Fig. 8: Tabela listando a estrutura do quadro API
Iniciar delimitador – O delimitador inicial é o primeiro byte de um quadro que consiste em uma sequência específica do quadro que indica o início do quadro de dados. A partir disso, pode-se saber que o novo pacote recebido chegou.
Comprimento – O campo de comprimento especifica o número total de bytes incluídos no campo de dados do quadro.
Dados do quadro – Este campo contém a mensagem recebida ou transmitida. Isso inclui tipo de quadro, ID do quadro, endereço de origem ou destino de 64 bits, endereço de origem ou destino de 16 bits, opções de envio ou recebimento (reconhecimento de pacote ou não, se reconhecido, o valor é 01, para pacote de transmissão, é 02, para pacote criptografado com segurança APS é 20 e para pacotes enviados com timeout estendido habilitado é 0x40), Número de conjuntos de amostras, Máscara de canal digital, Máscara de canal analógico e dados RF (digitais ou analógicos).
Soma de verificação – Especifica a integridade dos dados de teste.
Quando o switch conectado ao final do roteador é pressionado ou não, o status é notificado no final do coordenador e o LED local também acenderá quando o botão for pressionado. O roteador recebe sinal 0 no pino de entrada digital D3 quando o interruptor não é pressionado e 1 quando o interruptor é pressionado. O roteador envia as informações do sinal para o coordenador Xbee sem fio em um período contínuo de 1 segundo, independentemente de o botão ser pressionado ou não. O coordenador Xbee ao receber as informações, por comunicação serial envia as informações para a serial do Arduino. O pacote recebido se parece com o seguinte –
7E, 0, 12, 92, 0, 13, A2, 0, 41, 26, 85, 81, 25, 4B, 1, 1, 0, 8, 0, 0, 8, soma de verificação.
0, 8 é uma máscara de canal digital, o que significa –
Valores de bits do primeiro e segundo byte no quadro API
Fig. 9: Valores de bits do primeiro e segundo bytes no quadro API
00001000 é 0x8 em hexadecimal e 8 em decimal.
A serial do Arduino imprime as informações no monitor serial, independentemente de o botão ser pressionado ou não. O Arduino não deseja imprimir todas as informações. Após 19 bytes está a mensagem real que ele está recebendo, então ele descartará os primeiros 19 bytes iniciais do quadro e começará a comparar com os bytes da mensagem. O código a seguir é usado para extrair a mensagem original do quadro API recebido.
se (status_botão == 0)
{
Serial.println(”não pressionado”);
digitalWrite(ledPin, LOW);
}
//Se receber Button_status como 8, imprime o status e deixa o LED alto.
senão se (Button_status == 8)
{
Serial.println(“pressionado”);
digitalWrite(ledPin, ALTO);
}
Se o botão for pressionado, o LED conectado ao pino digital 2 do arduino começa a brilhar configurando o respectivo pino para ALTO, caso contrário, ele irá parar de brilhar configurando o respectivo pino para BAIXO. Desta forma, o Xbee (Roteador) remoto fica controlando o LED conectado ao controlador conectado ao outro Xbee (Coordenador). Esta é uma demonstração simples de automação residencial sobre protocolo Zigbee usando módulos Xbee em modo API.
No próximo tutorial, conheça outro protocolo IoT – MQTT-SN.

Código fonte do projeto

###



//Program to 


/*

  @Aplication: Xbee_digital_button_state


  Breif description: 

  This code is for coordinator xbee. When received information from router xbee, the coordinator 
xbee transmits the information to Arduino and 

  based on that information, arduino controls the led connected to it and print the button status to serial monitor

*/


//Variable to store the status of button

int Button_status = 0;


int ledPin = 2;


void setup 

{

  //Start the serial communication

  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);

}

void loop 

{

  //check whether we are receiving frames or not

  if (Serial.available  > 21)

  {

    //7E indicates the starting of the frame. Now we start receiving the frames. 

    //check if the frame received is the starting of the frame

    if (Serial.read  == 0x7E)

    {

      //count the frame bytes up to 19 and discard those bytes.

      for (int i = 0; i < 19; i++)

      {

        byte byte_discarded = Serial.read ;

      }

      //After 19 bytes discarded, store the button status signal

      Button_status = Serial.read ;

      Serial.print("button is:");

      

      //If receive button status as 0, print the status and make the lED low

      if (Button_status == 0)

      {

        Serial.println(" not pressed");

        digitalWrite(ledPin, LOW);

      }

      

      //If receive Button_status as 8, print the status and make the LED high. 

      else if (Button_status == 8)

      {

        Serial.println("pressed");

        digitalWrite(ledPin, HIGH);

      }

      Serial.println ;

    }

  }

}


###

Diagramas de circuito

Diagrama de circuito-Xbee-API-Mode-LED-Controller

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.