8.5. COAP

8.5.1. 概述


CoAP是受限制的应用协议(Constrained Application Protocol)的简称

../../_images/coapFormat.png
  • Ver(版本编号)

    固定为0b01

  • T(报文类型)
    • coap协议中定义了4中报文类型,分别为:

    • CON(Confirmable,T=0b00):需要确认的报文类型。

    • NON(Non-Confirmable, T=0b01):不需要确认的报文类型。

    • ACK(Acknowledgement, T=0b10):应答报文

    • Reset(T=0b11):复位报文

  • TKL(标签长度)

  • Code(格式:c(3bit class type).dd(5bit detail code))
    (1)表示请求时
    • Code=0.01,表示GET方法

    • Code=0.02,表示POST方法

    • Code=0.03,表示PUT方法

    • Code=0.04,表示DELETE方法

    (2)表示响应时
    • Code=0.00,表示空报文

    • Code=2.xx,表示为正确的响应

    • Code=4.xx,表示为客户端的错误响应

    • Code=5.xx,表示为服务器的错误响应

  • Message ID(报文序号) - COAP请求和对应的COAP响应采用相同的Message ID

  • Token(标签)

  • Options(选项) - 选项包括Uri-Host、Uri-Path、Uri-Port、Content-Format、Accept等。

  • 0xFF(分隔符)

  • payload(数据)


8.5.2. DEMO工程

apps/demo/demo_DevkitBoard


8.5.3. COAP Client

示例说明

展示了coap client的工程示例

示例实例

示例代码见 apps\common\example\network_protocols\coap\coap_client\main.c, 测试时需要在 apps/demo/demo_DevKitBoard/include/demo_config.h ,开启宏 USE_COAP_CLIENT_TEST

操作说明

  • 示例需要运行在STA模式 (注:如何进行sta和ap切换,请参考 Wi-Fi部分 )

  • 编译工程,烧录镜像,复位启动

  • 系统启动并成功联网后,向指定coap服务器发送报文,可通过串口软件看到相关输出打印

示例流程如下:

  • c_main() 入口
    1. 创建任务 coap_client_start

  • coap_client_start 函数流程
    1. 通过 wifi_get_sta_connect_state 函数检测是否通过dhcp成功获取到ip

    2. 成功通过dhcp获取到ip后,调用 coap_client_test

  • coap_client_test 任务流程
    1. 通过GET方法向coap服务器发送confirmabel报文


8.5.4. COAP Server

示例说明

展示了coap server的工程示例

示例实例

示例代码见 apps\common\example\network_protocols\coap\coap_server\main.c, 测试时需要在 apps/demo/demo_DevKitBoard/include/demo_config.h ,开启宏 USE_COAP_SERVER_TEST

操作说明

  • 编译工程,烧录镜像,复位启动

  • 系统启动并成功联网后,coap服务器等待客户端连接

  • 利用copper插件作为客户端,连接coap服务器并向服务器发起GET,POST和PUT请求,可通过串口软件看到相关输出打印。

示例流程如下:

  • c_main() 入口
    1. 创建任务 coap_server_start

  • coap_server_start 函数流程
    1. 通过 wifi_get_sta_connect_state 函数检测是否通过dhcp成功获取到ip

    2. 成功通过dhcp获取到ip后,调用 coap_server_test 创建coap服务器

8.5.5. COAP Server调试方法

1.利用copper插件作为客户端连接设备coap服务器。

2.点击Discover,查看coap服务器能提供哪些资源。

3.通过GET方法获取资源。

4.通过POST提交数据,通过串口可查看服务器接收到的数据。