wakojosin 发表于 2024-5-18 00:30

matter设备--为light_bulb添加温湿度endpoint

<p><span style="font-size:18px;"><strong>准备</strong></span></p>

<p>由于matter使用zap对endpoint/cluster等进行添加/编辑/删除等操作,所以需要安装zap工具.</p>

<p>zap工具必须版本一直,可以通过&lt;ncs目录&gt;modules/lib/matter/scripts/setup/nrfconnect/get_zap.py来安装,命令如下:</p>

<pre>
<code>cd &lt;ncs&gt;/modules/lib/matter
python scripts/setup/nrfconnect/get_zap.py -l ~/Programs/ -o</code></pre>

<p>~/Programs/是指定的安装目录.</p>

<p>&lt;ncs&gt;表示ncs安装目录.</p>

<p>&nbsp;</p>

<p><span style="font-size:18px;"><strong>配置</strong></span></p>

<p>命令格式如下:</p>

<pre>
<code>zap src/light_bulb.zap --zcl &lt;ncs&gt;/modules/lib/matter/src/app/zap-templates/zcl/zcl.json --gen &lt;ncs&gt;/modules/lib/matter/src/app/zap-templates/app-templates.json</code></pre>

<p>需要注意的是zcl.json和app-tamplates.json文件不可以拷贝到其他地方,我是了会报错,拷贝之后可能需要修改里面的内容.</p>

<p>然后会出现配置界面如下:</p>

<p> &nbsp;</p>

<p>我已经添加了endpoint-2,endpoint添加是使用+ADD POINT按钮,点了之后会出现以下界面:</p>

<p> &nbsp;</p>

<p>device可以下拉进行选择,选和是自己的就行.</p>

<p>温湿度传感器endpoint的内容如下:</p>

<p> &nbsp;</p>

<p>通过过滤器只显示使能的cluster后就是上面的界面.</p>

<p>根据实际情况进行属性,命令等设置.</p>

<p>完成后保存退出即可.</p>

<p>&nbsp;</p>

<p><span style="font-size:18px;"><strong>生成源码</strong></span></p>

<p>使用以下命令进行代码生成</p>

<pre>
<code>python &lt;ncs&gt;/modules/lib/matter/scripts/tools/zap/generate.py &lt;工程目录&gt;/src/light_bulb.zap -t &lt;ncs&gt;/modules/lib/matter/src/app/zap-templates/app-templates.json -o &lt;工程目录&gt;/src/zap-generated</code></pre>

<p>工程目录和ncs推荐使用绝对路径.</p>

<p>如果出现&#39;Exception: Could not find a suitable clang-format&#39;提示,可以通过apt安装clang-format进行解决.</p>

<p>&nbsp;</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>&nbsp;</p>

<p>至此设备端的修改完成.</p>
页: [1]
查看完整版本: matter设备--为light_bulb添加温湿度endpoint