readme

# libcoap: A C implementation of the Constrained Application Protocol (RFC 7252) [![Build Status: main](https://github.com/obgm/libcoap/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/obgm/libcoap/actions?query=branch:main) [![Build Status: develop](https://github.com/obgm/libcoap/actions/workflows/main.yml/badge.svg?branch=develop)](https://github.com/obgm/libcoap/actions?query=branch:develop) [![Static Analysis](https://scan.coverity.com/projects/10970/badge.svg?flat=1)](https://scan.coverity.com/projects/obgm-libcoap) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/libcoap.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:libcoap) Copyright (C) 2010—2022 by Olaf Bergmann <bergmann@tzi.org> and others ABOUT LIBCOAP ============= libcoap is a C implementation of a lightweight application-protocol for devices that are constrained their resources such as computing power, RF range, memory, bandwidth, or network packet sizes. This protocol, CoAP, is standardized by the IETF as RFC 7252. For further information related to CoAP, see <http://coap.technology>. You might want to check out [libcoap-minimal](https://github.com/obgm/libcoap-minimal) for usage examples. DOCUMENTATION ============= Documentation and further information can be found at <https://libcoap.net>. PACKAGE CONTENTS ================ This package contains a protocol parser and basic networking functions for platforms with support for malloc() and BSD-style sockets. In addition, there is support for Contiki, LwIP and Espressif/ESP-IDF hosted environments. The following RFCs are supported * RFC7252: The Constrained Application Protocol (CoAP) * RFC7390: Group Communication for the Constrained Application Protocol (CoAP) * RFC7641: Observing Resources in the Constrained Application Protocol (CoAP) * RFC7959: Block-Wise Transfers in the Constrained Application Protocol (CoAP) * RFC7967: Constrained Application Protocol (CoAP) Option for No Server Response * RFC8132: PATCH and FETCH Methods for the Constrained Application Protocol (CoAP) * RFC8323: CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets [No WebSockets support] * RFC8516: "Too Many Requests" Response Code for the Constrained Application Protocol * RFC8768: Constrained Application Protocol (CoAP) Hop-Limit Option * RFC9175: CoAP: Echo, Request-Tag, and Token Processing There is (D)TLS support for the following libraries * OpenSSL (Minimum version 1.1.0) [PKI, PSK and PKCS11] * GnuTLS (Minimum version 3.3.0) [PKI, PSK, RPK(3.6.6+) and PKCS11] * Mbed TLS (Minimum version 2.7.10) [PKI and PSK] * TinyDTLS [PSK and RPK] [DTLS Only] The examples directory contain a CoAP client, CoAP Resource Directory server and a CoAP server to demonstrate the use of this library. BUILDING ======== Further information can be found at <https://libcoap.net/install.html> and [BUILDING](https://raw.githubusercontent.com/obgm/libcoap/develop/BUILDING). LICENSE INFORMATION =================== This library is published as open-source software without any warranty of any kind. Use is permitted under the terms of the simplified BSD license. It includes public domain software. libcoap binaries may also include open-source software with their respective licensing terms. Please refer to [LICENSE](https://raw.githubusercontent.com/obgm/libcoap/develop/LICENSE) for further details.

readme of coap_client example

| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | # CoAP client example (See the README.md file in the upper level 'examples' directory for more information about examples.) This CoAP client example is very simplified adaptation of one of the [libcoap](https://github.com/obgm/libcoap) examples. 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). 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. If the URI is prefixed with coap+tcp://, then the CoAP will try to use TCP for the communication. 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. ## How to use example ### Configure the project ``` idf.py menuconfig ``` Example Connection Configuration ---> * Set WiFi SSID * Set WiFi Password Component config ---> CoAP Configuration ---> * Set encryption method definition, PSK (default) or PKI * Enable CoAP debugging if required * Disable CoAP using TCP if this is not required (TCP needed for TLS) * Disable CoAP server functionality to reduce code size Example CoAP Client Configuration ---> * Set CoAP Target Uri * If PSK, Set CoAP Preshared Key to use in connection to the server * If PSK, Set CoAP PSK Client identity (username) ### Build and Flash Build the project and flash it to the board, then run monitor tool to view serial output: ``` idf.py build idf.py -p PORT flash monitor ``` (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 Prerequisite: we startup a CoAP server on coap server example, or use the default of coap://californium.eclipseprojects.io. 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 I (2582) CoAP_client: DNS lookup succeeded. IP=35.185.40.182 Received: **************************************************************** CoAP RFC 7252 Cf 3.0.0-SNAPSHOT **************************************************************** This server is using the Eclipse Californium (Cf) CoAP framework published under EPL+EDL: http://www.eclipse.org/californium/ (c) 2014-2020 Institute for Pervasive Computing, ETH Zurich and others **************************************************************** ... ``` ## libcoap Documentation This can be found at [libcoap Documentation](https://libcoap.net/documentation.html). The current API is 4.3.0. ## libcoap Specific Issues These can be raised at [libcoap Issues](https://github.com/obgm/libcoap/issues). ## Troubleshooting * Please make sure Target Url includes valid `host`, optional `port`, optional `path`, and begins with `coap://`, `coaps://`, `coap+tcp://` or `coaps+tcp://` (not all hosts support TCP/TLS including coap+tcp://californium.eclipseprojects.io). * CoAP logging can be enabled by running 'idf.py menuconfig -> Component config -> CoAP Configuration -> Enable CoAP debugging' and setting appropriate log level. If Mbed TLS logging is required, this needs to be configured separately under mbedTLS Component Configuration and the CoAP logging level set to mbedTLS. * CoAP library does not support IPv6 only configuration, so it is necessary to enable `LWIP_IPv4`

readme of coap_server example

| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | # CoAP server example (See the README.md file in the upper level 'examples' directory for more information about examples.) This CoAP server example is very simplified adaptation of one of the [libcoap](https://github.com/obgm/libcoap) examples. CoAP server example will startup a daemon task, receive requests / data from CoAP client and transmit data to CoAP client. If the incoming request requests the use of DTLS (connecting to port 5684), then the CoAP server will try to establish a DTLS session using the previously defined Pre-Shared Key (PSK) - which must be the same as the one that the CoAP client is using, or Public Key Infrastructure (PKI) where the PKI information must match as requested. 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. ## How to use example ### Configure the project ``` idf.py menuconfig ``` Example Connection Configuration ---> * Set WiFi SSID * Set WiFi Password Component config ---> CoAP Configuration ---> * Set encryption method definition, PSK (default) or PKI * Enable CoAP debugging if required * Disable CoAP using TCP if this is not required (TCP needed for TLS) * Disable CoAP client functionality to reduce code size unless this server is a proxy Example CoAP Server Configuration ---> * If PSK, Set CoAP Preshared Key to use for connections to the server ### Build and Flash Build the project and flash it to the board, then run monitor tool to view serial output: ``` idf.py build idf.py -p PORT flash monitor ``` (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 current CoAP server would startup a daemon task, and the log is such as the following: ``` ... 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 (2622) event: sta ip: 192.168.3.84, mask: 255.255.255.0, gw: 192.168.3.1 I (2622) CoAP_server: Connected to AP ... ``` If a CoAP client queries the `/Espressif` resource, CoAP server will return `"Hello World!"` until a CoAP client does a PUT with different data. ## libcoap Documentation This can be found at [libcoap Documentation](https://libcoap.net/documentation.html). The current API is 4.3.0. ## libcoap Specific Issues These can be raised at [libcoap Issues](https://github.com/obgm/libcoap/issues). ## Troubleshooting * Please make sure CoAP client fetchs or puts data under path: `/Espressif` or fetches `/.well-known/core` * CoAP logging can be enabled by running 'idf.py menuconfig -> Component config -> CoAP Configuration -> Enable CoAP debugging' and setting appropriate log level. If Mbed TLS logging is required, this needs to be configured separately under mbedTLS Component Configuration and the CoAP logging level set to mbedTLS. * CoAP library does not support IPv6 only configuration, so it is necessary to enable `LWIP_IPv4`

Links

Supports all targets

License: Custom

To add this component to your project, run:

idf.py add-dependency "espressif/coap^4.3.1~3"

or download archive

Dependencies

  • ESP-IDF >=4.4
  • Examples:

    coap_client

    more details

    coap_server

    more details

    Stats

    • Downloaded in total
      Downloaded in total 182.6k times
    • Downloaded this version
      This version: 24.8k times

    Badge

    espressif/coap version: 4.3.1~3 |