Files
esp-idf/examples/protocols
hrushikesh.bhosale 2ec6f96f9f fix(examples): make https_request rom_impl test resilient to transient external server errors
The test_examples_protocol_https_request_rom_impl test on ESP32-C2 with
the ROM mbedTLS implementation hits a public TLS endpoint
(tls13.browserleaks.com / www.howsmyssl.com) for five sequential
sub-tests. CI runs frequently fail mid-test with one of:

  * mbedtls_ssl_handshake returned -0x7780
    (MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE - server-side fatal alert)
  * esp-tls: [sock=NN] select() timeout
  * esp-tls: Failed to open new connection in specified timeout

In a representative log the first three sub-tests succeed and only the
fourth/fifth fail, which is consistent with rate-limiting or transient
server unavailability rather than a device bug. Mark the test as
flaky with up to two reruns (10 s delay) so a single transient remote
failure does not fail the CI job.

Also align this test with the rest of the file by injecting the host
timestamp via NVS (write_time_to_nvs) so the device clock no longer
depends on a previous boot's persisted SNTP result, removing one more
source of CI flakiness on first-boot or after NVS erase.
2026-04-13 15:20:30 +05:30
..

Protocols Examples

Implementation of internet communication protocols and services.

See the README.md file in the upper level examples directory for more information about examples.

Establishing Wi-Fi or Ethernet or Thread Connection

About the example_connect() Function

Protocols examples use a simple helper function, example_connect(), to establish Wi-Fi, Ethernet, or/and Thread connection. This function is implemented in examples/common_components/protocol_examples_common/include/protocol_examples_common.h, and has a very simple behavior: block until connection is established and IP address is obtained, then return. This function is used to reduce the amount of boilerplate and to keep the example code focused on the protocol or library being demonstrated.

The simple example_connect() function does not handle timeouts, does not gracefully handle various error conditions, and is only suited for use in examples. When developing real applications, this helper function needs to be replaced with full Wi-Fi / Ethernet connection handling code. Such code can be found in examples/wifi/getting_started/ and examples/ethernet/basic/ examples.

Configuring the Example

To configure the example to use Wi-Fi, Ethernet, Thread or all connections, open the project configuration menu (idf.py menuconfig) and navigate to "Example Connection Configuration" menu. Select either "Wi-Fi" or "Ethernet" or "Thread" or all in the "Connect using" choice.

When connecting using Wi-Fi, enter SSID and password of your Wi-Fi access point into the corresponding fields. If connecting to an open Wi-Fi network, keep the password field empty.

When connecting using Ethernet, set up PHY type and configuration in the provided fields. If using Ethernet for the first time, it is recommended to start with the Ethernet example readme, which contains instructions for connecting and configuring the PHY. Once Ethernet example obtains IP address successfully, proceed to the protocols example and set the same configuration options.

When connecting using Thread, enter the Thread network parameters in Component config-->OpenThread-->Thread Core Features-->Thread Operational Dataset. For instructions on starting or joining a Thread network, refer to the ot_cli example. If the example requires to access an IPv4 network, a Thread Border Router with NAT64 (Network Address Translation IPv6-IPv4) support is needed. You can follow this guide to set up the ESP Thread Border Router for testing.

Disabling IPv6

For examples using Wi-Fi or Ethernet connection, example_connect() function waits until Wi-Fi or Ethernet connection is established, and IPv4 address and IPv6 link-local address are obtained. In network environments where IPv6 link-local address cannot be obtained, disable "Obtain IPv6 link-local address" option found in "Example Connection Configuration" menu.

For examples using Thread connection, example_connect() waits until Thread device is attached to Thread network, and IPv6 addresses are obtained. Note that IPv6 cannot be disabled for Thread devices as Thread is IPv6-only network.