You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无边界路由器的CC2650 SensorTag上运行CoAP(er-rest-example)?

无边界路由器环境下CC2650 SensorTag运行CoAP客户端-服务器指南

我来帮你搞定这个问题——官方文档大多聚焦边界路由器场景,无BR环境下跑CoAP确实容易踩坑,尤其是RPL网络初始化和CoAP地址配置这两块。你遇到的客户端超时、RPL DIS未处理,核心原因是默认配置依赖外部边界路由器,得调整成节点自组网的模式。

核心问题拆解

你的er-rest-server和er-rest-client能编译运行,但客户端超时,本质是:

  • 默认配置下,所有节点都在等待边界路由器发送RPL DIS消息来初始化网络,没有BR的话,RPL根本起不来
  • 客户端可能硬编码了BR的地址,而非服务器节点的本地地址

关键配置调整步骤

1. 改RPL配置,让节点自组网

首先要指定一个节点作为RPL根(就用你的er-rest-server节点),让网络不需要依赖外部BR:

  • 打开项目的project-conf.h文件,添加/修改以下配置:
    // 禁用多播监听,适合小型自组网
    #define RPL_CONF_MCAST_SNOOPING 0
    // 启用存储模式,让根节点维护路由表
    #define RPL_CONF_STORING_MODE 1
    // 允许向下路由,确保客户端能访问服务器
    #define RPL_CONF_NO_DOWNWARD_ROUTES 0
    // 使用经典RPL路由协议
    #define NETSTACK_CONF_ROUTING rpl_classic_routing
    
  • 重点:只在服务器节点的project-conf.h里加这行,客户端节点不要加:
    // 标记当前节点为RPL根
    #define RPL_CONF_ROOT 1
    

2. 修正CoAP客户端的目标地址

默认的er-rest-client可能指向了BR的地址,得改成服务器节点的链路本地地址:

  • 打开er-rest-client.c,找到目标地址的定义,替换成你服务器节点的链路本地IPv6地址(可以从服务器的串口日志里找到,格式是fe80::xxxx:xxxx:xxxx:xxxx):
    static uip_ipaddr_t server_ipaddr;
    // 替换成你的服务器节点链路本地地址
    uip_ip6addr(&server_ipaddr, 0xfe80, 0, 0, 0, 0x1234, 0x5678, 0xabcd, 0xef12);
    
  • 要是不想硬编码,也可以开邻居发现让客户端自动找服务器:
    在客户端的project-conf.h里加:
    #define NBR_TABLE_CONF_MAX_NEIGHBORS 10
    #define UIP_CONF_ND6_SEND_NA 1
    

3. 编译烧录的细节

  • 服务器和客户端要分开编译:服务器用带RPL_CONF_ROOT 1的配置,客户端用不带的,分别烧录到两个SensorTag。
  • 烧录后用串口工具(比如screen /dev/ttyUSB0 115200)看日志:
    • 服务器要能看到RPL root initialized或者类似日志,说明根节点生效
    • 客户端要能看到neighbor added的记录,证明邻居发现成功

问题排查指南

要是还是超时、RPL DIS没处理,按这几步查:

  • 先看服务器日志,有没有RPL root set相关的输出,确认根节点初始化成功
  • 客户端日志里有没有邻居发现的记录,要是连邻居都没找到,先排查物理距离和信号
  • 用CC2650的Sniffer固件抓包,看有没有RPL DIO/DAO消息(这是RPL组网的关键包),以及CoAP请求有没有发出去
  • 确认两个SensorTag在同一个802.15.4信道上,默认信道一般是11,别改乱了

额外小技巧

  • 无BR场景下用链路本地地址就能通信,不需要全局IPv6地址;要是需要全局地址,可以手动配置ULA(唯一本地地址),在每个节点的project-conf.h里加:
    #define UIP_CONF_IPV6_ADDR_AUTOCONF 0
    #define UIP_CONF_FIXEDADDR 1
    // 每个节点修改最后一段,保证唯一
    #define UIP_IPADDR0 0xfd00
    #define UIP_IPADDR1 0
    #define UIP_IPADDR2 0
    #define UIP_IPADDR3 0
    #define UIP_IPADDR4 0x1111
    #define UIP_IPADDR5 0x2222
    #define UIP_IPADDR6 0x3333
    #define UIP_IPADDR7 0x4444
    

内容的提问来源于stack exchange,提问作者HI_205

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:04:51