From ee7575521a1933c3ebf43b7315e3d3c8e706b993 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Tue, 26 Aug 2025 17:09:17 +0200 Subject: [PATCH] feat(blog): Add blog-post on esp-wifi-remote --- .../2025/09/esp-wifi-remote/featured.webp | Bin 0 -> 45182 bytes .../2025/09/esp-wifi-remote/img/at.drawio | 78 +++++++ .../blog/2025/09/esp-wifi-remote/img/at.webp | Bin 0 -> 8110 bytes .../2025/09/esp-wifi-remote/img/eppp.drawio | 92 ++++++++ .../2025/09/esp-wifi-remote/img/eppp.webp | Bin 0 -> 9506 bytes .../2025/09/esp-wifi-remote/img/hosted.drawio | 85 ++++++++ .../2025/09/esp-wifi-remote/img/hosted.webp | Bin 0 -> 8714 bytes .../img/wifi_experience_1.drawio | 25 +++ .../img/wifi_experience_1.webp | Bin 0 -> 6288 bytes .../img/wifi_experience_2A.drawio | 44 ++++ .../img/wifi_experience_2A.webp | Bin 0 -> 10518 bytes .../img/wifi_experience_2B.drawio | 53 +++++ .../img/wifi_experience_2B.webp | Bin 0 -> 14378 bytes content/blog/2025/09/esp-wifi-remote/index.md | 206 ++++++++++++++++++ 14 files changed, 583 insertions(+) create mode 100644 content/blog/2025/09/esp-wifi-remote/featured.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/at.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/at.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/eppp.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/eppp.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/hosted.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/hosted.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_1.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_1.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2A.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2A.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2B.drawio create mode 100644 content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2B.webp create mode 100644 content/blog/2025/09/esp-wifi-remote/index.md diff --git a/content/blog/2025/09/esp-wifi-remote/featured.webp b/content/blog/2025/09/esp-wifi-remote/featured.webp new file mode 100644 index 0000000000000000000000000000000000000000..a5acb2b24ec1dff5c33762f6ccf17c9d188fd48b GIT binary patch literal 45182 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�I~Xh4 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 Olu(kC5yf@=pa1|l1M;{4 literal 0 HcmV?d00001 diff --git a/content/blog/2025/09/esp-wifi-remote/img/at.drawio b/content/blog/2025/09/esp-wifi-remote/img/at.drawio new file mode 100644 index 000000000..87590433d --- /dev/null +++ b/content/blog/2025/09/esp-wifi-remote/img/at.drawio @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/at.webp b/content/blog/2025/09/esp-wifi-remote/img/at.webp new file mode 100644 index 0000000000000000000000000000000000000000..fc6eb4ee937fa49307b3479bfe498fbaede677f2 GIT binary patch literal 8110 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 I@n*mP0P8^qnE(I) literal 0 HcmV?d00001 diff --git a/content/blog/2025/09/esp-wifi-remote/img/eppp.drawio b/content/blog/2025/09/esp-wifi-remote/img/eppp.drawio new file mode 100644 index 000000000..714f80e77 --- /dev/null +++ b/content/blog/2025/09/esp-wifi-remote/img/eppp.drawio @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/eppp.webp b/content/blog/2025/09/esp-wifi-remote/img/eppp.webp new file mode 100644 index 0000000000000000000000000000000000000000..bdf55cf7184414623d42d0774144395615a2aed8 GIT binary patch literal 9506 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 A-v9sr literal 0 HcmV?d00001 diff --git a/content/blog/2025/09/esp-wifi-remote/img/hosted.drawio b/content/blog/2025/09/esp-wifi-remote/img/hosted.drawio new file mode 100644 index 000000000..ccb3e9f7a --- /dev/null +++ b/content/blog/2025/09/esp-wifi-remote/img/hosted.drawio @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/hosted.webp b/content/blog/2025/09/esp-wifi-remote/img/hosted.webp new file mode 100644 index 0000000000000000000000000000000000000000..5ffc1dc0dc990400e56ec24aabc4f1b250bd6cd1 GIT binary patch literal 8714 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 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_1.webp b/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_1.webp new file mode 100644 index 0000000000000000000000000000000000000000..3b0843b4b95418bd21c199108f337f4fc9293522 GIT binary patch literal 6288 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2A.webp b/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2A.webp new file mode 100644 index 0000000000000000000000000000000000000000..a909bbfd1024629cb236c07b71ee4a2c32b11f09 GIT binary patch literal 10518 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 V7K76Fj19npl>FfH@4guT_ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2B.webp b/content/blog/2025/09/esp-wifi-remote/img/wifi_experience_2B.webp new file mode 100644 index 0000000000000000000000000000000000000000..23316ece65ed546211b3069424cad8e3d974c922 GIT binary patch literal 14378 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 + +### `esp-wifi-remote` with non Wi-Fi Chips + +- Users call `esp_wifi_...()` API to control the remote Wi-Fi + {{< figure + default=true + src="img/wifi_experience_2A.webp" + >}} + +### `esp-wifi-remote` with Wi-Fi-capable Chips + +- Users call `esp_wifi_...()` API to control the local Wi-Fi +- Users call `esp_wifi_remote_...()` API to control the remote Wi-Fi + {{< figure + default=true + src="img/wifi_experience_2B.webp" + >}} + +This dual Wi-Fi scenario is useful for applications that need multiple wireless connections. It is also useful for initial exploring of `esp-wifi-remote` functionality with just two "common" ESP32 chips. For basic setup, you only need two evaluation boards. + +## Wi-Fi Remote component breakdown + +**esp_wifi_remote** is a thin layer that translates `esp_wifi` API calls into the appropriate implementation. Key aspects: +* API + - Remote Wi-Fi calls: Set of esp_wifi API namespaced with `esp_wifi_remote` prefix + - Standard Wi-Fi calls: esp_wifi API directly translates to esp_wifi_remote API for targets with no Wi-Fi. +* Configuration: + - Standard Wi-Fi library Kconfig options + - Selection of the backend solution + +### Wi-Fi configuration + +You can configure remote Wi-Fi the same way as local Wi-Fi. Kconfig options are structured identically but located under ESP Wi-Fi Remote component. + +#### Local vs. Remote Wi-Fi configuration + +Kconfig option names are the same, but identifiers are prefixed differently to differentiate between local and remote Wi-Fi. + +> 💡 Adapt options from sdkconfig +> If you're migrating your project from a Wi-Fi enabled device and used specific configuration options, please make sure the remote config options are prefixed with `WIFI_RMT_` instead of `ESP_WIFI_`, for example: + +``` +CONFIG_ESP_WIFI_TX_BA_WIN -> CONFIG_WIFI_RMT_TX_BA_WIN +CONFIG_ESP_WIFI_AMPDU_RX_ENABLED -> CONFIG_WIFI_RMT_AMPDU_RX_ENABLED +... +``` + +> ⚠️ +> All Wi-Fi remote configuration options are available, but some of them are not directly related to the **host side** configuration and since these are compile time options, wifi-remote cannot automatically reconfigure the **slave side** in runtime. +> It is important to configure the options on the slave side manually and rebuild the slave application. +> Make sure that the **host side** configuration corresponds to the **slave side**, e.g. `CONFIG_WIFI_RMT_TX_BA_WIN` on the host side is equal to the `CONFIG_ESP_WIFI_TX_BA_WIN` on the slave side. + +The backend solutions could perform a consistency check but cannot reconfigure the slave project. + +### Choosing the backend solution + +The default and recommended option as your backend solution for most use-cases is `esp_hosted`, providing the best performance, integration, maturity, and support. + +You can also switch to `eppp` or `at` based implementation or implement your own backend solution. +Here are the reasons you might prefer some other implementation than `esp_hosted`: +* Your application is not aiming for the best network throughput. +* Your slave (or host) device is not an ESP32 target and you want to use some standard protocol: + - choose `eppp`: it uses PPPoS protocol and works seamlessly with `pppd` on linux. + - choose `at`: it uses standard AT commands and integrates nicely with `esp-at` as a slave device. +* You prefer encrypted communication between host and slave devices, especially when passing Wi-Fi credentials. +* You might need some customization on the slave side. + +To choose the backend solution, go to the Wi-Fi Remote component configuration menu and select the preferred one by: + +``` +$ idf.py menuconfig + +> (Top) → Component config → Wi-Fi Remote → Choose WiFi-remote implementation +> (X) ESP-HOSTED +> ( ) EPPP +> ( ) CUSTOM +``` +Select `ESP-HOSTED` or `EPPP` for the respective backend, or `CUSTOM` for a custom implementation, including `at` based backend. +To use `at` backend, you need to manually add [wifi_remote_over_at](https://components.espressif.com/components/espressif/wifi_remote_over_at) to your project dependency list by: + +``` +idf.py add-dependency "espressif/wifi_remote_over_at" +``` + +#### Comparison of backend solution components + +This section compares backend solutions, focusing on how different methods marshall (i.e., encode and transmit) Wi-Fi commands, events, and data to the slave device. + +**Principle of operation** + + +**`esp-hosted`** uses a plain text channel to send and receive Wi-Fi API calls and events. It uses other plain text channels for data packets (Wi-Fi station, soft-AP, BT/BLE). The TCP/IP stack runs only on the host side and esp-hosted passes Ethernet frames (802.3) from host to slave, where they are queued directly to the Wi-Fi library. + +{{< figure + default=true + src="img/hosted.webp" + >}} + +**`wifi_remote_over_eppp`** creates a point to point link between host and slave device, so each side have their IP addresses. Wi-Fi API calls and events are transmitted using SSL/TLS connection with mutual authentication. The data path uses plain text peer to peer connection by means of IP packets. Both host and slave devices run TCP/IP stack. The slave device runs network address translation (NAT) to route the host IP packets to the Wi-Fi network -- this is a limitation, since the host device is behind NAT, so invisible from the outside and the translation has a performance impact (to overcome this, you can enable Ethernet frames via custom channels, so the data are transmitted the same way as for `esp-hosted` method, using 802.3 frames). + +{{< figure + default=true + src="img/eppp.webp" + >}} + + +**`wifi_remote_over_at`** uses `esp-at` project as the slave device, so the host side only runs standard AT commands. It's implemented internally with `esp_modem` component that handles basic Wi-Fi functionality. Note that not all configuration options provided by *esp-wifi-remote* are supported via AT commands, so this method is largely limited. + +{{< figure + default=true + src="img/at.webp" + >}} + + +**Performance** + +The best throughput is achieved with `esp_hosted` implementation. + +| Backend Solution | Maximum TCP throughput | More details | +|----------------|------------------------|---------------| +| esp_hosted_mcu | up to 50Mbps | [esp-hosted](https://github.com/espressif/esp-hosted-mcu?tab=readme-ov-file#hosted-transports-table) | +| wifi_remote_over_eppp | up to 20Mbps | [eppp-link](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link/README.md#throughput) | +| wifi_remote_over_at | up to 2Mbps | [esp-at](https://github.com/espressif/esp-at) | + +### Wi-Fi Remote internals + +The `esp-wifi` component interface depends on Wi-Fi hardware capabilities. `esp-wifi-remote` follows these dependencies based on the slave Wi-Fi hardware. Some wireless and system capability flags are replaced internally with `SOC_SLAVE` prefix. Host-side config options are prefixed with `WIFI_RMT` for use in `esp-wifi-remote` headers. See [Wi-Fi remote](https://github.com/espressif/esp-wifi-remote/blob/main/components/esp_wifi_remote/README.md#dependencies-on-esp_wifi) documentation for details. + +> 📝 +> These options and flags are only related to the host side, as `esp-wifi-remote` is a host side layer. For slave side options, please refer to the actual backend solution implementation. + +## Other connectivity options + +This blog post focuses on Wi-Fi connectivity solutions, specifically *esp-wifi-remote* only. We are not going to cover other wireless connectivity options like `esp-extconn` or custom implementations, nor do we cover Bluetooth or BLE. Below is a brief overview with references and links for those interested in exploring these alternatives. + +### esp-extconn + +This solution doesn't fall into *esp-wifi-remote* category and needs a special target for the slave side (ESP8689), but provides the best throughput (up to 80Mbps). See [esp-extconn repository](https://github.com/espressif/esp-extconn/) + +### Custom connectivity other options + +You can also implement your own Wi-Fi connectivity using these components: + +| component | Repository | Brief description | +|-----------|------------|-------------------| +| esp-modem | [esp-protocols](https://github.com/espressif/esp-protocols/blob/master/components/esp_modem) | AT command and PPP client | +| esp-at | [esp-at](https://github.com/espressif/esp-at) | serving AT commands on ESP32 | +| eppp-link | [esp-protocols](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link) | PPP/TUN connectivity engine | + + +## Summary + +**esp-wifi-remote** bridges the gap between Wi-Fi-enabled and non-Wi-Fi ESP32 chipsets, providing a seamless development experience that maintains API compatibility while extending Wi-Fi functionality to previously Wi-Fi-less devices. + +The below tips emerge from this exploration: + +**1. Use `esp-hosted` as your backend solution** -- Provides optimal performance, mature integration, and comprehensive support. + +**2. Consider alternative backends** for specific scenarios: +- If sending Wi-Fi commands between *host* and *slave* unencrypted is not acceptable: Check out `wifi_remote_over_eppp` backend or [esp-extconn](https://github.com/espressif/esp-extconn/). +- If you need to use some standard communication protocol (e.g. using non-ESP slave): Check out `wifi_remote_over_eppp` for PPPoS protocol, or `wifi_remote_over_at` for AT commands. + +**3. Mind the Wi-Fi slave configuration** -- `esp-wifi-remote` operates as a compile-time configuration system. Developers must manually configure slave-side Wi-Fi options and rebuild the slave application. When migrating from Wi-Fi-enabled devices, configuration options must be prefixed with `WIFI_RMT_` instead of `ESP_WIFI_`. + +**4. Bootstrap your experience with Wi-Fi chips** -- To get started **without** the actual ESP32-P4, just connect your two *common* ESP chips with three wires and run [the two station](https://github.com/espressif/esp-wifi-remote/tree/main/components/esp_wifi_remote/examples/two_stations) example (using dual Wi-Fi interfaces). + + +## References + +* [esp-wifi-remote repository](https://github.com/espressif/esp-wifi-remote) +* [esp-wifi-remote in component registry](https://components.espressif.com/components/espressif/esp_wifi_remote) +* [esp-hosted](https://github.com/espressif/esp-hosted-mcu) +* [esp-extconn](https://github.com/espressif/esp-extconn/) +* [ESP32-P4 connectivity options](https://developer.espressif.com/blog/wireless-connectivity-solutions-for-esp32-p4/)