メインコンテンツまでスキップ

CoAP (IoT)

Constrained Application Protocol (RFC 7252) — 低消費電力 IoT デバイス向けの RESTful 通信規格。UDP ベースのため、パケットが小さく消費電力も少なくて済みます。ゲートウェイは デバイスのリソース URI に GET / PUT でアクセスします。

状況どのカードを使うか
低消費電力 IoT デバイス (LoRa-WAN gateway の背後、電池式センサ)CoAP (このページ)
一般的な IoT ゲートウェイ (HTTP API)HTTP
産業用 PLCModbus/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/ledwrite 時に PUT (text/plain) — value が payload
sensors/multi/T1先頭の / がない場合は自動補正

read 呼び出しは synchronous GET — ポーリングサイクルごとにデバイスへ直接リクエストします。 電池式デバイスの場合はポーリングサイクルを長め (5000~60000 ms) に設定し、デバイスの sleep を解除する頻度を減らしてください。


よく使う事例

事例方法
Eclipse Californium デモサーバcoap.me / 5683 + /test, /.well-known/core (リソースディスカバリ)
LoRa-WAN gateway → CoAP proxygateway の 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 など) であれば write 成功です。


よくある問題と対処

症状原因対処
値が入ってこない (read が空文字列)デバイスがリソースに未対応coap-client -m get coap://host:5683/.well-known/core でリソース一覧を確認 (libcoap-bin パッケージ)
read が非常に遅いネットワークの packet loss + CoAP retransmitポーリングサイクルを長くする、congestion を確認
DTLS が必要なデバイスドライバは平文 CoAP のみ対応デバイスの前段に DTLS 終端ゲートウェイを配置し、ゲートウェイの平文側を読み取ってください。dtls オプションやポート 5684 の指定では解決しません

より詳しい技術ドキュメント