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.
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:
- Material necessário
- Preparar o Raspberry Pi com o OpenOCD
- Esquema de ligação entre o CC2538 e o Raspberry Pi
- Desbloquear o bootloader do CC2538
- Esquema de ligações
- Caixa 3D e montagem
- Flashar ou atualizar o firmware do CC2538
- Configuração Coordenador USB
- Configuração Coordenador WiFi
- Configuração Router
- 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…
De seguida executar o seguinte comando…
mww 0x400D300C 0x7F800
E de seguida…
mww 0x400D3008 0x0205
O resultado deve ser como na seguinte imagem…
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://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/