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:LP-CC1352P7 CoAP 服务器

Guru**** 2392905 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/1217409/lp-cc1352p7-lp-cc1352p7-coap-server

器件型号:LP-CC1352P7
主题中讨论的其他器件:CC1352P7

您好!

我使用 LP-CC1352p7-1进行 BR 和 RN 之间的风扇通信。 我运行的是 ns_coap_node_src_LP_CC1352P7_1_tirtos7_ticlang 示例。 我能够在 BR 和 RN 之间进行通信。 现在、我想将网络管理数据发送到其他某个 IP 和端口。 为此、我想使用基于 IP/端口的用户可配置/config 文件创建一个 CoAP 服务器。 能否获得一些示例来说明如何使用当前正在运行的 CoAP 服务器创建另一个 CoAP 服务器目录。

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

    Ranjit、您好!

    为什么要这样做?

    您只需再添加一个 CoAP 服务器。 您可以通过复制"RSSI"服务开始。

    以下是一些可帮助您的步骤:

    1. 在 application.c 中、为您的服务定义新的 CoAP URI:
      1. #define COAP_URI_DATA "data"
    2. 现在、创建回调函数、您可以复制粘贴"coap_recv_cb_rssi"、然后为其指定一个新名称、如"coap_recv_cb_networkmanagement"
    3. 使用 COAP_SERVICE_REGISTER_Uri 将回调函数与新的 COAP_URI_NetworkManagement 和回调函数一起注册

    此致、

    Arthur

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

    我们已经完成了一些信息。 我们的要求是通过另一个 CoAP 服务器发送数据、因此我们需要您的帮助

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

    Arthur、您好!

    因此、我们并未创建另一个 CoAP 服务器、而是计划创建另一个用于计量数据的 UDP 服务器。  

    1.我认为我们可以在路由器节点上创建另一台 UDP 服务器、另一个任务与 CoAP 任务并行。

    2.如果我们可以这样做,我们如何合并 UDP 数据,其 IP 是用户定义的,可以与 spinel 通信。

    3.我需要做什么修改 spinel 或 BR 来接收这些 UDP 数据.

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

    Ranjit、您好!  

    现在我们已经完成了一些消息。 我们的要求是通过另一个 CoAP 服务器发送数据,因此我们需要您的帮助

    我看到您已经为我们提供的同一服务器创建了多个服务。  

    如果我正确理解您、您需要一个完全不同的 CoAP 服务器、而不是一种不同的服务。 需要这种操作的原因有何具体?

    此外、如果您选中 spinel-cli.py 中的 wpan_callback、则可以看到各种数据包类型的响应。 如果是 udp_pkt、则会检查目标端口、在默认情况下、如果是 CoAP 端口、则会执行操作。 这是边界路由器自旋响应数据包的地方。  

    请详细说明是否需要额外的 UDP/CoAP 服务器? 我假设您的要求是通过边界路由器将 pyspinel 中的 IP 数据包发送到路由器节点。  

    此致、

    SID  

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

    您好、SID、

    我们需要一个透明的通道用于仪表数据通信、此通道需要在 UDP 上、因为前端系统 API 仅支持 UDP 接口。 因此,我想在路由器节点上创建 UDP 服务器。 但是、我们将仅通过 CoAP 服务器发送网络管理数据。 我在路由器节点上遇到的另一个问题是、当我在路由器节点上创建 UDP 服务器时、我遇到了一个单独的线程、它阻止了主线程中的 CoAP。 这可能是什么原因呢? 我相信我的要求很清楚。  

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

    尊敬的 Sid:

    我创建了一个线程、其中我创建了 UDP 套接字。 我可以创建套接字、但绑定失败。 但是、另一个线程中的 CoAP 服务器运行正常。 您能否同时与 CoAP 服务器和 UDP 服务器共享应用程序代码?

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

    Ranjit、您好!

    由于我们通过电子邮件联系、我将暂时关闭该主题。  

    此致、

    SID

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

    尊敬的 Sid:

    有一些理解问题。 是的、您的回答是正确的:一台设备只包含一个 IP、无论它们有 CoAP 服务器还是 UDP 服务器。

    我已经成功创建了两个 UDP 服务器、两个不同的 UDP 端口和一个 CoAP 服务器。 我可以将 UDP 数据从路由器节点发送到 BR 路由器。 在 spinel 端我可以接收消息,但我不知道如何解析的 UDP 消息在 spinel 端。

    传入 IPv6数据包解码错误
    回溯(最近的调用最后):
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel\ipv6.py"、第1564行、位于_get_payload_factory 中
    返回 self._dst_port_farts[dst_port]
    ~~~~~~~~~~~~~~~~~~~~~~~~μ A ^^^^^^^^^^μ A
    关键错误:1234

    在处理上述异常期间、发生了另一个异常:

    回溯(最近的调用最后):
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel-cli.py"、wpan_callback 中的第465行
    数据包= self.ipv6_factory.from_bytes(value)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^μ A
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel-cli.py"、from_bytes 中的第262行
    返回 self.ipv6_factory.parse (io.bytesio (data)、common.MessageInfo ())
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^μ A
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel\ipv6.py"、第1372行、位于 Parse 中
    upper_layer_protocol = self._parse_upperiod_protocol (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^μ A
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel\ipv6.py"、第1361行、位于_parse_upperlate_protocol 中
    返回 factory.parse (data、message_info)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^μ A
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel\ipv6.py"、第1574行
    FACTORY = self._get_payload_factory (udp_header.dst_port)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^μ A
    文件"C:\Users\Admin\Downloads\ti-wisunfan-pyspinel\ti-wisunfan-pyspinel\spinel\ipv6.py"、第1567行、位于_get_payload_factory 中
    提升 RuntimeError (
    RuntimeError:无法找到工厂来解析基于目标端口1234的 UDP 数据报负载

    请告诉我、如何解析自旋端的 UDP 消息、以及如何将自旋端的 UDP 消息发送到路由器。

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

    Ranjit、您好!  

    你说,你能够解析消息在 spinel 侧,你在这里解析什么?  

    您在路由器节点端进行了哪些更改来传输非 CoAP 消息?

    此致、
    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了发送非 CoAP 消息,我们创建了单独的 UDP 套接字。
     
     udp_TRANS_SOCKET_id = SOCKET_OPEN (SOCKET_UDP、0、SOCKET_CALLBACK);
      如果(0 > udp_trans_socket_id )
      {
        返回 false;
      }

      bind_addr.type = address_ipv6;
      memcpy (bind_addr.address、ns_in6addr_any、16);
      bind_addr.identifier = udp_port;

      send_addr_endpoint.identifier = udp_port;
      send_addr_endpoint.type = address_ipv6;
      rt = socket_bind (udp_trans_socket_id、&bind_addr);
      如果(0 > ret)
      {
        返回 false;
      }
    //用于发送 UDP 数据包。
    socket_sendto (udp_trans_socket_id、&send_addr_endum、Transparent_buff、TransMsgLen);
    //从 spinel 接收 UDP 包(BR)
    len = socket_recvfrom (udp_TRANS_SOCKET_id、recv_buffer、sizeof (recv_buffer)、0、&source_addr); 
    if (len >0) 
    
    //用于仪表通信的透明 UART 
    SEM_WAIT (&SEM_UART_READ); 
    UART2_WRITE (UART_Transparent、recv_buffer、sizeof (recv_buffer)、NULL); 
    b_udp_req = true
    
    
    
     
    我们无法弄清楚如何将 UDP 数据包发送到路由器节点。 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ranjit、您好!

    您可以使用 pyspinel 上的 do_coap ()函数作为将 UDP 数据包发送到路由器节点的函数的参考实现。

    在 DO_CoAP ()函数中,您要构建 CoAP 数据包,方法是将 CoAP 和 UDP 报头应用到数据包中,然后使用 WPAN_API.IP_send()发送构建的数据包。

    因此,在您不需要 CoAP 标头或 CoAP 负载的情况下,应该可以删除这些数据,然后只需发送 UDP 数据报并使用 WPAN_API.IP_send()发送。

     这是在传输前创建 CoAP_request 的代码片段。 您可以按照上面提到的方法进行修改。

    或者、作为初步测试、只需在 pyspinel 中使用 coap 命令、但将"coap_port"更改为 您创建的套接字的 UDP 端口号。  

    您仍应该会收到此数据包。 但是您需要负责数据包处理。

            coap_request = ipv6.IPv6Packet(
                ipv6_header=ipv6.IPv6Header(source_address=src,
                                            destination_address=dst,
                                            hop_limit=hop_limit
                ),
                upper_layer_protocol=ipv6.UDPDatagram(
                    header=ipv6.UDPHeader(src_port=COAP_PORT, dst_port=COAP_PORT),
                    payload=ipv6.CoAP(
                        header=ipv6.CoAPHeader(_type=coap_type, tkl=tkl, code=coap_method_code,
                            msg_id=msg_id, token=token, options=coap_options
                        ),
                        payload=coap_payload
                    )
                )
            )

    此致、
    SID