This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LP-CC1352P7:如何将数据包从 Wi-Sun 路由器节点发送到边界路由器?

Guru**** 2439560 points
Other Parts Discussed in Thread: CC1352P7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1067591/lp-cc1352p7-how-to-send-packets-from-wi-sun-router-node-to-border-router

部件号:LP-CC1352P7
“线程”中讨论的其它部件:CC1352P7

您好 TI,

Wi-Sun 路由器节点是否可以主动向边界路由器发送数据包?

在研究了 SDK 中的示例后,我只找到了边界路由器使用自旋指令请求路由器节点发送数据的方式,但在物联网情形下,大多数传感器数据将自动向上行链路设备(网关和服务器)报告。 请告诉我 如何让路由器节点 主动向边界路由器发送数据包? 下面是否有任何参考示例。  

非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已有人被指派担任此职位,不久将返回给您并给出答案

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    对于 ns_node 示例,我们尚未实施命令以在 pyspinel 接口中发送数据。 (仅使用 ping 命令。)

    对于 CoAP 示例,您可以使用 CoAP 服务器更新数据。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    很高兴再次得到您的支持  

    我仍有一些关于我正在使用的 CoAP 示例的问题。

    对于 CoAP 示例,我知道边界路由器是 CoAP 客户端,所有路由器节点都是 CoAP 服务器,是吗?

    正如我所知,路由器节点在收到边界路由器的请求后将向边界路由器发送响应。 因此,这意味着在 CoAP 中,每个通信都由 CoAP 客户端(边界路由器)激活。

    CoAP 示例通过将 CoAP 命令从边界路由器发送到路由器节点(通过 pyspinel 接口)来实现此通信。 因此,如果我要更新 CoAP 服务器(路由器节点)的数据,我需要从边界路由器发送 CoAP 命令来请求它。

    现在,如果 我希望路由器节点(CoAP 服务器)可以主动报告数据,而不是要求边界路由器(CoAP 客户端)请求数据。我该怎么办?  

    上一次答复中,您提到了“对于 CoAP 示例,您可以使用 CoAP 服务器更新数据。”

    请您详细解释一下。 如何使路由器节点(CoAP 服务器)主动向边界路由器(CoAP 客户端)报告数据? 非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,凯西,

    是的,在这种情况下,RN 是 CoAP 服务器。  

    您可以使用 CoAP_service_request_send()发送数据更新。 您可以在文件 CoAP_server_api.h 中找到有关此 API 和其他几个有用 API 的文档

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    感谢您的回复,我在 coap_service_api.h 上找到了您提到的文档,并找到了 CoAP_service_request_send()定义。 此函数定义中有一些注释,如下所示:

    UINT16_t CoAP_service_request_send (INT8_t service_id,uint8_t 选项,const uint8_t destination_addr[static 16],uint16_t destination_port,SN_CoAP_UI_TY_E msg_type,SN_CoAP_msg_code_e_e_e_code,cong_code,conchar *
    SN_CoAP_content_format_e cont_type,const uint8_t * payload_ptr,uint16_t payload_len,coAP_service_respons_recv * request_response _cb)

    //TODO:CoAP_service_respons_recv 是一种丑陋的类型,应该重新考虑这一点+ SN_CoAP_HDR_s 不得暴露给 CoAP-service 的用户!
    //Callback 仍需要,但在哪里存储回叫?
    返回 CoAP_MESSAGE_handler_request_send (CoAP_service_handle,service_id,选项,destination_addr,destination_port, MSG_TYPE,MSG_CODE,URI,CONT_TYPE,PAYLOAD _PTR, payload_len,request_response _CB);
    }

    似乎此函数实现尚未完成,但我仍想尝试。 让我先尝试一下,然后 我会在稍后更新结果。 非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    功能实施已完成。

    我们将在下一个版本中删除此注释。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    我已经尝试使用 CoAP_service_request_send()将数据更新从路由器节点发送到边界路由器,它工作正常。 非常感谢。

    巴西

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    我可以再问一个 有关 CoAP_service_request_send()函数用法的问题吗?

    使用此函数后,我发现在使用 CoAP_service_request_send()将 CoAP 请求从外部节点发送到边界路由器之前,我必须 先将 CoAP POST / Get/Put 从边界路由器发送到路由器节点。  如果不是这样,我不能直接使用 CoAP_service_request_send()将数据从路由器节点发送到边界路由器,这是真的吗? 非常感谢。

    巴西

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    CoAP 服务的设置是为了使客户端(又称 BR)请求一些东西,然后服务器(又称 RN)会作出响应。

    如果您想避免这种情况,可以模拟 RN 设备上收到的 Get 消息,而不会实际通过无线方式发送此消息。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    感谢你的回复。 我明白了。   但我仍然对 使用的 CoAP_service_request_send()感到担忧

    此函数的完整定义为:

    UINT16_t  CoAP_service_request_send (INT8_t service_id,uint8_t 选项,const uint8_t destination_addr[static 16],uint16_t destination_port,sn_coAP_cont_type_e msg_type,sn_cap_code_type,sn_int_oc___接受,cap_cont__接受8)

    CoAP_service_request_send()函数有一些用于确定发送目的地的参数。 据我了解,如果我想成功地将数据从 RN 发送到 BR,我只需要确保  destination_addr  和  destination_port  都正确,否则无法成功发送。  但结果 是 ,无论我用什么 destination_addr 将数据从 RN 发送到 BR,发送都将成功。 只有当服务 ID 不正确时,发送才会失败。 请告诉我该服务 ID 的用途是什么  它是否对每个 RN 都是唯一的? destination_addr 使用的剂量是多少? 我在这里有点困惑。  非常感谢!

    巴西,

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    我们正在内部调查是否使用了所有这些参数。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    谢谢。 请告诉我一次有结果吗? 非常感谢。

    此致,

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

     CoAP_service_request_send()中的参数使用方式不同,具体取决于您的设备是用作 CoAP 服务器还是客户端。

    对于 ns_CoAP 应用程序,您正在运行 CoAP 服务器模式。 在这种情况下,服务 ID 是告知设备消息发送位置的参数。

    如果您使用来自充当 CoAP 客户端的 BR 的此 API,服务 ID 和目的地地址将告诉设备消息的发送位置。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    非常感谢您的回复。

    正如您所说的,如果我在路由器节点上运行 CoAP 服务器模式, 那么 CoAP_service_request_send()中的服务 ID  应该 是指  发送消息到的相应边界路由器,是吗? 如果我没有错,那么在一个 PAN 中只有一个边界路由器,因此在使用  CoAP_service_request_send()函数期间,同一个 PAN 中的每个路由器节点的服务 ID 应该相同,我对吗? 谢谢你。

    巴西,

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    抱歉,我误解了我的意思。 请忽略我之前的帖子。

    我会将 CoAP 节点作为客户端运行。 下面是必要的步骤。  

    1. 节点加入网络后,通过调用 API 注册 CoAP 服务。
      1. service_id = cap_service_initialize (interface_id,cap_port,0,NULL,NULL);
      2. CoAP_port 是默认的 CoAP 端口5683。
      3. 所有 CoAP API 都需要 service_id。
    2. 创建 CoAP_CLIENT_Response_recv 函数作为回调函数。
    3. 获取边界路由器的 IP 地址:root_unicast_addr
    4. 将消息发送到边界路由器
      1. coap_service_request_send (service_id,0,root_unicast_addr,coap_port,coap_MSG_type_non_Confirmable, cap_MSG_code_request_get,cap_ca_ca_URI,cap_ct_text_plain,&ca_state,sizeof (ca_state),               CoAP_CLIENT_respons_recv);
    5. 在边界路由器端(主机或 Linux),您需要启动 CoAP 服务器代码以等待相应的 URI 资源。
    6. 为了在不从 BR 请求的情况  下从 CoAP 节点发送消息,您可以从应用程序调用 CoAP_CLIENT_Response_recv 回调。  

    我们正在研究一个代码示例来说明这种行为。 如果您想查看代码片段,请给我发送一个 PM 或要求 Kien 向我发送一封电子邮件。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    感谢你的回复。  

    我想看到一个代码片段,请问您如何向您发送 PM?

    另外,很抱歉,在阅读了您的最新解释后,我变得更加困惑   

    根据示例项目 ,BR(边界路由器)是 CoAP 客户端,(RN)路由器节点是 CoAP 服务器,是吗?

    我正在使用示例项目“ns_coap_node_lP_CC1352P7_1_tirtos_ronicang”作为 RN 项目参考。

    在此项目代码中,有一个前面所述的流程,红色高光部分除外:

    1. 节点加入网络后,通过调用 API 注册 CoAP 服务。
      1. service_id = cap_service_initialize (interface_id,cap_port,0,NULL,NULL);
      2. CoAP_port 是默认的 CoAP 端口5683。
      3. 所有 CoAP API 都需要 service_id。
    2. 创建 CoAP_CLIENT_Response_recv 函数作为回调函数。
    3. 获取边界路由器的 IP 地址:root_unicast_addr
    4. 将消息发送到边界路由器
      1. coap_service_request_send (service_id,0,root_unicast_addr,coap_port,coap_MSG_type_non_Confirmable, cap_MSG_code_request_get,cap_ca_ca_URI,cap_ct_text_plain,&ca_state,sizeof (ca_state),               CoAP_CLIENT_respons_recv);

    我只添加 了 CoAP_service_request_send(......)函数,以将数据从 RN 发送到 BR,并且发送成功。

    我只想知道 service_id 和 root_unicast_addr 的用法。 因为  根单播地址是否正确无关紧要,或者只要服务 ID 在发送时保持相同的值且发送成功就不重要。 因此,似乎没有使用 root_unicast_addr。 如果没有使用 root_unicast_addr,那么发送函数如何知道目的地,我很困惑?

    我的问题是,在使用 CoAP_service_request_send()时,我想让 RN 先在没有 BR 请求的情况下向 BR 发送消息。 目前,如果我要使用  CoAP_service_request_send()向 BR 发送消息,我需要先从 BR 向 RN 发送 CoAP 请求。

    上次你说:“

    CoAP 服务的设置是为了使客户端(又称 BR)请求一些东西,然后服务器(又称 RN)会作出响应。

    如果您想避免这种情况,可以模拟 RN 设备上收到的 Get 消息,而不会实际通过无线方式发送此消息。

    ”我不知道如何模拟 RN 设备上收到的 GET 消息。 所以我被困在这里,想知道  CoAP_service_request_send()的每一个细节。

    但现在您的最新回复说,我可以让 RN 作为 CoAP 客户端,BR 路由器作为 CoAP 服务器吗? 它与示例项目有很大不同。 BR 和 RN 角色相互交换。 我可以用一个示例代码来交换这两个角色吗? 或者你说“我们正在研究一个代码示例来说明这种行为。”这个代码是否已经包括了所有答案? 非常感谢!

    此致,

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好凯西,

    您可以在 E2E 上向我发送朋友请求,然后您可以向我发送 PM。 或者,您可以要求 Kien 向我发送一封电子邮件。

    谢谢,

    玛丽·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    谢谢。 让我先尝试一下 PM,我已经向您发送了朋友请求。 谢谢你。

    此致,

    凯西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marie,您好!

    我还需要这些代码,用于从我的 CC1352R1启动板将传感器读数上传到 Wi-sun 边界路由器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何列出 TI Wi-Sun 堆栈中定义的所有函数?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    蒂姆,你好。

    我们正在制定一种格式来发布此示例代码。

    要列出我想您可以浏览所有头文件的所有函数吗? 我不确定我是否理解您为什么要列出所有函数。

    如果您正在专门查找 CoAP 函数,请访问 coap_service_api.h (C:\ti\simplelink_cc13xx_cc26xx_SDK_5_40_00_40\sources\thirthe_parts\mbed\nanostack\CoAP-service\CoAP-service)。

    谢谢,

    玛丽·H