ESP32-C6 e ESP32-H2: Como Criar uma Rede Zigbee com Arduino IDE
![]() |
Projeto prático com ESP32-C6 como coordenador Zigbee e ESP32-H2 como End Device. Um botão conectado ao GPIO 23 do C6 controla o LED azul no GPIO 13 do H2 por meio de uma rede Zigbee com binding. |
ESP32-C6 e ESP32-H2: Criando uma Rede Zigbee do Zero com Arduino IDE
Neste tutorial do RodRobot, vamos criar uma rede Zigbee utilizando duas placas: o ESP32-C6 e o ESP32-H2.
Vamos configurar o Arduino IDE, gravar os códigos nas duas placas e, ao final, testar um botão conectado ao ESP32-C6 para ligar e desligar o LED azul do ESP32-H2.
O objetivo é demonstrar, na prática, como duas placas podem se comunicar sem fios utilizando o protocolo Zigbee, sem precisar de conexão com a internet para realizar esse controle.
1. O que é Zigbee?
O Zigbee é um protocolo de comunicação sem fio muito utilizado em aplicações de automação residencial, sensores, interruptores, sistemas de iluminação e dispositivos inteligentes.
Uma de suas características é permitir que dispositivos compatíveis troquem informações por meio de uma rede própria.
Diferentemente de muitas aplicações que utilizam Wi-Fi e serviços conectados à internet, neste projeto vamos criar uma rede Zigbee entre as duas placas ESP32.
A principal vantagem é que o controle funciona sem precisar de conexão com a internet. A comunicação acontece pela rede Zigbee, desde que os dispositivos estejam corretamente configurados e conectados.
2. Como funciona o projeto?
Neste projeto, cada placa terá uma função específica dentro da rede Zigbee.
ESP32-C6 — Coordenador da rede
O ESP32-C6 será configurado como coordenador Zigbee. Ele será responsável por iniciar a rede e realizar a leitura do botão conectado ao GPIO 23.
Quando o botão for pressionado, o programa verificará o estado atual do controle e enviará o comando correspondente ao ESP32-H2.
ESP32-H2 — End Device
O ESP32-H2 será configurado como dispositivo final, conhecido como End Device.
Sua função será entrar na rede Zigbee, receber os comandos enviados pelo ESP32-C6 e controlar o LED azul da placa, conectado ao GPIO 13.
Dessa forma, o botão e o LED ficam em placas diferentes, mas trabalham juntos por meio da comunicação sem fio.
Resumo das funções
| Componente | Função |
|---|---|
| ESP32-C6 | Coordenador Zigbee |
| GPIO 23 do C6 | Entrada do botão |
| ESP32-H2 | Dispositivo final (End Device) |
| GPIO 13 do H2 | Controle do LED azul |
| Rede Zigbee | Comunicação sem fio entre as placas |
3. Configurando o ESP32-C6 no Arduino IDE
Antes de gravar o programa, precisamos conferir as opções de configuração da placa no Arduino IDE.
Selecione a placa ESP32C6 Dev Module e configure as opções utilizadas neste projeto.
Configurações do ESP32-C6
Board: ESP32C6 Dev Module
USB CDC On Boot: Disabled
Zigbee Mode: Zigbee ZCZR (coordinator/router)
Partition Scheme: Zigbee ZCZR 4MB with spiffs
Erase All Flash Before Sketch Upload: utilizar Enabled quando for necessário apagar a memória antes da gravação.
Os nomes e as opções disponíveis podem variar conforme a versão do pacote ESP32 instalado e a placa selecionada.
Para que serve o USB CDC On Boot?
Neste projeto, utilizamos a opção USB CDC On Boot: Disabled no ESP32-C6 porque, durante nossos testes, essa configuração permitiu que o Monitor Serial funcionasse corretamente na conexão USB utilizada.
Essa opção controla a inicialização da comunicação serial USB CDC. O comportamento pode variar de acordo com a placa, a conexão USB e a configuração do ambiente.
O que significa Zigbee ZCZR?
A opção Zigbee ZCZR (coordinator/router) permite utilizar os recursos de coordenador e roteador Zigbee compatíveis com o ESP32-C6.
Neste projeto, o programa será configurado para que o C6 atue como coordenador e inicie a rede.
Configurando a partição de memória
Em Partition Scheme, selecionamos:
Zigbee ZCZR 4MB with spiffs
Essa configuração define a organização da memória flash utilizada pelo programa e disponibiliza a configuração de partição correspondente ao modo Zigbee selecionado.
É importante conferir se a opção está disponível e corresponde à configuração exigida pelo código utilizado.
Atenção ao Erase All Flash Before Sketch Upload
Na primeira gravação, podemos utilizar Erase All Flash Before Sketch Upload: Enabled para apagar os dados anteriores da memória.
Isso pode ajudar a evitar conflitos com configurações persistentes de projetos anteriores.
Entretanto, essa opção apaga dados da memória flash e pode remover configurações da rede Zigbee, dados de pareamento ou outras informações persistentes. Por isso, não é necessário deixá-la habilitada em todos os uploads.
Depois de configurar a placa, fazemos o upload do código do coordenador Zigbee.
4. Configurando o ESP32-H2 no Arduino IDE
Agora vamos preparar o ESP32-H2, que será o dispositivo final da rede.
Selecione a placa correspondente ao ESP32-H2 e confira as configurações necessárias para o projeto.
Configurações do ESP32-H2
No Arduino IDE, selecione as seguintes opções:
Placa: ESP32H2 Dev Module
USB CDC On Boot: Enabled
Zigbee Mode: Zigbee ED (end device)
Partition Scheme: Zigbee 4MB with spiffs
Para que serve o USB CDC On Boot: Enabled?
Essa opção permite utilizar a comunicação USB CDC para a porta serial, facilitando a visualização das mensagens no Monitor Serial durante os testes, quando a placa e a conexão oferecem suporte a esse recurso.
Vídeo tutorial: ESP32-C6 e ESP32-H2 — Criando uma Rede Zigbee
https://www.youtube.com/watch?v=PTjINxsFHuM&t=58sE se o ESP32-H2 não entrar em modo de gravação?
Se você estiver com dificuldades para reconhecer a porta COM, instalar a placa ou gravar o primeiro código no ESP32-H2 SuperMini, preparei um tutorial no canal RodRobot explicando o procedimento passo a passo.
No vídeo, mostro como instalar a placa, resolver problemas relacionados à porta COM e realizar a gravação do primeiro programa.
▶️ Assista ao tutorial completo:
ESP32-H2 SuperMini: Como Instalar, Resolver Erro na COM e Gravar o Primeiro Código
Recomendo assistir ao vídeo antes de continuar, caso sua placa não seja reconhecida pelo computador ou apresente erros durante o upload.
Com a placa reconhecida e pronta para receber o programa, você poderá continuar a configuração do ESP32-H2 para o nosso projeto Zigbee.
Assim como no ESP32-C6, o recurso Erase All Flash Before Sketch Upload pode ser utilizado quando for necessário limpar configurações anteriores. Antes de utilizá-lo, lembre-se de que os dados persistentes serão apagados.
Com as opções corretas, fazemos o upload do código do dispositivo final.
5. Como os códigos controlam o LED pela rede Zigbee?
Depois de gravar os programas, precisamos entender como o botão do ESP32-C6 controla o LED do ESP32-H2.
Código do ESP32-C6
O programa do coordenador monitora o botão conectado ao GPIO 23.
Quando detecta um pressionamento, o código alterna o estado do controle entre ligado e desligado.
As funções utilizadas no programa são:
lightOn(): envia o comando para ligar a iluminação.lightOff(): envia o comando para desligar a iluminação.
Essas chamadas são utilizadas pelo código para solicitar a mudança de estado do dispositivo de iluminação Zigbee configurado no projeto.
Código do ESP32-H2
No ESP32-H2, o programa utiliza o endpoint ZigbeeLight para receber e tratar as mudanças de estado.
A função onLightChange() permite registrar uma rotina que será chamada quando o estado da iluminação for alterado por um comando Zigbee.
A rotina do programa utiliza essa mudança de estado para controlar o GPIO 13, responsável pelo LED azul da placa.
Assim, quando o ESP32-H2 recebe o comando de ligar, o programa acende o LED. Quando recebe o comando de desligar, apaga o LED.
Importante: para que os comandos controlem o dispositivo correto, os endpoints e o mecanismo de comunicação utilizados pelos programas precisam estar configurados de forma compatível. Se o projeto utilizar binding Zigbee, o vínculo também deverá estar estabelecido.
6. Testando a rede Zigbee
Com os dois programas gravados, podemos iniciar os testes.
Passo 1 — Ligar o ESP32-C6
Ligue o ESP32-C6 e abra o Monitor Serial para acompanhar as mensagens de inicialização do coordenador.
O programa deverá iniciar a rede Zigbee conforme a configuração utilizada.
Passo 2 — Ligar o ESP32-H2
Em seguida, ligue o ESP32-H2.
O dispositivo final deverá procurar a rede e tentar se conectar ao coordenador. No Monitor Serial, podemos acompanhar as mensagens de inicialização e conexão disponibilizadas pelo programa.
A indicação de conexão, isoladamente, não garante que todos os comandos estejam funcionando. O vínculo ou mecanismo de controle necessário também precisa estar configurado corretamente.
Passo 3 — Pressionar o botão
Com a rede conectada e o controle configurado, pressione o botão ligado ao GPIO 23 do ESP32-C6.
O comportamento esperado é:
Primeiro pressionamento: o LED azul do ESP32-H2 acende.
Segundo pressionamento: o LED azul apaga.
Os pressionamentos seguintes alternam novamente entre ligado e desligado.
Observe que o botão está conectado ao ESP32-C6, enquanto o LED está no ESP32-H2. Não existe um fio de comunicação entre as duas placas: os comandos são transmitidos pela rede Zigbee.
7. Zigbee precisa de internet?
Não. Uma rede Zigbee pode funcionar localmente sem conexão com a internet.
Neste projeto, o ESP32-C6 inicia a rede e o ESP32-H2 participa dela como dispositivo final. A comunicação entre as placas acontece por rádio, utilizando o protocolo Zigbee.
A internet pode ser necessária em outros projetos quando queremos controlar dispositivos remotamente, acessar serviços na nuvem ou integrar a automação a sistemas externos. Porém, para o teste local apresentado aqui, ela não é necessária.
Conclusão
Neste tutorial, vimos como preparar o Arduino IDE e configurar duas placas ESP32 para um projeto de comunicação Zigbee.
O ESP32-C6 atua como coordenador, inicia a rede e lê o botão conectado ao GPIO 23. O ESP32-H2 atua como End Device, recebe os comandos e controla o LED azul conectado ao GPIO 13.
O resultado é um exemplo prático de comunicação sem fio entre microcontroladores, sem depende
🔧 Acompanhe o RodRobot
Projetos maker com ESP32, Arduino, eletrônica e programação.
RodRobot – Projetos maker, eletrônica e programação na prática.



Comentários
Postar um comentário