matter设备--为light_bulb添加温湿度endpoint
<p><span style="font-size:18px;"><strong>准备</strong></span></p><p>由于matter使用zap对endpoint/cluster等进行添加/编辑/删除等操作,所以需要安装zap工具.</p>
<p>zap工具必须版本一直,可以通过<ncs目录>modules/lib/matter/scripts/setup/nrfconnect/get_zap.py来安装,命令如下:</p>
<pre>
<code>cd <ncs>/modules/lib/matter
python scripts/setup/nrfconnect/get_zap.py -l ~/Programs/ -o</code></pre>
<p>~/Programs/是指定的安装目录.</p>
<p><ncs>表示ncs安装目录.</p>
<p> </p>
<p><span style="font-size:18px;"><strong>配置</strong></span></p>
<p>命令格式如下:</p>
<pre>
<code>zap src/light_bulb.zap --zcl <ncs>/modules/lib/matter/src/app/zap-templates/zcl/zcl.json --gen <ncs>/modules/lib/matter/src/app/zap-templates/app-templates.json</code></pre>
<p>需要注意的是zcl.json和app-tamplates.json文件不可以拷贝到其他地方,我是了会报错,拷贝之后可能需要修改里面的内容.</p>
<p>然后会出现配置界面如下:</p>
<p> </p>
<p>我已经添加了endpoint-2,endpoint添加是使用+ADD POINT按钮,点了之后会出现以下界面:</p>
<p> </p>
<p>device可以下拉进行选择,选和是自己的就行.</p>
<p>温湿度传感器endpoint的内容如下:</p>
<p> </p>
<p>通过过滤器只显示使能的cluster后就是上面的界面.</p>
<p>根据实际情况进行属性,命令等设置.</p>
<p>完成后保存退出即可.</p>
<p> </p>
<p><span style="font-size:18px;"><strong>生成源码</strong></span></p>
<p>使用以下命令进行代码生成</p>
<pre>
<code>python <ncs>/modules/lib/matter/scripts/tools/zap/generate.py <工程目录>/src/light_bulb.zap -t <ncs>/modules/lib/matter/src/app/zap-templates/app-templates.json -o <工程目录>/src/zap-generated</code></pre>
<p>工程目录和ncs推荐使用绝对路径.</p>
<p>如果出现'Exception: Could not find a suitable clang-format'提示,可以通过apt安装clang-format进行解决.</p>
<p> </p>
<p><span style="font-size:18px;"><strong>修改</strong></span></p>
<p>源码生成之后,需要修改app_task.cpp中的以下函数:</p>
<p>void AppTask::UpdateClustersState();</p>
<p>void AppTask::UpdateTemperatureClusterState();</p>
<p>void AppTask::UpdatePressureClusterState();</p>
<p>void AppTask::UpdateRelativeHumidityClusterState();</p>
<p>温湿度传感器默认设备是bme680,根据实际情况添加驱动然后修改源码</p>
<p><strong>UpdateClustersState</strong>中修改对传感器进行采集部分.源码如下:</p>
<p>const int result = sensor_sample_fetch(sBme688SensorDev);</p>
<p><strong>UpdateTemperatureClusterState</strong>中对数据行进转换,合规检测等,然后通过</p>
<p>Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Set(kTemperatureMeasurementEndpointId, newValue);</p>
<p>进行数据的提交.</p>
<p>UpdatePressureClusterState和UpdateRelativeHumidityClusterState也是类似.</p>
<p>可以根据实际情况进行删减.</p>
<p> </p>
<p>至此设备端的修改完成.</p>
页:
[1]