Wang Qixiang c8361b5bba ESP32: Update esp-idf to v5.1.1 release (#28980) il y a 2 ans
..
main 458ed85452 Bump "Bridged Device Basic Information" cluster revision to 2 (#28951) il y a 2 ans
third_party 1ef04431a1 ESP32: Add bridge app example to ESP32 (#8368) il y a 4 ans
.gitignore 4f75167f56 Add esp32 flash script generation on more apps, update example_build (#8813) il y a 4 ans
CMakeLists.txt 67324e6f59 Update various bits to c++17 and gnu++17. (#28280) il y a 2 ans
README.md a04bfc35a6 Replace CHIP by Matter in bridge apps README (#26936) il y a 2 ans
partitions.csv c96ffaaa50 add nvs size to 48k bytes for matter 1.1 (#28353) il y a 2 ans
sdkconfig.defaults c8361b5bba ESP32: Update esp-idf to v5.1.1 release (#28980) il y a 2 ans

README.md

Matter ESP32 Bridge App Example

Please setup ESP-IDF and Matter Environment and refer building and commissioning guides to get started.



Introduction

A prototype application that demonstrates dynamic endpoint with device commissioning and cluster control. It adds the non-chip device as endpoints on a bridge(Matter device). In this example four light devices supporting on-off cluster have been added as endpoints

  1. Light1 at endpoint 3
  2. Light2 at endpoint 7
  3. Light3 at endpoint 5
  4. Light4 at endpoint 6

Dynamic Endpoints

The Bridge Example makes use of Dynamic Endpoints. Current SDK support is limited for dynamic endpoints, since endpoints are typically defined (along with the clusters and attributes they contain) in a .zap file which then generates code and static structures to define the endpoints.

To support endpoints that are not statically defined, the ZCL attribute storage mechanisms will hold additional endpoint information for NUM_DYNAMIC_ENDPOINTS additional endpoints. These additional endpoint structures must be defined by the application and can change at runtime.

To facilitate the creation of these endpoint structures, several macros are defined:

DECLARE_DYNAMIC_ATTRIBUTE_LIST_BEGIN(attrListName) DECLARE_DYNAMIC_ATTRIBUTE(attId, attType, attSizeBytes, attrMask) DECLARE_DYNAMIC_ATTRIBUTE_LIST_END(clusterRevision)

  • These three macros are used to declare a list of attributes for use within a cluster. The declaration must begin with the DECLARE_DYNAMIC_ATTRIBUTE_LIST_BEGIN macro which will define the name of the allocated attribute structure. Each attribute is then added by the DECLARE_DYNAMIC_ATTRIBUTE macro. Finally, DECLARE_DYNAMIC_ATTRIBUTE_LIST_END macro should be used to close the definition.

  • All attributes defined with these macros will be configured as ATTRIBUTE_MASK_EXTERNAL_STORAGE in the ZCL database and therefore will rely on the application to maintain storage for the attribute. Consequently, reads or writes to these attributes must be handled within the application by the emberAfExternalAttributeWriteCallback and emberAfExternalAttributeReadCallback functions. See the bridge application's main.cpp for an example of this implementation.

DECLARE_DYNAMIC_CLUSTER_LIST_BEGIN(clusterListName) DECLARE_DYNAMIC_CLUSTER(clusterId, clusterAttrs, incomingCommands, outgoingCommands) DECLARE_DYNAMIC_CLUSTER_LIST_END

  • These three macros are used to declare a list of clusters for use within a endpoint. The declaration must begin with the DECLARE_DYNAMIC_CLUSTER_LIST_BEGIN macro which will define the name of the allocated cluster structure. Each cluster is then added by the DECLARE_DYNAMIC_CLUSTER macro referencing attribute list previously defined by the DECLARE_DYNAMIC_ATTRIBUTE... macros and the lists of incoming/outgoing commands terminated by kInvalidCommandId (or nullptr if there aren't any commands in the list). Finally, DECLARE_DYNAMIC_CLUSTER_LIST_END macro should be used to close the definition.

DECLARE_DYNAMIC_ENDPOINT(endpointName, clusterList)

  • This macro is used to declare an endpoint and its associated cluster list, which must be previously defined by the DECLARE_DYNAMIC_CLUSTER... macros.

Cluster control

onoff

To use the Client to send Matter commands, run the built executable and pass it the target cluster name, the target command name as well as an endpoint id.

$ ./out/debug/chip-tool onoff on <NODE ID> <ENDPOINT>

The client will send a single command packet and then exit.