[Deprecated] Existe uma V2 deste projeto aqui.
O CC2538 + CC2592 é o coordenador ZigBee mais poderoso 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 flashar, configurar e construir um Router com antena externa, ou um Coordenador com antena externa para utilizar com ligação USB ou ligação WiFi ao hardware onde está instalado o Home Assistant.
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.
Desde já obrigado ao @Maddoctor pela ajuda a configurar o Raspberry Pi e nos comandos necessários para flashar o CC2538.
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
- Flashar o firmware Coordenador no CC2538
- Configuração USB
- Configuração WiFi
- Flashar o firmware Router no CC2538
- Flashar ou atualizar um firmware no CC2538 através do Windows
- Exemplo do resultado final
- Bibliografia
1. Material necessário
Necessitamos de um Raspberry Pi, cartão de memória, fios para ligações, ferro de soldar 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
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 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 como se pode ver pelo esquema da seguinte imagem.
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. Flashar o firmware Coordenador no 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, tem que ser feita uma ligação entre o PA07
e o GND
do CC2538.
Para flashar o CC2538 como coordenador vamos utilizar o Raspberry Pi que temos estado a utilizar e um Wemos D1 Mini a servir de FTDI.
Podemos fazer estas ligações para ficarem definitivas, visto que no final a utilização do CC2538 como coordenador vai ser em conjunto com um Wemos, quer seja para ser utilizado com ligação USB ou WiFi ao hardware onde temos instalado o Home Assistant.
Esquema das ligações entre o CC2538 e o Wemos:
Com as ligações feitas, ligar um cabo micro USB no Wemos e a uma das portas USB do Pi. De seguida iniciar o Pi, aceder por SSH e utilizar os seguintes comandos.
cd ~
sudo apt-get install python3 python3-pip git
git clone https://github.com/JelmerT/cc2538-bsl.git
cd cc2538-bsl
sudo pip3 install pyserial intelhex
wget https://github.com/jethome-ru/zigbee-firmware/raw/master/ti/coordinator/cc2538_cc2592/JH_2538_2592_ZNP_UART_20201010.hex
Para verificar que temos comunicação entre o Wemos e o CC utilizar o seguinte comando:
sudo python3 cc2538-bsl.py -p /dev/ttyUSB0
O resultado que devem ter é o da imagem seguinte.
Para flashar o CC2538 utilizar o seguinte comando:
sudo python3 cc2538-bsl.py -e -w -v -p /dev/ttyUSB0 -w JH_2538_2592_ZNP_UART_20201010.hex
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ó seguir estes últimos passos, mas de agora em diante no CC2538 devem fazer a ligação entre o PA07 e o GND que está no esquema anterior.
Depois de flashado, retirar essa ligação para utilizar o CC normalmente.
6. Configuração 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.
O esquema das ligações para utilizar com ligação USB é o seguinte:
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.
7. Configuração WiFi
Podemos utilizar o CC2538 + Wemos para comunicar com o hardware onde temos instalado o Home Assistant, através do WiFi do Wemos.
O esquema das ligações para utilizar com o WiFi do Wemos é o seguinte:
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.
8. Flashar o firmware Router no 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, tem que ser feita uma ligação entre o PA07
e o GND
do CC2538.
Para flashar o CC2538 como Router vamos utilizar o Raspberry Pi que temos estado a utilizar e um Wemos D1 Mini a servir de FTDI.
Esquema das ligações entre o CC2538 e o Wemos:
Com as ligações feitas, ligar um cabo micro USB entre o Wemos e uma das portas USB do Raspberry. De seguida iniciar o Pi, aceder por SSH e utilizar os seguintes comandos.
cd ~
sudo apt-get install python3 python3-pip git
git clone https://github.com/JelmerT/cc2538-bsl.git
cd cc2538-bsl
sudo pip3 install pyserial intelhex
wget https://github.com/jethome-ru/zigbee-firmware/raw/master/ti/router/cc2538_cc2592/jh_2538_router_20200522.hex
Para verificar que temos comunicação entre o Wemos e o CC utilizar o seguinte comando:
sudo python3 cc2538-bsl.py -p /dev/ttyUSB0
O resultado que devem ter é o da imagem seguinte.
Para flashar o CC utilizar o seguinte comando:
sudo python3 cc2538-bsl.py -e -w -v -p /dev/ttyUSB0 -w jh_2538_router_20200522.hex
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ó seguir estes últimos passos, mas de agora em diante no CC2538 devem fazer uma ligação entre o PA07
e o GND
que está no esquema anterior.
Depois de flashado retirar essa ligação para utilizar o CC2538 normalmente.
Para utilizarmos o CC como Router não necessitamos do Wemos, só é necessário alimentar o CC2538 com 3.3V, mas podemos manter o Wemos para alimentar o CC2538 a partir de um cabo USB e no futuro atualizar o firmware através do Wemos ou passar a utiliza-lo como Coordenador.
Neste momento, quando alimentarem o CC2538, se forem ao Addon Zigbee2MQTT pesquisar por novos dispositivos, este vai ser detetado e pode ser emparelhado na rede ZigBee como Router.
9. Flashar ou atualizar um firmware no CC2538 através do Windows
Este método pode ser utilizado para flashar o firmware no CC2538 logo após ser feito o desbloqueio do bootloader, ou para no futuro fazer atualização do firmware sem necessitar do Raspberry Pi.
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, tem que ser feita uma ligação entre o PA07 e o GND do CC2538.
Para flashar o CC2538 como coordenador ou router através do Windows, vamos utilizar o Wemos D1 Mini a servir de FTDI.
Caso ainda não tenham feito as ligações entre o CC2538 e o Wemos D1 Mini, podem utilizar o seguinte esquema de ligações.
Podemos fazer estas ligações para ficarem definitivas, visto que no final a utilização do CC2538 como coordenador vai ser em conjunto com um Wemos, quer seja para ser utilizado com ligação USB ou WiFi ao hardware onde temos instalado o Home Assistant.
Caso já tenham feito estas ligações e só pretendam atualizar o CC2538, só é necessário fazer a ligação entre o PA07 e o GND.
Com as ligações feitas, 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.
Copiar para esta pasta o ficheiro JH_2538_2592_ZNP_UART_20201010.bin
ou a versão UART com extensão .bin
mais recente, do seguinte link.
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.
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 mais recente do ficheiro, caso exista, 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ó seguir estes últimos passos, mas de agora em diante no CC2538 devem fazer a ligação entre o PA07
e o GND
que está no esquema anterior.
Depois de flashado, retirar essa ligação para utilizar o CC normalmente.
10. Exemplo do resultado final
De seguida umas imagens do resultado final do meu CC2538.
Está a ser utilizado com ligação WiFi ao hardware onde tenho o Home Assistant.
Caso queiram imprimir esta caixa, podem fazer download do Thingiverse.
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/