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/09/esp-wifi-remote/index.md
+37-37Lines changed: 37 additions & 37 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
---
2
-
title: "Transparent WiFi connectivity for non-WiFi ESP32 chips"
2
+
title: "Transparent Wi-Fi connectivity for non-Wi-Fi ESP32 chips"
3
3
date: 2025-09-05
4
4
showAuthor: false
5
5
summary: "This blog post introduces the `esp-wifi-remote` component, which extends Wi-Fi functionality to ESP32 chips that lack native Wi-Fi support. We will explore the `esp-wifi-remote` ecosystem, its components, architecture, and integration with `esp-hosted`."
@@ -15,61 +15,61 @@ Also, `esp-wifi-remote` can be used with Wi-Fi-enabled ESP32 chips to create an
15
15
### Terminology
16
16
17
17
Before diving into the details, let's establish the key terminology used throughout this post:
18
-
-**Backend Solution**: The communication layer that handles the transport of WiFi commands, events, and data between host and slave devices. Examples include [esp-hosted](https://github.com/espressif/esp-hosted-mcu), [eppp](https://github.com/espressif/esp-wifi-remote/tree/main/components/wifi_remote_over_eppp), and [AT-based](https://github.com/espressif/esp-wifi-remote/tree/main/components/wifi_remote_over_at) implementations.
19
-
-**Host-side**: The device running your application code (e.g., ESP32-P4, ESP32-H2, or ESP32 with WiFi).
20
-
-**Slave-side**: The WiFi-capable device that provides the actual WiFi hardware and functionality.
18
+
-**Backend Solution**: The communication layer that handles the transport of Wi-Fi commands, events, and data between host and slave devices. Examples include [esp-hosted](https://github.com/espressif/esp-hosted-mcu), [eppp](https://github.com/espressif/esp-wifi-remote/tree/main/components/wifi_remote_over_eppp), and [AT-based](https://github.com/espressif/esp-wifi-remote/tree/main/components/wifi_remote_over_at) implementations.
19
+
-**Host-side**: The device running your application code (e.g., ESP32-P4, ESP32-H2, or ESP32 with Wi-Fi).
20
+
-**Slave-side**: The Wi-Fi-capable device that provides the actual Wi-Fi hardware and functionality.
21
21
22
-
## Understanding the WiFi Experience
22
+
## Understanding the Wi-Fi Experience
23
23
24
-
Let's examine the traditional WiFi experience, then see how esp-wifi-remote enables the same experience with external WiFi hardware:
24
+
Let's examine the traditional Wi-Fi experience, then see how esp-wifi-remote enables the same experience with external Wi-Fi hardware:
25
25
26
-
### Traditional WiFi scenario
26
+
### Traditional Wi-Fi scenario
27
27
28
-
- Users call `esp_wifi_...()` API to control the local WiFi
28
+
- Users call `esp_wifi_...()` API to control the local Wi-Fi
29
29
{{< figure
30
30
default=true
31
31
src="wifi_experience_1.webp"
32
32
>}}
33
33
34
-
### `esp-wifi-remote` with non WiFi Chips
34
+
### `esp-wifi-remote` with non Wi-Fi Chips
35
35
36
-
- Users call `esp_wifi_...()` API to control the remote WiFi
36
+
- Users call `esp_wifi_...()` API to control the remote Wi-Fi
37
37
{{< figure
38
38
default=true
39
39
src="wifi_experience_2A.webp"
40
40
>}}
41
41
42
-
### `esp-wifi-remote` with WiFi-capable Chips
42
+
### `esp-wifi-remote` with Wi-Fi-capable Chips
43
43
44
-
- Users call `esp_wifi_...()` API to control the local WiFi
45
-
- Users call `esp_wifi_remote_...()` API to control the remote WiFi
44
+
- Users call `esp_wifi_...()` API to control the local Wi-Fi
45
+
- Users call `esp_wifi_remote_...()` API to control the remote Wi-Fi
46
46
{{< figure
47
47
default=true
48
48
src="wifi_experience_2B.webp"
49
49
>}}
50
50
51
-
This dual WiFi 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.
51
+
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.
52
52
53
-
## WiFi Remote component breakdown
53
+
## Wi-Fi Remote component breakdown
54
54
55
55
**esp_wifi_remote** is a thin layer that translates `esp_wifi` API calls into the appropriate implementation. Key aspects:
56
56
* API
57
-
- Remote WiFi calls: Set of esp_wifi API namespaced with `esp_wifi_remote` prefix
58
-
- Standard WiFi calls: esp_wifi API directly translates to esp_wifi_remote API for targets with no WiFi.
57
+
- Remote Wi-Fi calls: Set of esp_wifi API namespaced with `esp_wifi_remote` prefix
58
+
- Standard Wi-Fi calls: esp_wifi API directly translates to esp_wifi_remote API for targets with no Wi-Fi.
59
59
* Configuration:
60
-
- Standard WiFi library Kconfig options
60
+
- Standard Wi-Fi library Kconfig options
61
61
- Selection of the backend solution
62
62
63
-
### WiFi configuration
63
+
### Wi-Fi configuration
64
64
65
-
You can configure remote WiFi the same way as local WiFi. Kconfig options are structured identically but located under ESP WiFi Remote component.
65
+
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.
66
66
67
-
#### Local vs. Remote WiFi configuration
67
+
#### Local vs. Remote Wi-Fi configuration
68
68
69
-
Kconfig option names are the same, but identifiers are prefixed differently to differentiate between local and remote WiFi.
69
+
Kconfig option names are the same, but identifiers are prefixed differently to differentiate between local and remote Wi-Fi.
70
70
71
71
> 💡 Adapt options from sdkconfig
72
-
> 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:
72
+
> 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:
> 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.
81
+
> 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.
82
82
> It is important to configure the options on the slave side manually and rebuild the slave application.
83
83
> 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.
84
84
@@ -94,10 +94,10 @@ Here are the reasons you might prefer some other implementation than `esp_hosted
94
94
* Your slave (or host) device is not an ESP32 target and you want to use some standard protocol:
95
95
- choose `eppp`: it uses PPPoS protocol and works seamlessly with `pppd` on linux.
96
96
- choose `at`: it uses standard AT commands and integrates nicely with `esp-at` as a slave device.
97
-
* You prefer encrypted communication between host and slave device, especially when passing WiFi credentials.
97
+
* You prefer encrypted communication between host and slave device, especially when passing Wi-Fi credentials.
98
98
* You might need some customization on the slave side.
99
99
100
-
To choose the backend solution, go to the WiFi Remote component configuration menu and select the preferred one by:
100
+
To choose the backend solution, go to the Wi-Fi Remote component configuration menu and select the preferred one by:
This section compares backend solutions, focusing on how different methods marshall (i.e., encode and transmit) WiFi commands, events and data to the slave device.
119
+
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.
120
120
121
121
**Principle of operation**
122
122
123
123
124
-
**`esp-hosted`** uses a plain text channel to send and receive WiFi API calls and events. It uses other plain text channels for data packets (WiFi 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 queue directly to the WiFi library.
124
+
**`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 queue directly to the Wi-Fi library.
125
125
126
126
{{< figure
127
127
default=true
128
128
src="hosted.webp"
129
129
>}}
130
130
131
-
**`wifi_remote_over_eppp`** creates a point to point link between host and slave device, so each side have their IP addresses. WiFi 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 device run TCP/IP stack. The slave device runs network address translation (NAT) to route the host IP packets to the WiFi 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).
131
+
**`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 device 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).
132
132
133
133
{{< figure
134
134
default=true
135
135
src="eppp.webp"
136
136
>}}
137
137
138
138
139
-
**`wifi_remote_over_at`** uses `esp-at` project as the slave device, so the host side only run standard AT commands. It's implemented internally with `esp_modem` component that handles basic WiFi functionality. Note that not all configuration options provided by *esp-wifi-remote* are supported via AT commands, so this method is largely limited.
139
+
**`wifi_remote_over_at`** uses `esp-at` project as the slave device, so the host side only run 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.
140
140
141
141
{{< figure
142
142
default=true
@@ -154,16 +154,16 @@ The best throughput is achieved with `esp_hosted` implementation.
154
154
| wifi_remote_over_eppp | up to 20Mbps |[eppp-link](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link/README.md#throughput)|
155
155
| wifi_remote_over_at | up to 2Mbps |[esp-at](https://github.com/espressif/esp-at)|
156
156
157
-
### WiFi Remote internals
157
+
### Wi-Fi Remote internals
158
158
159
-
The `esp-wifi` component interface depends on WiFi hardware capabilities. `esp-wifi-remote` follows these dependencies based on the slave WiFi 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 [WiFi remote](https://github.com/espressif/esp-wifi-remote/blob/main/components/esp_wifi_remote/README.md#dependencies-on-esp_wifi) documentation for details.
159
+
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.
160
160
161
161
> 📝
162
162
> 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.
163
163
164
164
## Other connectivity options
165
165
166
-
This blog post focuses on WiFi 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.
166
+
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.
167
167
168
168
### esp-extconn
169
169
@@ -182,19 +182,19 @@ You can also implement your own Wi-Fi connectivity using these components:
182
182
183
183
## Summary
184
184
185
-
**esp-wifi-remote** bridges the gap between WiFi-enabled and non-WiFi ESP32 chipsets, providing a seamless development experience that maintains API compatibility while extending WiFi functionality to previously WiFi-less devices.
185
+
**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.
186
186
187
187
The below tips emerge from this exploration:
188
188
189
189
**1. Use `esp-hosted` as your backend solution** -- Provides optimal performance, mature integration, and comprehensive support.
190
190
191
191
**2. Consider alternative backends** for specific scenarios:
192
-
- If sending WiFi commands between *host* and *slave* unencrypted is not acceptable: Checkout `wifi_remote_over_eppp` backend or [esp-extconn](https://github.com/espressif/esp-extconn/).
192
+
- If sending Wi-Fi commands between *host* and *slave* unencrypted is not acceptable: Checkout `wifi_remote_over_eppp` backend or [esp-extconn](https://github.com/espressif/esp-extconn/).
193
193
- If you need to use some standard communication protocol (e.g. using non-ESP slave): Checkout `wifi_remote_over_eppp` for PPPoS protocol, or `wifi_remote_over_at` for AT commands.
194
194
195
-
**3. Mind the WiFi slave configuration** -- `esp-wifi-remote` operates as a compile-time configuration system. Developers must manually configure slave-side WiFi options and rebuild the slave application. When migrating from WiFi-enabled devices, configuration options must be prefixed with `WIFI_RMT_` instead of `ESP_WIFI_`.
195
+
**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_`.
196
196
197
-
**4. Bootstrap your experience with WiFi 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 WiFi interfaces).
197
+
**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).
0 commit comments