新版本的ZIGBEE的MCU Sdk的使用问题1

Post Reply
zoule@venztech.com
Posts: 93

使用的模组是ZTU 通用MCU对接
有几个疑问:
模组在初次上电后,在接到模组的串口时,mcu发送串口给模组,模组是可以收到 并且回复的。
但是在模组进入低功耗模式后,mcu主动拉高/拉低模组的引脚,使其进入了 低功耗模式。
此时,唤醒后,此时mcu主动拉高/拉低模组的引脚 并且延迟了15ms . mcu 再次发送,就没收到串口的回复了。

问题来了:
1.怎么确保,模组是唤醒的?如何快速调试?

其次是问题2

  1. 为什么在sdk内部,发送串口给模组,还分好几个类型?
    如:
    typedef enum {
    DP_SEND_TYPE_NOT_SEND, // not send : when mcu receives broadcast dp msg (uart command id: 0x2a), it doesn't need to respond.
    DP_SEND_TYPE_RESPOND, // respond dp msg (uart command id: 0x05) : when mcu receives dp msg (uart command id: 0x04), it needs to respond to zigbee module.
    DP_SEND_TYPE_REPORT_LINKAGE, // report dp msg with linkage trigger (uart command id: 0x06) :
    DP_SEND_TYPE_REPORT_NOT_LINKAGE, // report dp msg without linkage trigger (uart command id: 0x2c) :
    DP_SEND_TYPE_SEND_BROADCAST, // send dp msg broadcast (uart command id: 0x27) :
    DP_SEND_TYPE_SEND_GROUP, // send dp msg to group (uart command id: 0x43) :
    } DP_SEND_TYPE_E;

这个枚举变量是为了区分啥?

当系统打印 DP_SEND_TYPE_NOT_SEND PRINT_DEBUG("[OK] dp msg not send.\r\n"); 时,
代表串口消息没有发送出去吗?

当这个枚举变量是 DP_SEND_TYPE_RESPOND 是,
是代表发送时需要回应的意思?
那在什么地方进行修改呢??

不好意思,这个是新版的sdk, 您可以详细解释一下吗?

问题3:
很多函数需要自己实现,
这些需要自己实现的还得一个一个查找,下载sdk下来花费时间挺长的。 (有些不需要写空的也行)。

建议,只是给个建议哈,需要自己实现了函数,给个提示或者是#error的提示。
然后再函数内部简单说明一下,不然用户自己去理解,理解不了,还得进一步找你们把问题解决一下,
望采纳!!!谢谢你!!!

zoule@venztech.com
Posts: 93

Re: 新版本的ZIGBEE的MCU Sdk的使用问题1

希望来个大佬 回复一下问题,可以吗

zoule@venztech.com
Posts: 93

Re: 新版本的ZIGBEE的MCU Sdk的使用问题1

感谢 感谢,大佬膜拜膜拜

User avatar
心_远
Posts: 20

Re: 新版本的ZIGBEE的MCU Sdk的使用问题1

1.模组的唤醒管脚是通过拉低唤醒的,也就是说 MCU 端没有数据要发送的时候应该保持该管脚高电平,当有数据要发送时先拉低 10ms 再发送数据,发送数据期间保持低电平,发完数据之后恢复拉高。

2.这个变量当前是SDK内部使用的,正常情况下开发者不需要关心,这里做一下解释,

MCU SDK 在收到模组发来的 DP 时,对是否需要应答 DP (被动上报),进行了打包处理:

如果是通过组播命令接收DP(0x2A), 则 SDK 不应答 DP,对应的处理方式是 DP_SEND_TYPE_NOT_SEND ;
如果是通过单播命令接收DP(0x04), 则 SDK 会应答 DP,对应的处理方式是 DP_SEND_TYPE_RESPOND;

MCU 应用层主动发送 DP 时(例如检测到温湿度变化),根据需要可以调用不同接口发送,模组在收到之后会做出不同的处理:

当MCU上报 DP 给网关只是为了同步状态,不需要产生联动(例如设备上电), 则对应DP_SEND_TYPE_REPORT_NOT_LINKAGE;
当MCU需要上报 DP 给网关,且需要产生联动,会采用 DP_SEND_TYPE_REPORT_LINKAGE;
当MCU需要在本地广播 DP,会采用 DP_SEND_TYPE_SEND_BROADCAST;
当MCU需要在本地组播 DP,会采用 DP_SEND_TYPE_SEND_GROUP

SDK 提供了不同的发送接口,开发者只需要调用对应发送接口即可,无需自己修改此变量值。

3.MCU 开发者需要自己实现的函数主要有相关 DP 的处理函数,函数接口已实现,需要实现函数体部分,如果某个产品的 DP 数量越多,需要实现的 DP 处理函数越多。

SDK 在不断的维护,感谢您的建议,我们会在后续的版本中不断完善。

zoule@venztech.com
Posts: 93

Re: 新版本的ZIGBEE的MCU Sdk的使用问题1

感谢你的回复 ~~~
对于zigbee设备的重置配网,我在按键长按后的逻辑下,添加了
void mcu_tx_let_zigbee_reset(void)//模组软件复位
{
unsigned short payload_len = 0;
uart_framing_fill_payload_byte(&payload_len, 0x00);
uart_framing_fill_protocol_field(UART_CMD_RESET_OR_JOIN, payload_len, NULL);
uart_send_frame(payload_len);
}
void mcu_tx_let_zigbee_start_join(void)//模组开始配网(先断开与网关的通信,再配网)
{
unsigned short payload_len = 0;
uart_framing_fill_payload_byte(&payload_len, 0x01);
uart_framing_fill_protocol_field(UART_CMD_RESET_OR_JOIN, payload_len, NULL);
uart_send_frame(payload_len);
}
这个两个函数的代码,但是,似乎没看到加入到zigbee网关,
我尝试了多次,但是依旧没有效果,我怀疑是模组没收到我发的重置消息,
在这里,我应该如何判断呢?

User avatar
心_远
Posts: 20

Re: 新版本的ZIGBEE的MCU Sdk的使用问题1

可以在 MCU 与 模组的通信口 RX 、 TX 上,引出线接串口助手或逻辑分析仪,来监听 MCU 与 模组的通信过程,从而确认 MCU 与 模组通信是否正常。

另外,模组配网需要在网关侧打开配网,子设备才能加入网关,请确认是否已打开了网关配网。涂鸦网关可以通过 APP 进入网关页面,选择添加设备,网关的配网指示灯开始闪烁表示网关打开了配网,允许子设备加入。

Post Reply