CC2538 + CC2592 - Como construir o melhor coordenador ZigBee V2 - Update

This topic will contain a table of contents

O CC2538 + CC2592 é um dos coordenadores ZigBee mais poderosos para utilizar com o Addon Zigbee2MQTT no Home Assistant. Suporta mais de 150 equipamentos ZigBee ligados diretamente ao coordenador e tem um alcance de cerca de 800 metros em céu aberto. Mais informação disponível aqui.

Este guia tem como objetivo disponibilizar os passos necessários para contruir um coordenador com o CC2538 que pode funcionar com ligação USB ou WiFi ao hardware onde está instalado o Home Assistant. Pode também ser utilizado como Router e ser flashado diretamente pela ligação USB através do Windows. Os modos de utilização são selecionados através de dois DIP Switch.

Nota:
Este guia destina-se a utilizadores intermédios e avançados, e que tenham experiência a utilizar o ferro de soldar, devido aos pads onde são soldados os fios no CC2538 serem muito pequenos, o que pode dificultar quem se sentir pouco à vontade na utilização do ferro de soldar.
Para além de todo o equipamento será necessário uma impressora 3D para imprimir a caixa.

Desde já obrigado ao @Maddoctor pela ajuda a configurar o Raspberry Pi e nos comandos necessários para flashar o CC2538. :wink:

O primeiro passo vai ser desbloquear o bootloader do CC2538 recorrendo a um Raspberry Pi. Este passo só é necessário fazer uma vez, depois pode-se flashar novos firmwares e alterar entre firmware de Coordenador e Router fazendo o flash através do Windows e a ligação USB ao Wemos.

UPDATE: Foi feita uma atualização no ponto 3 devido a existirem pelo menos duas versões do CC2538 com layout diferente.

O guia está dividido nos seguintes tópicos:

  1. Material necessário
  2. Preparar o Raspberry Pi com o OpenOCD
  3. Esquema de ligação entre o CC2538 e o Raspberry Pi
  4. Desbloquear o bootloader do CC2538
  5. Esquema de ligações
  6. Caixa 3D e montagem
  7. Flashar ou atualizar o firmware do CC2538
  8. Configuração Coordenador USB
  9. Configuração Coordenador WiFi
  10. Configuração Router
  11. Bibliografia

1. Material necessário

Necessitamos de um Raspberry Pi, cartão de memória, fios para ligações, ferro de soldar impressora 3D e do seguinte material:

1 - CC2538+CC2592 PA Zigbee Wireless Module – Link
1 - Antenna 3dBi RP-SMA Male Omni for wireless router+ IPX to RP-SMA Jack Male Pin – Link
1 - WeMos D1 Mini – Link
1 - Interruptor DIP (DIP-switch) 2 vias ON-OFF RM2.54mm – Link

2. Preparar o Raspberry Pi com o OpenOCD

O bootloader do CC2538 tem vindo bloqueado, e para o desbloquear é necessário fazer um reset através de JTAG recorrendo por exemplo a um Raspberry Pi.

Este guia foi feito utilizando um Raspberry Pi Model B R2. Devem ajustar as ligações ao vosso Raspberry caso seja necessário.

O primeiro passo é preparar um cartão de memória com o Raspberry Pi OS Lite com o SSH ativo e caso queiram utilizar a rede wireless do Raspberry Pi, criar o ficheiro com os dados de acesso à rede wireless.

Fazer download do Raspberry Pi Imager do seguinte link e copiar para o cartão de memória o Raspberry Pi OS Lite.

De seguida vão ter acesso a uma partição Boot no cartão de memória que devem utilizar para copiar para lá o ficheiro para configurar os dados de acesso à rede WiFi, consultar o seguinte link.

Para ativar o SSH, na partição Boot criar um ficheiro com o nome ssh sem nenhuma extensão no nome do ficheiro. Caso tenham dúvidas consultar o seguinte link.

Com o cartão de memória pronto, iniciar o Pi, descobrir o IP que lhe foi atribuído no vosso router e acederem por SSH utilizando o software Putty. A primeira vez que o Pi iniciar pode demorar mais que 5 minutos, dependendo da versão do Pi.

Login e password para aceder por SSH… Login: pi Password: raspberry

Em caso de dúvida de como fazer estas configurações, procurar informação no google que há muito informação sobre como configurar o Pi.

Depois de ter acesso ao Pi por SSH executar os seguintes comandos um a um para compilar e instalar o OpenOCD.

cd ~
sudo apt-get update
sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev locate telnet
sudo updatedb
git clone http://openocd.zylin.com/openocd
cd openocd
./bootstrap
./configure --enable-sysfsgpio --enable-bcm2835gpio
make
sudo make install
sudo updatedb

No final destes comandos, o OpenOCD está pronto para ser utilizado.

3. Esquema de ligação entre o CC2538 e o Raspberry Pi

Depois de ter o Pi com o OpenOCD pronto a utilizar, fazer as ligações entre o Pi e o CC2538.
Ter em atenção que existem pelo menos duas versões do CC2538 em que o layout é diferente.
Nas seguintes imagens coloquei a imagem do CC2538 ao lado do esquema para ser mais fácil identificar qual a versão que vão utilizar.

Fazer as ligações tendo em conta os seguintes esquemas de acordo com o CC2538 que vão utilizar.

Versão 1:

Versão 2:

Na altura que flashei este CC2538 não tinha comigo ferro de soldar, mas recorrendo a um pouco de fita cola e fios retirados de um cabo de rede, fiz as “ligações” no CC2538 como se pode ver pela imagem seguinte.

No final as ligações entre o CC2538 e o Wemos tem de ser feitas recorrendo ao ferro de soldar.

Este método serve para poderem tirar ideias para outros projetos em que só necessitam de flashar um firmware, por exemplo com um FTDI, sem ter de manter as ligações depois do equipamento estar flashado.

Depois de desbloquear o bootloader descrito no próximo passo, estas ligações não são mais necessárias.

4. Desbloquear o bootloader do CC2538

Depois das ligações feitas, iniciar o Pi e aceder por SSH utilizando o Putty.

Para iniciar o OpenOCD utilizar o seguinte comando:

sudo openocd -f /home/pi/openocd/tcl/interface/raspberrypi-native.cfg -f /home/pi/openocd/tcl/target/cc2538.cfg

Pode ser necessário alterar entre o ficheiro raspberrypi-native.cfg e o raspberrypi2-native.cfg tendo em conta a versão que estão a utilizar do Pi. No meu caso ainda é um Raspberry Pi Model B R2 de 2012. Comigo funcionou o raspberrypi-native.cfg

O resultado deve ser como na seguinte imagem…

Sem fechar esta primeira sessão no Putty, abrir uma nova sessão por SSH e executar o seguinte comando:

telnet localhost 4444

O resultado deve ser como na seguinte imagem…

run_telnet

De seguida executar o seguinte comando…

mww 0x400D300C 0x7F800

E de seguida…

mww 0x400D3008 0x0205

O resultado deve ser como na seguinte imagem…

telnet_mww

Se tudo tiver corrido bem, o vosso CC2538 tem o bootloader desbloqueado e pode agora ser flashado por FTDI.

5. Esquema de ligações

O esquema das ligações que vai ser necessário fazer é o seguinte:

Todas as ligações são feitas recorrendo a fios. Utilizar fio flexível o mais fino possível para facilitar as soldaduras no CC2538 e ser mais fácil arrumar dentro da caixa.

Depois de feitas todas as ligações o aspeto final é o seguinte.

6. Caixa 3D e montagem

A caixa está desenhada para ser tudo montado por encaixe depois de já ter todos os fios soldados.

Para fazer download do STL da caixa, visitar o seguinte link no Thingiverse.

O aspeto final vai ser o das seguintes imagens:

7. Flashar ou atualizar o firmware do CC2538

Depois de ter o bootloader desbloqueado, sempre que se iniciar o CC2538 ele vai entrar em modo bootloader até ser flashado um firmware válido.

Caso já tenha sido flashado um firmware válido, para ativar o modo bootloader que permite o CC2538 ser novamente flashado, colocar os DIP Switch 1 a On e 2 a On.

De seguida ligar um cabo micro USB do Wemos a uma porta USB do computador e fazer os seguintes passos.

Criar uma pasta em C:\ com o nome CC2538.

Copiar para esta pasta o ficheiro cc2538-bsl.py do seguinte link.

Para flashar o firmware Coordenador ir ao seguinte link e fazer download para o PC da versão UART mais recente, descompactar e copiar o ficheiro *.bin para a pasta CC2538 que criaram em C:\.

Para flashar o firmware Router ir ao seguinte link e fazer download para o PC da versão UART mais recente, descompactar e copiar o ficheiro *.bin para a pasta CC2538 que criaram em C:\.

Iniciar a Linha de Comandos do Windows (menu Iniciar do Windows, escrever “cmd” + enter), de seguida escrever o seguinte comando.

python

Se abrir uma janela como na seguinte imagem, clicar em Obter para instalar o Python.

De seguida escrever novamente python na Linha de Comandos e se tudo tiver corrido bem, vão ter o resultado da seguinte imagem.

Para sair do python, Ctrl + Z seguido de Enter.

De seguida escrever na Linha de Comandos.

pip3 install pyserial

Resultado vai ser como da seguinte imagem.

Para flashar o CC2538 utilizar o seguinte comando.

Substituir JH_2538_2592_ZNP_UART_20201010.bin pela versão Coordenador ou Router mais recente do ficheiro que acabaram de fazer download no passo anterior, e a porta COM3 pela porta onde tiverem ligado o Wemos.

python cc2538-bsl.py -p COM3 -e -v -w JH_2538_2592_ZNP_UART_20201010.bin

O resultado que devem ter é o da imagem seguinte.

Depois de ser flashado um firmware válido pela primeira vez, sempre que necessitarem de flashar novo firmware é só colocar os DIP Switch 1 a On e 2 a On para flashar novo firmware ou alternar entre o firmware Router e Coordenador.

Depois de flashado, colocar o DIP Switch 2 a On para modo USB ou a Off para modo WiFi. O DIP Switch 1 fica sempre a Off em funcionamento normal.

8. Configuração Coordenador USB

Podemos utilizar o CC2538 + Wemos para comunicar com o hardware onde temos instalado o Home Assistant, através da ligação USB do Wemos.

Para ativar o modo USB colocamos o DIP Switch 1 a Off e o 2 a On que vai fazer com que o Wemos passe a funcionar como um FTDI.

Para configurar este novo coordenador no Addon Zigbee2MQTT do Home Assistant, ir às configurações do Addon e em Serial colocar o seguinte:

serial:
  port: 'PORTA_USB_ONDE_ESTÁ_LIGADO_O_WEMOS'

De seguida salvar as alterações e reiniciar o Addon.

Caso tenham erros no Log do Addon, pode ser necessário desinstalar e instalar novamente o Addon, caso já o tenham utilizado com outra PEN ZigBee.

9. Configuração Coordenador WiFi

Podemos utilizar o CC2538 + Wemos para comunicar com o hardware onde temos instalado o Home Assistant, através do WiFi do Wemos.

Para ativar o modo WiFi colocamos o DIP Switch 1 a Off e o 2 a Off.

Para utilizar a comunicação WiFi temos que flashar o Wemos com o ESP-Easy. Seguir este guia ou pesquisar no google como flashar o ESP-Easy no Wemos.

De seguida aceder à Web Interface do ESP-Easy e configurar os dados de acesso à vossa rede Wireless.

Próximo passo, clicar em Devices, de seguida Add na primeira linha e preencher os campos como na imagem seguinte.

De seguida clicar em Submit e tem o ESP-Easy configurado.

Para configurar este novo coordenador no Addon Zigbee2MQTT do Home Assistant, ir às configurações do Addon e em Serial colocar o seguinte:

serial:
  port: 'tcp://IP_DO_ESP_EASY:1775'

Em que IP_DO_ESP_EASY é o IP que utilizam para aceder à Web Interface do ESP-Easy.

De seguida salvar as alterações e reiniciar o Addon.

Caso tenham erros no Log do Addon, pode ser necessário desinstalar e instalar novamente o Addon, caso já o tenham utilizado com outra PEN ZigBee.

10. Configuração Router

Para utilizarmos o CC2538 como Router seguimos o passo Flashar ou atualizar o firmware do CC2538 e flashamos o firmware Router. De seguida colocamos o DIP Switch 1 a Off e 2 a On.

A alimentação pode ser feita por exemplo através de um carregador de telemóvel ou uma porta USB de outro equipamento que seja capaz de fornecer energia ao Wemos.

Para emparelhar o Router no Zigbee2MQTT só temos que ativar o modo Permit Join que ele vai ser adicionado automaticamente.

Nota:
No momento em que foi escrito este guia, as versões do firmware de 2021 ainda não eram suportadas pelo Zigbee2MQTT. Tinha que ser utilizada a versão 20200522.

11. Bibliografia

Links para consulta e que serviram como ajuda na realização deste guia.

https://www.zigbee2mqtt.io/information/supported_adapters.html#texas-instruments-cc2538-with-cc2592-rf-amplifier

https://gist.github.com/hwhw/fc43892785aa84913d03495c97b0f25a

https://www.letscontrolit.com/wiki/index.php?title=ESPEasy#Loading_firmware

https://github.com/letscontrolit/ESPEasy

https://github.com/jethome-ru/zigbee-firmware/tree/master/ti/coordinator/cc2538_cc2592

https://github.com/JelmerT/cc2538-bsl

https://github.com/jethome-ru/zigbee-firmware/raw/master/ti/router/cc2538_cc2592/

8 Likes

Boa tarde
Mais uma vez muitos parabéns para este projeto.
ja tinha posto a questão na versão V1, mas se me permitem volto a por aqui.
em vez do Zigbee2MQTT pode usar-se com o Zigbee home assistant por usb?
Muito obrigado.

Desculpa ter fechado o outro tópico antes de teres resposta.

No site do ZHA faz referencia ao CC2538 ser suportado… Podes ver neste link

De momento não te posso confirmar se com este firmware é suportado ou não… Talvez hoje à noite possa testar.

Mas alguma razão em especial para quereres utilizar o ZHA?

Boa noite
Obrigado pela rápida resposta.
Pareceu-me mais simples a configuração no home assistant, mas não testei o Zigbee2MQTT (isto parece os que dizem que não gostam sem provar). lololololololol
Não tenho como testar, mas dentro de alguns (largos) dias já vou testar pois acabei de mandar vir o material do ali.
Devia ter feito logo em vez da raspbee2 que não funciona com ssd a não ser que fique longe…

Bom dia a todos.
Em primeiro lugar agradeço o trabalho realizado neste forum. Descobri-o recentemente por referência de um amigo e o conteúdo é fantástico. Espero poder vir a contribuir.

Este fim de semana construí este coordenador seguindo as instruções deste tópico.
Bootloader OK.
Firmware flash OK.
ESPEasy OK.

Mas no momento de testar através de WI-FI o coordenador não responde às queries to Zigbee2Mqtt.
É muito estranho… Se alguma ligação estivesse mal feita então suponho que não poderia flashar o CC2538, mas posso fazé-lo sem problema e o checksum é o indicado no post acima.

Em relação ao Zigbee2Mqtt (Z2M), consigo ver nos logs do ESPEasy que o ESP8266 recebe a comunicação mas o Z2M desiste 6 segundos depois por não ter resposta do CC2538.
O erro mostrado nos logs do Z2M é que não pode comunicar com o “adapter” após 6000ms.

Vi no forum da TI que na livraria do stack3 havia um erro que fazia com que o CC2538 recebesse mas não transmitisse; i.e. o TX não funcionava. Mas suponho que esse erro foi corrigido no firmware atual.

Algum de vocês tem este coordenador a funcionar na modalidade WI-FI?
Alguma dica extra que deva saber?

Muito Obrigado a todos e continúem este excelente trabalho.

Abraço,
Juan

Boas…

@JuanR Eu tenho a funcionar por WiFi desde que construí a primeira versão que está neste tópico.

Nesse mesmo tópico o @Canossa também teve dificuldade em colocar a funcionar por WiFi da forma descrita no tópico e diz que conseguiu resolver utilizando a porta 8485. Vê este post.

De momento tenho a primeira versão que está no outro tópico a funcionar por WiFi e a versão que está neste tópico como router.

@FSousa , muito Obrigado.
Posso flashar o CC2538, no entanto, se utilizo o comando, em modo de programação para ver se o CC2538 está diaponivel (python cc2538-bsl.py -p COM3), só me funciona durante aprox 10 seg e depois tenho que desligar e voltar a ligar pata ter acesso ao CC2538…
Suspeito que o meu CC2538 nao está bem…
Vou testar este fim de semana e depois digo qual o resultado.

Bom dia
Já chegaram o CC2538 e D1 mini, e não esperei pela antena e meti-me ao trabalho.
Tudo correu bem a primeira a não ser um erro de reiniciar a raspberry para iniciar o modulo por usb e por isso não estava a conseguir. ( fica a dica, desliguem a raspberry, liguem o dispositivo por USB e liguem novamente).
Confirmo também o funcionamento com a integração ZHA (zigbee home automation).
Vou esperar pela antena mas entretanto vou saber onde posso imprimir a caixa para ficar tudo top.
Mais uma vez muitos parabems Amigo Filipe Sousa.

@bandido Podes utilizar isso mesmo sem antena que vais ter bom alcance.

Quando montei a primeira versão, no inicio também ainda não tinha antena, testei sem antena externa e tinha cobertura em toda a casa no rés do chão. Não cheguei a mudar a resistencia na pcb do CC2538 para utilizar a antena da PCB. Utilizei mesmo sem nenhuma antena e fiquei impressionado com o alcance.
Tem melhor alcance o CC2538 sem antena do que o antigo CC2531 com antena externa.

É bom saber que também funciona com o ZHA, embora eu prefiro o Z2M…

Quando tiveres o teu pronto coloca umas fotos do resultado final. :wink:

Eu desafio até todos os que fizeram este projeto de partilhar as fotos do resultado final!

Boa tarde
Desculpem só responder agora mas tem sido muito difícil no trabalho.
Não quero usar sem antena externa pois tenho medo que o andar de saída queime, mas se a antena demorar vou rodar a resistencia…
Assim que tenha caixa eu meto fotos…


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade