企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
* 导师**视频**讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> ## \*\* **协调器发送ZCL亮度调节命令** 调节亮度的API属于ZCL General命令,可以在zcl\_general.h中找到: ![](https://img.kancloud.cn/6c/ad/6cad706754db91c45e023cbe5d3b8aa9_832x274.png =600x) ### 首先我们在协调器的应用层初始化函数中启动一个周期性的事件: ![](https://img.kancloud.cn/a2/63/a263fe7fc4d9d690e4c033f28ff6f192_832x204.png =600x) ### 事件的处理如下: ![](https://img.kancloud.cn/e7/3c/e73c3dab0728a203ccf9f6401162a102_754x382.png =600x) ### 也就是最终会调用自定义函数:zclSampleLight\_LevelTest,函数内容: ``` 1.static void zclSampleLight_LevelTest(void)     2.{     3.    static uint8 seqNum = 0;     4.    static uint8 level = 254; 5.    // 寻址方式:广播   6.    afAddrType_t destAddr;     7.    destAddr.addrMode = afAddrBroadcast;     8.    destAddr.endPoint = SAMPLELIGHT_ENDPOINT;     9.    destAddr.addr.shortAddr = 0xFFFF;     10.  // 将亮度值广播出去   11.  zclGeneral_SendLevelControlMoveToLevelRequest(SAMPLELIGHT_ENDPOINT,   12.                                                  &destAddr,     13.                                            COMMAND_LEVEL_MOVE_TO_LEVEL,     14.                                            level,   // 亮度值   15.                                            10,    // 10个100ms完成亮度变化   16.                                            TRUE,      17.                                            seqNum++ );     18.         19.    // 显示亮度值   20.    HalLcdWriteStringValue("Set Level:", level, 10, 4);     21.         22.    // 调整亮度值   23.    if(level < 50) level = 254;     24.    else level -= 50;     25.} ``` ### 这个函数做了一个事件,把亮度值广播出去,如果终端设备加入到网络时,就会收到这个广播包,然后设置相应的亮度!同时协调器会把亮度值显示到显示屏上面!大家可能注意到亮度值是从1~254的,这是API的规定,设备在接收到这个数据后,是需要转换为1%~100%进行使用的! ### ## \*\* **仿真调试** 分别编译协调器和路由器的程序,然后分别烧录到两个开发板中;上电后可以看到协调器屏幕上显示广播出去的亮度值,注意:如果是采用调光灯(P1\_4),那么路由器在本章节实验中不使用屏幕,因为灯的GPIO是和屏幕复用的,会产生干扰;但是程序默认运行是P0\_4用做On/Off灯,因此没有影响。