Skip to content

Commit 091bc69

Browse files
committed
fix(wifi-remote): Replace WiFi -> Wi-Fi
1 parent 5c7f32e commit 091bc69

File tree

1 file changed

+37
-37
lines changed
  • content/blog/2025/09/esp-wifi-remote

1 file changed

+37
-37
lines changed

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

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "Transparent WiFi connectivity for non-WiFi ESP32 chips"
2+
title: "Transparent Wi-Fi connectivity for non-Wi-Fi ESP32 chips"
33
date: 2025-09-05
44
showAuthor: false
55
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
1515
### Terminology
1616

1717
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.
2121

22-
## Understanding the WiFi Experience
22+
## Understanding the Wi-Fi Experience
2323

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:
2525

26-
### Traditional WiFi scenario
26+
### Traditional Wi-Fi scenario
2727

28-
- Users call `esp_wifi_...()` API to control the local WiFi
28+
- Users call `esp_wifi_...()` API to control the local Wi-Fi
2929
{{< figure
3030
default=true
3131
src="wifi_experience_1.webp"
3232
>}}
3333

34-
### `esp-wifi-remote` with non WiFi Chips
34+
### `esp-wifi-remote` with non Wi-Fi Chips
3535

36-
- Users call `esp_wifi_...()` API to control the remote WiFi
36+
- Users call `esp_wifi_...()` API to control the remote Wi-Fi
3737
{{< figure
3838
default=true
3939
src="wifi_experience_2A.webp"
4040
>}}
4141

42-
### `esp-wifi-remote` with WiFi-capable Chips
42+
### `esp-wifi-remote` with Wi-Fi-capable Chips
4343

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
4646
{{< figure
4747
default=true
4848
src="wifi_experience_2B.webp"
4949
>}}
5050

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.
5252

53-
## WiFi Remote component breakdown
53+
## Wi-Fi Remote component breakdown
5454

5555
**esp_wifi_remote** is a thin layer that translates `esp_wifi` API calls into the appropriate implementation. Key aspects:
5656
* 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.
5959
* Configuration:
60-
- Standard WiFi library Kconfig options
60+
- Standard Wi-Fi library Kconfig options
6161
- Selection of the backend solution
6262

63-
### WiFi configuration
63+
### Wi-Fi configuration
6464

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.
6666

67-
#### Local vs. Remote WiFi configuration
67+
#### Local vs. Remote Wi-Fi configuration
6868

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.
7070

7171
> 💡 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:
7373
7474
```
7575
CONFIG_ESP_WIFI_TX_BA_WIN -> CONFIG_WIFI_RMT_TX_BA_WIN
@@ -78,7 +78,7 @@ CONFIG_ESP_WIFI_AMPDU_RX_ENABLED -> CONFIG_WIFI_RMT_AMPDU_RX_ENABLED
7878
```
7979

8080
> ⚠️
81-
> 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.
8282
> It is important to configure the options on the slave side manually and rebuild the slave application.
8383
> 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.
8484
@@ -94,10 +94,10 @@ Here are the reasons you might prefer some other implementation than `esp_hosted
9494
* Your slave (or host) device is not an ESP32 target and you want to use some standard protocol:
9595
- choose `eppp`: it uses PPPoS protocol and works seamlessly with `pppd` on linux.
9696
- 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.
9898
* You might need some customization on the slave side.
9999

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:
101101

102102
```
103103
$ idf.py menuconfig
@@ -116,27 +116,27 @@ idf.py add-dependency "espressif/wifi_remote_over_at"
116116

117117
#### Comparison of backend solution components
118118

119-
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.
120120

121121
**Principle of operation**
122122

123123

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.
125125

126126
{{< figure
127127
default=true
128128
src="hosted.webp"
129129
>}}
130130

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).
132132

133133
{{< figure
134134
default=true
135135
src="eppp.webp"
136136
>}}
137137

138138

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.
140140

141141
{{< figure
142142
default=true
@@ -154,16 +154,16 @@ The best throughput is achieved with `esp_hosted` implementation.
154154
| wifi_remote_over_eppp | up to 20Mbps | [eppp-link](https://github.com/espressif/esp-protocols/blob/master/components/eppp_link/README.md#throughput) |
155155
| wifi_remote_over_at | up to 2Mbps | [esp-at](https://github.com/espressif/esp-at) |
156156

157-
### WiFi Remote internals
157+
### Wi-Fi Remote internals
158158

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.
160160

161161
> 📝
162162
> 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.
163163
164164
## Other connectivity options
165165

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.
167167

168168
### esp-extconn
169169

@@ -182,19 +182,19 @@ You can also implement your own Wi-Fi connectivity using these components:
182182

183183
## Summary
184184

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.
186186

187187
The below tips emerge from this exploration:
188188

189189
**1. Use `esp-hosted` as your backend solution** -- Provides optimal performance, mature integration, and comprehensive support.
190190

191191
**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/).
193193
- 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.
194194

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_`.
196196

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).
198198

199199

200200
## References

0 commit comments

Comments
 (0)