Skip to content

Commit 629d288

Browse files
committed
fix(wifi-remote): Cleanup + review comments
1 parent ba17eb4 commit 629d288

File tree

1 file changed

+36
-25
lines changed
  • content/blog/2025/08/esp-wifi-remote

1 file changed

+36
-25
lines changed

content/blog/2025/08/esp-wifi-remote/index.md

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ graph LR
3333
3434
WIFI -.-> A
3535
36-
A((Wi-Fi📡))
36+
A((Wi-Fi))
3737
3838
style U fill:#e1f5fe
3939
style WIFI fill:#e8f5e8
@@ -44,10 +44,10 @@ This is the conventional setup where applications directly interface with the Wi
4444
### 2. esp-wifi-remote: Same Experience, External Hardware
4545

4646
**esp-wifi-remote** is designed to provide exactly the same user experience as the traditional WiFi setup, but with external WiFi hardware. This works in two scenarios:
47-
* Non-WiFi Chipsets: The traditional usecase of providing WiFi functionality on ESP32-P4
47+
* Non-WiFi Chipsets: The traditional use case of providing WiFi functionality on ESP32-P4
4848
* WiFi enabled Chipsets: It is possible to use esp-wifi-remote on ESP32 chips which already have WiFi
49-
- narrow usecase where multiple WiFi interfaces are needed (e.g. for bridging networks, filtering packets, ...)
50-
- testing: to bootstrap your experience with esp-wifi-remote, just plug to ESP32's and run [two-station](...) example
49+
- narrow use case where multiple WiFi interfaces are needed (e.g. for bridging networks, filtering packets, ...)
50+
- testing: to bootstrap your experience with esp-wifi-remote, just plug two ESP32s and run [two-station](https://github.com/espressif/esp-wifi-remote/tree/main/components/esp_wifi_remote/examples/two_stations) example
5151

5252
#### Scenario A: Non-WiFi Chipsets
5353

@@ -67,7 +67,7 @@ graph LR
6767
end
6868
6969
SLAVE_RPC[RPC Library<br/>slave side] -.-> ANT
70-
ANT((Wi-Fi📡))
70+
ANT((Wi-Fi))
7171
7272
7373
style U fill:#e1f5fe
@@ -97,8 +97,8 @@ graph LR
9797
RPC <==UART/SDIO/...==> SLAVE_RPC[RPC Library<br/>slave side]
9898
end
9999
100-
NATIVE_ANT((Native Wi-Fi📡))
101-
REMOTE_ANT((Remote Wi-Fi📡))
100+
NATIVE_ANT((Native Wi-Fi))
101+
REMOTE_ANT((Remote Wi-Fi))
102102
103103
WIFI -.-> NATIVE_ANT
104104
SLAVE_RPC -.-> REMOTE_ANT
@@ -117,7 +117,7 @@ This scenario enables dual WiFi interfaces—one native and one remote—providi
117117
esp_wifi_remote is just a thin layer that translates esp_wifi API calls into the appropriate implementation, but it's important to understand these basic aspects:
118118
* API
119119
- Remote WiFi calls: Set of esp_wifi API namespaced with `esp_wifi_remote` prefix
120-
- Standard WiFi calls: esp_wifi API directly translates to esp_wif_remote API for targets with no WiFi.
120+
- Standard WiFi calls: esp_wifi API directly translates to esp_wifi_remote API for targets with no WiFi.
121121
* Configuration: Standard WiFi library Kconfig options and selection of the RPC library
122122

123123
```mermaid
@@ -145,19 +145,23 @@ graph TD
145145

146146
You can configure the remote WiFi exactly the same way as the local WiFi, the Kconfig options are structured the same way and called exactly the same, but located under ESP WiFi Remote component instead.
147147

148-
**Important**
148+
#### Local vs. Remote WiFi configuration
149+
150+
The names of Kconfig options are the same, but the identifiers are prefixed differently in order to differentiate between local and remote WiFi.
151+
152+
> [!TIP] Adapt options from sdkconfig
153+
> If you're migrating your project from a WiFi 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:
149154
150-
The names of Kconfig options are the same, but the identifiers are prefixed differently in order to differentiate between local and remote WiFi. If you're migrating your project from a WiFi 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:
151155
```
152156
CONFIG_ESP_WIFI_TX_BA_WIN -> CONFIG_WIFI_RMT_TX_BA_WIN
153157
CONFIG_ESP_WIFI_AMPDU_RX_ENABLED -> CONFIG_WIFI_RMT_AMPDU_RX_ENABLED
154158
...
155159
```
156160

157-
**Important**
161+
> [!IMPORTANT]
162+
> All WiFi 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.
163+
> It is important to configure the options on the slave side manually and rebuild the slave application.
158164
159-
All WiFi 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.
160-
It is important to configure the options on the slave side manually and rebuild the slave application.
161165
The RPC libraries could perform a consistency check but cannot reconfigure the slave project.
162166

163167
### Choice of esp-wifi-remote implementation component
@@ -171,7 +175,15 @@ Here are the reasons you might prefer some other implementation than `esp_hosted
171175
* You prefer encrypted RPC communication between host and slave device, especially when passing WiFi credentials.
172176
* You might need some customization on the slave side
173177

174-
#### Comparison of PRC libraries
178+
### Internal implementation
179+
180+
The `esp-wifi` component interface and functionality is dependent on the actual WiFi hardware, i.e. the actual target capabilites. The `esp-wifi-remote` needs to follow these dependencies, which are in turn based on the remote target, i.e. slave WiFi hardware.
181+
That's why some wireless and system capability flags and options are replaced internally with `SOC_SLAVE` prefix. Similarly the host side config options are prefixed with `WIFI_RMT` to be used in `esp-wifi-remote` headers. You can read more about the adaptation in [WiFi remote](https://github.com/espressif/esp-wifi-remote/blob/main/components/esp_wifi_remote/README.md#dependencies-on-esp_wifi) documentation.
182+
183+
> [!Note]
184+
> 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 RPC implementation library.
185+
186+
#### Comparison of RPC implementor components
175187

176188
This section focuses on comparing the RPC libraries in more details, mainly how these different methods marshall WiFi commands,events and data to the slave device.
177189

@@ -201,30 +213,30 @@ esp-hosted uses a plain text channel to send and receive WiFi API calls and even
201213
>}}
202214

203215

204-
**Performace**
216+
**Performance**
205217

206218
As mentioned above, the best throughput experience is achieved with `esp_hosted` implementation.
207219

208220
| RPC component | Maximum TCP throughput | More details |
209-
|================|========================|==============|
210-
| esp_hosted_mcu | up to 50Mbps | [esp-hosted docs](https://github.com/espressif/esp-hosted-mcu?tab=readme-ov-file#hosted-transports-table) |
221+
|----------------|------------------------|---------------|
222+
| esp_hosted_mcu | up to 50Mbps | [esp-hosted](https://github.com/espressif/esp-hosted-mcu?tab=readme-ov-file#hosted-transports-table) |
211223
| wifi_remote_over_eppp | up to 20Mbps | [eppp-link](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link/README.md#throughput) |
212-
| wifi_remote_over_eppp | up to 2Mbps | [esp-at](https://github.com/espressif/esp-at) |
224+
| wifi_remote_over_at | up to 2Mbps | [esp-at](https://github.com/espressif/esp-at) |
213225

214-
## Other options
226+
## Other connectivity options
215227

216-
This blog post focuses on *esp-wifi-remote* solutions only, it doesn't discuss related topics, such as Bluetooth and BLE connectivity, `esp-ext-conn` component or some other means of using Wi-Fi library on remote targets.
228+
This blog post focuses on *esp-wifi-remote* solutions only, it doesn't discuss related topics, such as Bluetooth and BLE connectivity, `esp-extconn` component or some other means of using Wi-Fi library on remote targets.
217229

218-
### esp-ext-conn
230+
### esp-extconn
219231

220232
This solution doesn't fall into *esp-wifi-remote* category and needs a special target for the slave side (ESP8693), but provides the best throughput (up to 80Mbps). Read more about it [esp-extconn repository](https://github.com/espressif/esp-extconn/)
221233

222-
### other options
234+
### Custom connectivity other options
223235

224236
It is also possible to use your own implementation of Wi-Fi connectivity by means of the below components:
225237

226-
| component | Repository | Brief desciption |
227-
|===========|============|==================|
238+
| component | Repository | Brief description |
239+
|-----------|------------|-------------------|
228240
| esp-modem | [esp-protocols](https://github.com/espressif/esp-protocols/blob/master/components/esp_modem) | AT command and PPP client |
229241
| esp-at | [esp-at](https://github.com/espressif/esp-at) | serving AT commands on ESP32 |
230242
| eppp-link | [esp-protocols](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link) | PPP/TUN connectivity engine |
@@ -241,4 +253,3 @@ Two critical considerations emerge from this exploration:
241253
**2. Mind the WiFi slave configuration** - Since esp-wifi-remote operates as a compile-time configuration system, it cannot automatically reconfigure the slave device at runtime. Developers must manually configure the slave-side WiFi options and rebuild the slave application to ensure consistency between host and slave configurations. This is particularly important when migrating from WiFi-enabled devices, where configuration options must be prefixed with `WIFI_RMT_` instead of `ESP_WIFI_`.
242254

243255
By following these guidelines, developers can successfully implement esp-wifi-remote solutions that provide the same familiar WiFi experience across diverse ESP32 hardware platforms, from traditional WiFi-enabled chipsets to the latest non-WiFi variants like ESP32-P4 and ESP32-H2.
244-

0 commit comments

Comments
 (0)