This tutorial will show you how to set up a Contiki-NG node that runs a CoAP server (see doc:coap).

We will need a CoAP client on the Unix side. This tutorial uses coap-cli. It is readily available in the Docker image (see doc:docker). For a native install, see doc:install-linux or doc:install-osx.

Let us use the example under examples/coap/coap-examples-server. We will try it on a native server here, but the same thing can be done on a device, as described in tutorial:ping.

$ make && sudo ./coap-example-server.native

You should get:

opened tun device ``/dev/tun0''
net.inet.ip.forwarding: 1 -> 1
	inet6 fe80::aede:48ff:fe00:1122%tun0 prefixlen 64 optimistic scopeid 0x14 
	inet6 fd00::1 prefixlen 64 tentative 
	nd6 options=201<PERFORMNUD,DAD>
	open (pid 19168)
[INFO: Main      ] Starting Contiki-NG-develop/v4.2-30-g98f35fe09
[INFO: Main      ] - Routing: RPL Lite
[INFO: Main      ] - Net: tun6
[INFO: Main      ] - MAC: nullmac
[INFO: Main      ] - 802.15.4 PANID: 0xabcd
[INFO: Main      ] - 802.15.4 Default channel: 26
[INFO: Main      ] Node ID: 1800
[INFO: Main      ] Link-layer address: 0102.0304.0506.0708
[INFO: Main      ] Tentative link-local IPv6 address: fe80::302:304:506:708
[INFO: Native    ] Added global IPv6 address fd00::302:304:506:708
[INFO: App       ] Starting Erbium Example Server

From another terminal, let’s query the resource .well-known/core:

$ coap get coap://[fd00::302:304:506:708]/.well-known/core
(2.05)  </.well-known/core>;ct=40,</test/hello>;title="Hello world: ?len=0..";rt="Text",</debug/mirror>;title="Returns your decoded message";rt="Debug",</test/chunks>;title="Blockwise demo";rt="Data",</test/separate>;title="Separate demo",</test/push>;title="Periodic demo";obs,</test/sub>;title="Sub-resource demo",</test/b1sepb2>;title="Block1 + Separate + Block2 demo"

The client outputs the resource content to stdin and the CoAP status code (here (2.05)) to stderr. You can then try and query other resources listed in .well-known/core.

Build your own CoAP application

To build your own CoAP application, add the following to your Makefile:

# Include the CoAP implementation
MODULES += os/net/app-layer/coap

Then, provide an implementation for your CoAP resources, as exemplified in examples/coap/coap-example-server/resources. From your main process, activate your resources with coap_activate_resource.

CoAP client

We have no tutorial for a Contiki-NG CoAP client yet, but we do provide an example firmware under examples/coap/coap-example-client.