2018-06-28 07:46:10 +00:00
|
|
|
|
|
|
|
# CoAP client example
|
|
|
|
|
|
|
|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
|
2019-04-13 11:15:28 +00:00
|
|
|
This CoAP client example is very simplified adaptation of one of the
|
|
|
|
[libcoap](https://github.com/obgm/libcoap) examples.
|
2018-06-28 07:46:10 +00:00
|
|
|
|
2019-04-13 11:15:28 +00:00
|
|
|
CoAP client example will connect your ESP32 device to a CoAP server, send off a GET request and
|
|
|
|
fetch the response data from CoAP server. The client can be extended to PUT / POST / DELETE requests,
|
|
|
|
as well as supporting the Observer extensions [RFC7641](https://tools.ietf.org/html/rfc7641).
|
2018-06-28 07:46:10 +00:00
|
|
|
|
2019-04-13 11:15:28 +00:00
|
|
|
If the URI is prefixed with coaps:// instead of coap://, then the CoAP client will attempt to use
|
|
|
|
the DTLS protocol using the defined Pre-Shared Keys(PSK) or Public Key Infrastructure (PKI) which the
|
|
|
|
CoAP server needs to know about.
|
2018-06-28 07:46:10 +00:00
|
|
|
|
2019-04-13 11:15:28 +00:00
|
|
|
If the URI is prefixed with coap+tcp://, then the CoAP will try to use TCP for the communication.
|
|
|
|
|
|
|
|
NOTE: coaps+tcp:// is not currently supported, even though both libcoap and MbedTLS support it.
|
|
|
|
|
|
|
|
The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with
|
|
|
|
constrained nodes and constrained networks in the Internet of Things.
|
|
|
|
The protocol is designed for machine-to-machine (M2M) applications such as smart energy and
|
|
|
|
building automation.
|
|
|
|
|
|
|
|
Please refer to [RFC7252](https://www.rfc-editor.org/rfc/pdfrfc/rfc7252.txt.pdf) for more details.
|
2018-06-28 07:46:10 +00:00
|
|
|
|
|
|
|
## How to use example
|
|
|
|
|
|
|
|
### Configure the project
|
|
|
|
|
|
|
|
```
|
2019-08-02 03:31:20 +00:00
|
|
|
idf.py menuconfig
|
2018-06-28 07:46:10 +00:00
|
|
|
```
|
|
|
|
|
2019-04-13 11:15:28 +00:00
|
|
|
Example Connection Configuration --->
|
|
|
|
* Set WiFi SSID under Example Configuration
|
|
|
|
* Set WiFi Password under Example Configuration
|
|
|
|
Example CoAP Client Configuration --->
|
|
|
|
* Set CoAP Target Uri
|
2019-07-31 10:52:49 +00:00
|
|
|
* If PSK, Set CoAP Preshared Key to use in connection to the server
|
|
|
|
* If PSK, Set CoAP PSK Client identity (username)
|
2019-04-13 11:15:28 +00:00
|
|
|
Component config --->
|
2019-07-31 10:52:49 +00:00
|
|
|
CoAP Configuration --->
|
|
|
|
* Set encryption method definition, PSK (default) or PKI
|
|
|
|
* Enable CoAP debugging if required
|
2018-06-28 07:46:10 +00:00
|
|
|
|
|
|
|
### Build and Flash
|
|
|
|
|
|
|
|
Build the project and flash it to the board, then run monitor tool to view serial output:
|
|
|
|
|
|
|
|
```
|
2019-04-13 11:15:28 +00:00
|
|
|
idf.py build
|
2019-08-02 03:31:20 +00:00
|
|
|
idf.py -p PORT flash monitor
|
2018-06-28 07:46:10 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
(To exit the serial monitor, type ``Ctrl-]``.)
|
|
|
|
|
|
|
|
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
|
|
|
|
|
|
|
|
## Example Output
|
2019-03-08 20:22:17 +00:00
|
|
|
Prerequisite: we startup a CoAP server on coap server example,
|
|
|
|
or use the default of coap://californium.eclipse.org.
|
2018-06-28 07:46:10 +00:00
|
|
|
|
|
|
|
and you could receive data from CoAP server if succeed,
|
|
|
|
such as the following log:
|
|
|
|
|
|
|
|
```
|
|
|
|
...
|
|
|
|
I (332) wifi: mode : sta (30:ae:a4:04:1b:7c)
|
|
|
|
I (1672) wifi: n:11 0, o:1 0, ap:255 255, sta:11 0, prof:1
|
|
|
|
I (1672) wifi: state: init -> auth (b0)
|
|
|
|
I (1682) wifi: state: auth -> assoc (0)
|
|
|
|
I (1692) wifi: state: assoc -> run (10)
|
|
|
|
I (1692) wifi: connected with huawei_cw, channel 11
|
|
|
|
I (1692) wifi: pm start, type: 1
|
|
|
|
|
|
|
|
I (2582) event: sta ip: 192.168.3.89, mask: 255.255.255.0, gw: 192.168.3.1
|
|
|
|
I (2582) CoAP_client: Connected to AP
|
2019-03-08 20:22:17 +00:00
|
|
|
I (2582) CoAP_client: DNS lookup succeeded. IP=104.196.15.150
|
|
|
|
Received:
|
|
|
|
************************************************************
|
|
|
|
CoAP RFC 7252 Cf 2.0.0-SNAPSHOT
|
|
|
|
************************************************************
|
|
|
|
This server is using the Eclipse Californium (Cf) CoAP framework
|
|
|
|
published under EPL+EDL: http://www.eclipse.org/californium/
|
|
|
|
|
|
|
|
(c) 2014, 2015, 2016 Institute for Pervasive Computing, ETH Zurich and others
|
|
|
|
************************************************************
|
2018-06-28 07:46:10 +00:00
|
|
|
...
|
|
|
|
```
|
|
|
|
|
2019-03-08 20:22:17 +00:00
|
|
|
## libcoap Documentation
|
|
|
|
This can be found at https://libcoap.net/doc/reference/4.2.0/
|
|
|
|
|
2018-06-28 07:46:10 +00:00
|
|
|
## Troubleshooting
|
2019-04-13 11:15:28 +00:00
|
|
|
* Please make sure Target Url includes valid `host`, optional `port`,
|
|
|
|
optional `path`, and begins with `coap://`, `coaps://` or `coap+tcp://`
|
|
|
|
for a coap server that supports TCP
|
2019-03-08 20:22:17 +00:00
|
|
|
(not all do including coap+tcp://californium.eclipse.org).
|
|
|
|
|
2019-07-31 10:52:49 +00:00
|
|
|
* CoAP logging can be enabled by running 'idf.py menuconfig -> Component config -> CoAP Configuration' and setting appropriate log level
|