quinta-feira, junho 20, 2024

Rodando os Exemplos de Zigbee para o ESP32-C6 na IDE Arduino com o XIAO ESP32-C6

Uma das características interessantes do ESP32-C6 é o suporte ao protocolo Zigbee. Neste post vamos ver como rodar dois exemplos que vem no pacote do ESP32 para a IDE Arduino (você vai precisar de duas placas, que irão conversar uma com a outra).


O suporte ao Zigbee estreou na versão 3.00 do suporte ao ESP32 no Arduino. Quando fui usar com o XIAO ESP32-C6 eu tive um pequeno problema, mas que foi corrigido na versão 3.01.

Instalando o Suporte ao ESP32

O primeiro passo é instalar o suporte ao ESP32 na IDE Arduino (se você ainda não fez isso). Vou me referir aqui à IDE versão 2 (alguém ainda usa a versão 1?). Na IDE, selecione File Preferences e acrescente "https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json" em Additional boards manager URLs. Em seguida clique no ícone de placa na esquerda, para abrir o Boards Manager. Digite ESP32 no filtro:


O pacote que queremos é o "esp32 by Espressif Systems", clique em INSTALL.

Depois de instalado, selecione a placa XIAO_ESP32C6.

Os Exemplos

Os exemplos que vamos usar são Zigbee_Light_Bulb e Zigbee_Light_Switch. Estes exemplos estão dentro de File Examples ESP32 Zigbee e ilustram um uso simples do protocolo Zigbee. 



O "Ligh Bulb" opera como um Zigbee End Device (ZED), um dispositivo simples que conversa com um Zigbee Coordinator (ZC) ou um Zigbee Router (ZR). No caso o Light Bulb irá acender ou apagar um LED conforme comandos recebidos de um ZC/ZR.

O "Light Switch" é o ZC. Ele monitora um botão ligado ao ESP32. Quando o botão é pressionado, ele envia um comendo para acender ou apagar o LED no Light Bulb.

Preparando o Light Bulb

Abra o exemplo na IDE, aperte o botão boot da XIAO e a conecte ao micro (isto só é necessário no primeiro upload pela IDE do Arduino). Use o menu Tools Port para selecionar a porta associada ao XIAO. Ainda no Menu Tools, ligue (Enabled) a opção Erase All Flash Before Sketch Upload, selecione "Zigbee 4MB with SPIFS" em Partition Scheme e "Zigbee ED" em Zigbee Mode.

O exemplo originalmente trabalhava com um LED RGB na placa de desenvolvimento da Espressif. Vamos mudar o programa para usar o LED normal da placa XIAO:

1) Altere a linha

#define LED_PIN RGB_BUILTIN

para 

#define LED_PIN LED_BUILTIN

2) Na rotina zb_attribute_handler, substitua a linha 

neopixelWrite(LED_PIN, 255 * light_state, ...

por 

digitalWrite(LED_PIN, light_state? LOW : HIGH);

3) Na rotina setup, substitua a linha 

neopixelWrite(LED_PIN, 0, 0, 0);

por

pinMode(LED_PIN, OUTPUT);

digitalWrite(LED_PIN, LOW);

Se preferir, o código atualizado está em https://github.com/dquadros/demos_curtos.

Realize agora o upload na placa. Ao final do upload, desligue e "reserve".

Preparando o Light Switch

Abra o exemplo na IDE, aperte o botão boot da XIAO e a conecte ao micro. Use o menu Tools Port para selecionar a porta associada ao XIAO. Ainda no Menu Tools, ligue (Enabled) a opção Erase All Flash Before Sketch Upload, selecione "Zigbee 4MB with SPIFS" em Partition Scheme e "Zigbee ZCZR" em Zigbee Mode.

Como a placa XIAO não tem um botão de uso geral, você vai precisar ligar um botão externo entre os pinos D9 e GND.

No programa precisamos apenas alterar o GPIO do botão. Substitua a linha

#define GPIO_INPUT_IO_TOGGLE_SWITCH GPIO_NUM_9

por 

#define GPIO_INPUT_IO_TOGGLE_SWITCH GPIO_NUM_20

Se preferir, o código atualizado está em https://github.com/dquadros/demos_curtos

Realize agora o upload na placa. Ao final do upload, desligue e "reserve".

Rodando a Demonstração

Para rodar a demonstração você deve ligar primeiro o Light Switch, aguardar uns 2 segundos e depois ligar o Light Bulb. Se as placas estiverem ligadas ao micro, você pode acompanhar as mensagens apresentadas no Serial Monitor. No meu teste eu alimentei o Light Bulb com uma bateria.

Aí basta apertar o botão no Switch para controlar o LED na outra placa.

Nenhum comentário: