-
Notifications
You must be signed in to change notification settings - Fork 93
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
24 changed files
with
1,424 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
name: Build and Run CoAP Examples | ||
|
||
on: | ||
schedule: | ||
- cron: '0 0 * * *' # Once per day at midnight | ||
pull_request: | ||
types: [opened, reopened, synchronize] | ||
paths: | ||
- 'coap/**' | ||
|
||
jobs: | ||
build: | ||
name: Build CoAP Client Example | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
idf_ver: ["release-v4.4", "release-v5.0", "latest"] | ||
idf_target: ["esp32"] | ||
runs-on: ubuntu-20.04 | ||
container: espressif/idf:${{ matrix.idf_ver }} | ||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
- name: Build CoAP Client Example | ||
env: | ||
IDF_TARGET: ${{ matrix.idf_target }} | ||
shell: bash | ||
working-directory: coap/examples/coap_client | ||
run: | | ||
. ${IDF_PATH}/export.sh | ||
export PEDANTIC_FLAGS="-DIDF_CI_BUILD -Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function" | ||
export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes" | ||
export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}" | ||
idf.py set-target esp32 | ||
cat sdkconfig.ci >> sdkconfig | ||
idf.py build | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: coap_client_example_bin_${{ matrix.idf_ver }} | ||
path: | | ||
coap/examples/coap_client/build/bootloader/bootloader.bin | ||
coap/examples/coap_client/build/partition_table/partition-table.bin | ||
coap/examples/coap_client/build/coap_client.bin | ||
coap/examples/coap_client/build/coap_client.elf | ||
coap/examples/coap_client/build/flasher_args.json | ||
run-target: | ||
name: Run CoAP Client example on target | ||
needs: build | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
idf_ver: ["release-v4.4", "release-v5.0", "latest"] | ||
idf_target: ["esp32"] | ||
runs-on: [self-hosted, ESP32-ETHERNET-KIT] | ||
container: | ||
image: python:3.7-buster | ||
options: --privileged # Privileged mode has access to serial ports | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/download-artifact@v2 | ||
with: | ||
name: coap_client_example_bin_${{ matrix.idf_ver }} | ||
path: coap/examples/coap_client/build | ||
- name: Install Python packages | ||
env: | ||
PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi/" | ||
run: pip install --only-binary cryptography pytest-embedded pytest-embedded-serial-esp pytest-embedded-idf | ||
- name: Run CoAP Client example | ||
working-directory: coap/examples/coap_client | ||
run: pytest --target=${{ matrix.idf_target }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# The following lines of boilerplate have to be in your project's CMakeLists | ||
# in this exact order for cmake to work correctly | ||
cmake_minimum_required(VERSION 3.16) | ||
|
||
# (Not part of the boilerplate) | ||
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection. | ||
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) | ||
|
||
include($ENV{IDF_PATH}/tools/cmake/project.cmake) | ||
project(coap_client) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | 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` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Embed CA, certificate & key directly into binary | ||
idf_component_register(SRCS "coap_client_example_main.c" | ||
INCLUDE_DIRS "." | ||
EMBED_TXTFILES certs/coap_ca.pem certs/coap_client.crt certs/coap_client.key) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
menu "Example CoAP Client Configuration" | ||
|
||
# Hidden option that selects IPv4 | ||
config EXAMPLE_COAP_NEEDS_IPV4 | ||
bool | ||
default true | ||
select LWIP_IPV4 | ||
|
||
config EXAMPLE_TARGET_DOMAIN_URI | ||
string "Target Uri" | ||
default "coaps://californium.eclipseprojects.io" | ||
help | ||
Target uri for the example to use. Use coaps:// prefix for encrypted traffic | ||
using Pre-Shared Key (PSK) or Public Key Infrastructure (PKI). | ||
|
||
config EXAMPLE_COAP_PSK_KEY | ||
string "Preshared Key (PSK) to used in the connection to the CoAP server" | ||
depends on COAP_MBEDTLS_PSK | ||
default "sesame" | ||
help | ||
The Preshared Key to use to encrypt the communicatons. The same key must be | ||
used at both ends of the CoAP connection, and the CoaP client must request | ||
an URI prefixed with coaps:// instead of coap:// for DTLS to be used. | ||
|
||
config EXAMPLE_COAP_PSK_IDENTITY | ||
string "PSK Client identity (username)" | ||
depends on COAP_MBEDTLS_PSK | ||
default "password" | ||
help | ||
The identity (or username) to use to identify to the CoAP server which | ||
PSK key to use. | ||
|
||
endmenu |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIICDzCCAbSgAwIBAgIIAbOUoVFDz/QwDAYIKoZIzj0EAwIFADBcMRAwDgYDVQQD | ||
EwdjZi1yb290MRQwEgYDVQQLEwtDYWxpZm9ybml1bTEUMBIGA1UEChMLRWNsaXBz | ||
ZSBJb1QxDzANBgNVBAcTBk90dGF3YTELMAkGA1UEBhMCQ0EwHhcNMjAxMTExMTAz | ||
MDMzWhcNMjExMTExMTAzMDMzWjBaMQ4wDAYDVQQDEwVjZi1jYTEUMBIGA1UECxML | ||
Q2FsaWZvcm5pdW0xFDASBgNVBAoTC0VjbGlwc2UgSW9UMQ8wDQYDVQQHEwZPdHRh | ||
d2ExCzAJBgNVBAYTAkNBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7/3EXOZn | ||
GZXNEIj7LuQAMZ8lfRYSCnpME1TBjKjZPtVeztLtGWgkkLvIX11pAJcBh51cpi7Z | ||
fQtGpVE9CLOh6aNgMF4wHQYDVR0OBBYEFEvf57UcJhYYkx14twkeitd691fVMAsG | ||
A1UdDwQEAwIBBjAPBgNVHRMECDAGAQH/AgEBMB8GA1UdIwQYMBaAFAsi3KbVERiK | ||
JzFCfC/GVrYksGzEMAwGCCqGSM49BAMCBQADRwAwRAIgc5nVF/5Pip0XB17IZXqi | ||
V84FXanWdn9Z0SiPdpOgvZMCIH13vL9tkCCjPN3tg3TYRY/bzyGohFGBcTrrEtUr | ||
rVIm | ||
-----END CERTIFICATE----- | ||
-----BEGIN CERTIFICATE----- | ||
MIIB4DCCAYWgAwIBAgIIQR8ro8AQ02AwDAYIKoZIzj0EAwIFADBcMRAwDgYDVQQD | ||
EwdjZi1yb290MRQwEgYDVQQLEwtDYWxpZm9ybml1bTEUMBIGA1UEChMLRWNsaXBz | ||
ZSBJb1QxDzANBgNVBAcTBk90dGF3YTELMAkGA1UEBhMCQ0EwHhcNMjAxMTExMTAz | ||
MDMyWhcNMjExMTExMTAzMDMyWjBcMRAwDgYDVQQDEwdjZi1yb290MRQwEgYDVQQL | ||
EwtDYWxpZm9ybml1bTEUMBIGA1UEChMLRWNsaXBzZSBJb1QxDzANBgNVBAcTBk90 | ||
dGF3YTELMAkGA1UEBhMCQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATZ1BRM | ||
T1//Fzh9sneRZNwS4kgCxN1PvgwT271qCpYqyxnjLEa38AP1IAanhpiD/OkVc0Zd | ||
7NgDPCw7n94EULMyoy8wLTAdBgNVHQ4EFgQUCyLcptURGIonMUJ8L8ZWtiSwbMQw | ||
DAYDVR0TBAUwAwEB/zAMBggqhkjOPQQDAgUAA0cAMEQCIAdLEgcUWdpAl9jwdJiz | ||
/cHW7/CBIWEvqiQfzE+XLyLOAiAvuxSdOtSDjh2aC5qEjUCH8CSKCxWB74j23tmp | ||
aqPH4A== | ||
-----END CERTIFICATE----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIICAzCCAaagAwIBAgIJAJnE6sMNQNAoMAwGCCqGSM49BAMCBQAwWjEOMAwGA1UE | ||
AxMFY2YtY2ExFDASBgNVBAsTC0NhbGlmb3JuaXVtMRQwEgYDVQQKEwtFY2xpcHNl | ||
IElvVDEPMA0GA1UEBxMGT3R0YXdhMQswCQYDVQQGEwJDQTAeFw0yMDExMTExMDMw | ||
NDVaFw0yMTExMTExMDMwNDVaMF4xEjAQBgNVBAMTCWNmLWNsaWVudDEUMBIGA1UE | ||
CxMLQ2FsaWZvcm5pdW0xFDASBgNVBAoTC0VjbGlwc2UgSW9UMQ8wDQYDVQQHEwZP | ||
dHRhd2ExCzAJBgNVBAYTAkNBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFGno | ||
107kFgJ4AvABQviE9hTJlEeB4wfS3L58Q5J8srWxSunEgniIbfr0p8Shw+C1XAcz | ||
FxJrn8SjFCVqOKjrrqNPME0wHQYDVR0OBBYEFIwAAdmpYSm184Jx1ycc3BQGybhN | ||
MAsGA1UdDwQEAwIHgDAfBgNVHSMEGDAWgBRL3+e1HCYWGJMdeLcJHorXevdX1TAM | ||
BggqhkjOPQQDAgUAA0kAMEYCIQC+w/hm8TfTCqUV6midHAvmNxJN7MfMcpAiyi4e | ||
6NBrPAIhAPeMUrnOlykTMcpYMRZs4YnyM6ihgU/F8UjknhDpkywm | ||
-----END CERTIFICATE----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
-----BEGIN PRIVATE KEY----- | ||
MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBgNuyqKuRW0RxU1DVs | ||
aEpBPtVRVLRZYq6hZRzvZ6igBw== | ||
-----END PRIVATE KEY----- |
Oops, something went wrong.