Primeiros passos com a casa conectada por IP (CHIP)

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çãoTipo de dispositivo e selecione a placa para a criação.

35343b20891ccdfd.png

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çãoModo rendezvous e defina o modo como Desvio:

9db9116fda290c03.png

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 componenteCamada do dispositivo CHIPOpçõ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

60b3fe446c502711.png

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.

b8b3b97d230997e0.png

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:

2bc30b2e82b22153.png

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:

8f9ab6a82f525248.png

Na placa M5Stack, o comando acima acionará um LED verde virtual no canto superior esquerdo da tela:

8067715c8175fee9.png

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.