You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/blog/2025/08/esp-wifi-remote/index.md
+36-25Lines changed: 36 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -33,7 +33,7 @@ graph LR
33
33
34
34
WIFI -.-> A
35
35
36
-
A((Wi-Fi📡))
36
+
A((Wi-Fi))
37
37
38
38
style U fill:#e1f5fe
39
39
style WIFI fill:#e8f5e8
@@ -44,10 +44,10 @@ This is the conventional setup where applications directly interface with the Wi
44
44
### 2. esp-wifi-remote: Same Experience, External Hardware
45
45
46
46
**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
48
48
* 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
@@ -117,7 +117,7 @@ This scenario enables dual WiFi interfaces—one native and one remote—providi
117
117
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:
118
118
* API
119
119
- 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.
121
121
* Configuration: Standard WiFi library Kconfig options and selection of the RPC library
122
122
123
123
```mermaid
@@ -145,19 +145,23 @@ graph TD
145
145
146
146
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.
147
147
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:
149
154
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:
> 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.
158
164
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.
161
165
The RPC libraries could perform a consistency check but cannot reconfigure the slave project.
162
166
163
167
### Choice of esp-wifi-remote implementation component
@@ -171,7 +175,15 @@ Here are the reasons you might prefer some other implementation than `esp_hosted
171
175
* You prefer encrypted RPC communication between host and slave device, especially when passing WiFi credentials.
172
176
* You might need some customization on the slave side
173
177
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
175
187
176
188
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.
177
189
@@ -201,30 +213,30 @@ esp-hosted uses a plain text channel to send and receive WiFi API calls and even
201
213
>}}
202
214
203
215
204
-
**Performace**
216
+
**Performance**
205
217
206
218
As mentioned above, the best throughput experience is achieved with `esp_hosted` implementation.
207
219
208
220
| RPC component | 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)|
211
223
| 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)|
213
225
214
-
## Other options
226
+
## Other connectivity options
215
227
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.
217
229
218
-
### esp-ext-conn
230
+
### esp-extconn
219
231
220
232
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/)
221
233
222
-
### other options
234
+
### Custom connectivity other options
223
235
224
236
It is also possible to use your own implementation of Wi-Fi connectivity by means of the below components:
225
237
226
-
| component | Repository | Brief desciption|
227
-
|===========|============|==================|
238
+
| component | Repository | Brief description|
239
+
|-----------|------------|-------------------|
228
240
| esp-modem |[esp-protocols](https://github.com/espressif/esp-protocols/blob/master/components/esp_modem)| AT command and PPP client |
229
241
| esp-at |[esp-at](https://github.com/espressif/esp-at)| serving AT commands on ESP32 |
@@ -241,4 +253,3 @@ Two critical considerations emerge from this exploration:
241
253
**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_`.
242
254
243
255
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.
0 commit comments