1. Introdução
O Matter é um novo padrão da Connectivity Standards Alliance (antiga Zigbee Alliance). Esse padrão unificador do setor é uma promessa de conectividade segura e confiável: um selo de aprovação que garante que os dispositivos sempre funcionem de forma integrada
O objetivo desse padrão é simplificar o desenvolvimento para os fabricantes e aumentar a compatibilidade para os consumidores. Ele está sendo desenvolvido ativamente no GitHub, no projeto Casa conectada por IP, construído para que os dispositivos de casa inteligente sejam seguros, confiáveis e fáceis de usar. Com base no protocolo de Internet (IP, na sigla em inglês), o projeto visa permitir a comunicação entre dispositivos de casa inteligente, apps para dispositivos móveis e serviços em nuvem, além de definir um conjunto específico de tecnologias de rede baseadas em IP para a certificação de dispositivos.
Exceto quando indicado o contrário, o conteúdo deste codelab é licenciado de acordo com a
Licença Apache 2.0. Para mais informações, consulte a licença de código aberto CHIP do projeto.
Neste codelab, você aprenderá a configurar um dispositivo Wi-Fi usando a placa de desenvolvimento ESP32, adicionar recursos de ativação/desativação e controlá-lo com uma interface de linha de comando.
O que você aprenderá
- Como conectar e controlar um dispositivo compatível com CHIP.
- Como adicionar mais funcionalidades a um exemplo de app de dispositivo.
Pré-requisitos
- Conhecimento básico do Linux
- Uma placa de desenvolvimento ESP32
- Uma máquina Linux com o Git instalado
2. Primeiros passos
Terminais de porta serial
Você precisa saber se conectar a uma porta serial usando um terminal. Este codelab usa screen
e apresenta uma visão geral do uso, mas é possível usar qualquer outro software de terminal.
Máquina Linux
Este codelab foi criado para máquinas Linux de 64 bits com x86 com a ferramenta chip, além de atualizar todas as placas de desenvolvimento. Todas as etapas foram testadas no Ubuntu 20.04.2.0 LTS.
Placa de desenvolvimento ESP32
Este codelab usa uma destas placas de desenvolvimento do ESP32:
- ESP32-DevkitC
- ESP32-WROVER-KIT V4.1
- Kit básico de desenvolvimento do núcleo da Internet das Coisas (IoT) da série M5Stack ESP32
Você precisará conectar o kit de desenvolvimento à sua máquina Linux usando um cabo USB para atualizar o firmware e acessar os registros do dispositivo.
3. Clonar o repositório
Para verificar a versão do código-fonte compatível com este documento, siga estas etapas para clonar o repositório:
$ git clone git@github.com:project-chip/connectedhomeip.git $ cd connectedhomeip $ git checkout 1de2b73bb4123af5f184eac54d1b1d76985b4f62 $ git submodule update --init
Em seguida, siga as etapas nas seções "Pré-requisitos" e "Preparação de criação" da documentação de criação no GitHub da sua plataforma. Quando terminar, continue lendo este documento.
Aplicar o patch para o codelab
Com esse patch, removeremos o callback para processar o comando ativar/desativar do CHIP. Mais adiante, veremos o passo a passo para fazer isso e adicionar de volta.
$ git fetch origin ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96 $ git cherry-pick ce1e0ab44c367bc9d5907115e09a4c45fc6d8c96
4. Criar o exemplo de cliente CHIP
Para falar com os dispositivos CHIP na máquina host, crie chip-tool
para o host.
Siga as instruções do GitHub para criar chip-tool
.
Depois, o chip-tool
será usado para executar operações como ativar e desativar os endpoints do dispositivo.
Consulte a documentação e o código-fonte de chip-tool
no GitHub para saber mais sobre as diferentes operações de chip-tool
.
5. Criar o exemplo de todos os clusters
Depois de configurar o host e criar chip-tool
, crie e execute o exemplo "Todos os clusters" do ESP32.
Primeiro, use o diretório "Exemplo de todos os clusters".
$ cd examples/all-clusters-app/esp32
Depois, siga as instruções no GitHub até aparecer uma solicitação para executar este comando:
$ idf make menuconfig
Ao executar esse comando, aparecerá o editor de configuração do exemplo.
Configurar o tipo de placa
Navegue até Demonstração → Tipo de dispositivo e selecione a placa para a criação.
Desativar o modo rendezvous
Desative o modo rendezvous para permitir que o dispositivo se comunique com chip-tool
por um canal não seguro. No menu de configuração, navegue até Demonstração → Modo rendezvous e defina o modo como Desvio:
Configurar o SSID (Identificador do conjunto de serviços) e a senha do Wi-Fi
No menu de configuração, navegue até Configuração do componente → Camada do dispositivo CHIP → Opções da estação Wi-Fi. Depois, defina essas duas opções para a rede Wi-Fi:
- SSID padrão do Wi-Fi
- Senha padrão do Wi-Fi
Criar e atualizar
Depois de concluir a configuração, crie e atualize o app de exemplo.
Substitua "USB0
" abaixo pelo TTD (Dispositivo de telecomunicações para o surdo) anexado à placa de desenvolvimento. Se você tiver mais de um cabo serial conectado à máquina host, ele poderá ter um TTD diferente (por exemplo, /dev/ttyUSB1
ou /dev/ttyUSB2
). Continue fazendo essa substituição sempre que USB0
aparecer neste documento.
$ idf make $ idf make erase_flash ESPPORT=/dev/ttyUSB0 $ idf make flash ESPPORT=/dev/ttyUSB0
As etapas acima também estão disponíveis no arquivo README de exemplo de todos os clusters CHIP.
6. Ativar o comando ativar/desativar
Em qualquer editor, abra DeviceCallbacks.cpp
, em examples/all-clusters-app/esp32/main
. Depois de abrir o editor, navegue até a função "DeviceCallbacks::PostAttributeChangeCallback()
".
Ao enviar um comando para ativar/desativar chip-tool
, o dispositivo receberá eventos ZCL_ON_OFF_CLUSTER_ID. Para gerenciá-los, nós adicionamos esses eventos ao callback do que processa diferentes clusterID
.
void DeviceCallbacks::PostAttributeChangeCallback(...) { ... switch (clusterId) { case ZCL_ON_OFF_CLUSTER_ID: break; default: ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId); break; } ... }
Cada cluster é compatível com vários atributos. Vamos oferecer uma funcionalidade simples de ativação e desativação. Portanto, verifique attributeId
de ZCL_ON_OFF_ATTRIBUTE_ID no código. Esse campo precisa estar vazio.
void DeviceCallbacks::PostAttributeChangeCallback(...) { ... switch (clusterId) { case ZCL_ON_OFF_CLUSTER_ID: if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) { } else { ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId); } break; default: ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId); break; } ... }
Se estiver tudo certo com clusterId
e attributeId
, adicione a chamada de função para controlar o status do LED no kit de desenvolvimento.
void DeviceCallbacks::PostAttributeChangeCallback(...) { ... switch (clusterId) { case ZCL_ON_OFF_CLUSTER_ID: if (attributeId == ZCL_ON_OFF_ATTRIBUTE_ID) { statusLED1.Set(*value); } else { ESP_LOGI(TAG, "Unhandled attribute ID: %d", attributeId); } break; default: ESP_LOGI(TAG, "Unhandled cluster ID: %d", clusterId); break; } ... }
Salve o arquivo, crie o app e atualize o kit de desenvolvimento novamente. Para isso, faça o mesmo processo da etapa anterior, Criar e atualizar:
$ idf make $ idf make erase_flash ESPPORT=/dev/ttyUSB0 $ idf make flash ESPPORT=/dev/ttyUSB0
7. Executar o aplicativo de exemplo
Conecte o cabo USB da placa ESP32 à máquina host e inicie um terminal serial. Recomendamos usar screen
. Para ver a saída serial do ESP32, execute este comando:
$ screen /dev/ttyUSB0 115200
Depois que o dispositivo for inicializado e se conectar ao Wi-Fi, o endereço IP dele será exibido no console serial. Você precisará dele para interagir com o dispositivo usando chip-tool
.
No caso acima, o endereço IP é 192.168.117.134 e o dispositivo escuta a porta 11097.
Ignore a etapa de pareamento e use o endereço IP e a porta para criar uma conexão com o dispositivo:
$ cd examples/chip-tool $ ./out/debug/chip-tool pairing bypass 192.168.117.134 11097
Agora, é possível alternar o endpoint 1 com o seguinte comando:
$ ./out/debug/chip-tool onoff toggle 1
No DevKitC do ESP32, o sinal do GPIO2 será alternado:
Na imagem acima, um LED vermelho de 1,8 V/20 mA está conectado a GPIO2, com uma resistência de 75 Ohm em série.
No ESP32-WROVER-KIT, o comando acima acionará um LED verde virtual no canto superior esquerdo da tela:
Na placa M5Stack, o comando acima acionará um LED verde virtual no canto superior esquerdo da tela:
8. Parabéns
Você conseguiu controlar o kit de desenvolvimento usando o CHIP. Ótimo!
Neste codelab, você aprendeu a:
- ligar a funcionalidade ativar/desativar no kit de desenvolvimento;
- controlar o kit de desenvolvimento usando a ferramenta CHIP.
Saiba mais
Veja algumas ideias que você pode implementar para ir mais a fundo:
- Edite o arquivo ZAP para expandir as opções da funcionalidade.
- Adicione a funcionalidade ZCL_IDENTIFY_CLUSTER_ID ao arquivo
DeviceCallbacks.cpp
- A especificação define a ZigBee Cluster Library.
- Confira o GitHub para saber as novidades sobre o projeto CHIP e buildwithmatter.com para saber mais sobre o Matter.