CoAP (IoT)
Constrained Application Protocol(RFC 7252)——低功耗 IoT 设备的 RESTful 通信标准。基于 UDP,数据包小、功耗低。网关通过 GET / PUT 访问设备的资源 URI。
| 场景 | 使用哪张卡片 |
|---|---|
| 低功耗 IoT 设备(LoRa-WAN gateway 后端、电池供电传感器) | CoAP(本页) |
| 通用 IoT 网关(HTTP API) | HTTP |
| 工业 PLC | Modbus/TCP、OPC-UA、MELSEC |
| 经由 MQTT broker | MQTT Client |
注册表单输入项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | CoAP 设备 / 网关主机 | device.local、10.20.30.40 |
| 端口 | CoAP 标准 5683(明文)/ 5684(DTLS) | 5683 |
| 采集周期 | 轮询周期(ms) | 5000(电池供电设备应设置得更长) |
标签的 PLC 地址表示法 —— 资源路径
标签的 PLC 地址 = CoAP 资源 URI 路径。
| 格式 | 动作 |
|---|---|
/sensors/temperature | 对设备的 coap://host:5683/sensors/temperature 执行 GET —— 返回响应文本 |
/actuators/led | 写入时执行 PUT(text/plain)—— value 作为 payload |
sensors/multi/T1 | 若缺少前导 / 会自动补正 |
read 调用为 synchronous GET —— 每个 polling cycle 都会直接向设备发起请求。 对于电池供电设备,请将 polling cycle 设置得长一些(5000~60000 ms),以减少唤醒设备 sleep 的频率。
常用场景
| 场景 | 做法 |
|---|---|
| Eclipse Californium 演示服务器 | coap.me / 5683 + /test、/.well-known/core(资源发现) |
| LoRa-WAN gateway → CoAP proxy | gateway 的 CoAP API 端口 + 各设备的资源路径 |
| 工业 IoT 传感器 | 厂商手册中的资源路径(/sensor/X)—— 通常为文本响应 |
write (PUT)
在标签页面或通过 REST API 写入值时,会向设备发送 PUT 请求(mediaType text/plain)。
plc_address = /actuators/led
value = ON
→ PUT coap://host:5683/actuators/led payload="ON" Content-Format: text/plain
若响应为 success(如 2.04 Changed),则写入成功。
常见问题与处理
| 现象 | 原因 | 解决 |
|---|---|---|
| 取不到值(read 返回空字符串) | 设备不支持该资源 | 用 coap-client -m get coap://host:5683/.well-known/core 确认资源列表(libcoap-bin 包) |
| read 非常慢 | 网络 packet loss + CoAP retransmit | 加长 polling cycle,检查 congestion |
| 设备要求 DTLS | driver 仅支持明文 CoAP | 在设备前部署 DTLS 终结网关,读取网关的明文侧。仅设置 dtls 选项或指定端口 5684 无法解决 |