ESP32: ¿Importa dónde soldás el módulo?
Introducción
En el laboratorio hemos realizado diversos proyectos utilizando modulos inalámbricos, ya sea ESP32 en sus diversas variantes, o el nrf52840 de Nordic. Siempre solemos seguir las guías de diseño que recomiendan los fabricantes, lo que involucra habitualmente colocar el módulo sobre un borde de la placa, dejando un área libre alrededor de la antena, para optimizar el rendimiento de la misma. Sin embargo en mas de una oportunidad hemos visto proyectos que no siguen estos lineamientos, lo que nos generó la duda de que tanto es una recomendación y que tanto una obligación.

Espressif explica bastante bien cómo ubicar el módulo con antena PCB en sus Hardware Design Guidelines.
Sin embargo, queríamos saber cuánto cambia la señal de un ESP32 con antena en la placa según dónde se coloque. Si la diferencia era de unos pocos decibeles, o si implicaba la imposibilidad de establecer la comunicación.
El experimento
Para llevar adelante una serie de experimentos armamos una placa base de prueba (un PCB simple faz sobre otro para simular doble faz con plano de masa continuo) con 6 posiciones de montaje posibles para el mismo módulo físico. No usamos seis módulos distintos, sino exactamente el mismo que fuimos reubicando y sosteniendo con pines soldados como soporte mecánico y conexion eléctrica con el plano de masa. Para la posicion central removimos el cobre de lo que sería la zona de “keepout” debajo de la antena, como lo recomienda el fabricante. Esta zona suele estar definida en el footprint del modulo, lo que hace que esa recomendacion en particular se cumpla a pesar que la de la posicion no.

La placa se conecta a un Notebook corriendo una app que envía comandos por puerto serie, para la configuración de los experimentos y recolección de datos.

Ésta se comunica también con una segunda placa con un ESP32, que se mantiene fijo en una posición. Medimos RSSI y throughput en tres protocolos distintos (ESPNOW, BLE y Bluetooth Classic) inicialmente con tandas de 200 paquetes de 100 bytes cada 100 ms por corrida, una tasa baja de 8 kbps como para no saturar el enlace de entrada. En total juntamos 70 sesiones y unas 800 muestras de RSSI por posición y protocolo.

Resultado 1: la posición del footprint sí importa, y bastante
La tabla de resultados lo dice bastante claro:
| Protocolo | Mejor posición | Peor posición | Brecha (mejor − peor) |
|---|---|---|---|
| ESPNOW | 3 (-43.31 dBm) | 5, centro (-54.48 dBm) | 11.17 dB |
| BLE | 3 (-58.21 dBm) | 5, centro (-69.77 dBm) | 11.56 dB |
| BT Classic | 3 (-16.00, escala relativa) | 5, centro (-27.90) | 11.90 dB |
Son 11 a 12 dB de diferencia simplemente por correr el chip unos centímetros dentro de la misma placa. Mismo módulo, misma distancia, misma antena. Perder 6 dB ya es recibir la mitad de la potencia. Acá se perdió casi el doble de eso solo por elegir un mal lugar.
Resultado 2: el ranking es consistente entre los tres protocolos
Los mejores y peores lugares salieron exactamente iguales en ESPNOW, BLE y Bluetooth Classic. Tres protocolos con stacks de radio distintos operando en 2.4 GHz, y todos coincidieron:
| Protocolo | Ranking completo de RSSI (mejor → peor) |
|---|---|
| BLE | 3 (-58.21 dBm) > 1 (-66.01) > 6 (-67.40) > 2 (-68.38) > 4 (-68.39) > 5 (-69.77) |
| BT Classic | 3 (-16.00) > 1 (-23.95) > 4 (-25.72) > 6 (-26.33) > 2 (-26.86) > 5 (-27.90) |
| ESPNOW | 3 (-43.31 dBm) > 1 (-47.44) > 4 (-50.86) > 6 (-53.48) > 2 (-54.45) > 5 (-54.48) |
La posición 3 arrasó: fue la mejor siempre, en los tres protocolos, sacándole entre 4.1 y 7.9 dB a la segunda. La 1 quedó segunda fija. Las posiciones 4, 6 y 2 quedaron ahí en el medio, muy pegaditas entre sí. Y la posición 5, la del centro, fue por lejos la peor (o empatada abajo del todo en ESPNOW).
Por qué posición 3 gana y posición 5 pierde: la explicación de RF
Esto encaja perfecto con lo que remarca Espressif. La antena necesita despeje de cobre alrededor (sin planos de masa ni componentes metálicos cerca) para no desintonizarse, y el feed tiene que apuntar hacia un borde libre de la placa.
La posición 3 está justo en una esquina, apuntando hacia afuera y sin nada al lado que la ahogue. La posición 5 es todo lo contrario: quedó encerrada entre las otras posiciones y rodeada de cobre por los cuatro lados, el ejemplo perfecto de antena descalibrada (detuning) por falta de despeje (keepout).
Para visualizar los resultados de una forma más intuitiva que un boxplot, armamos un script que genera imágenes estilo “larga exposición con LEDs sintéticos”: superpone puntos de luz coloreados sobre la foto de la placa, uno por cada muestra de RSSI, con un glow gaussiano suave y un blend tipo screen (la luz se acumula y aclara, sin tapar lo que hay debajo). El resultado es algo más parecido a una foto de larga exposición real que a una gráfica, y permite ver de un vistazo dónde concentra cada posición su nivel de señal y cuánto varía.



Un resultado que no cierra del todo: posiciones 3 y 6
Según las guías del fabricante, las posiciones 3 y 6 deberían ser las dos mejores: ambas tienen la antena fuera del base board y el feed point cerca del borde, que es exactamente lo que recomienda Espressif. La 3 cumplió siempre, pero la 6 no anduvo tan bien. En una tanda la 4 le ganaba a la 6 y en la siguiente se daba vuelta. La 3 y la 5 fueron súper estables siempre, pero la posición 6 en particular mostró bastante variación entre repeticiones.
No tenemos una respuesta definitiva todavía, manejamos algunas hipótesis.Como retiramos y acomodamos el módulo a mano para cada sesión, una mínima variación en el ángulo de apoyo pueda modificar la medición. Además, en 2.4 GHz las paredes y objetos del entorno generan rebotes (multipath) que cambian con diferencias milimétricas de distancia, que el entorno del ensayo haya perjudicado a esa posición en particular.
Lo que el throughput NO mostró en la primera tanda
Con los 8 kbps de entrada, la velocidad de transferencia dio exactamente igual en todas las posiciones y protocolos (8.00 kbps clavados).
Eso no quiere decir que la ubicación del módulo no afecte la velocidad. A esa tasa baja el enlace trabaja súper cómodo incluso en el peor escenario: estar a -70 dBm todavía queda lejísimos del límite de sensibilidad de estos chips. Hacía falta empujar la prueba al límite.
Segunda tanda: subiendo la velocidad de transferencia
Armamos una segunda tanda de ensayos. Mismas posiciones, misma distancia, mismos tres protocolos, pero exigiendo la red con paquetes más grandes y tiempos más apretados. Llevamos ESPNOW a unos 160 kbps, BLE a 200 kbps y Bluetooth Classic a 410 kbps (entre 20 y 50 veces más rápido que antes).
El RSSI volvió a mostrar la misma diferencia marcada:
| Protocolo | Mejor posición | Peor posición | Brecha (mejor − peor) |
|---|---|---|---|
| ESPNOW | 3 (-40.7 dBm) | 1 (-53.7 dBm) | 13.0 dB |
| BLE | 3 (-58.6 dBm) | 5, centro (-72.0 dBm) | 13.4 dB |
| BT Classic | 3 (-16.0, relativo) | 4 (-30.8) | 14.8 dB |
El ranking se acomodó un poco. Acá la posición 6 levantó cabeza:
| Protocolo | Ranking (mejor → peor) |
|---|---|
| ESPNOW | 3 > 6 > 5(centro) > 2 > 4 > 1 |
| BLE | 3 > 6 > 2 > 1 > 4 > 5(centro) |
| BT Classic | 3 > 6 > 1 > 2 > 5(centro) > 4 |
La posición 3 volvió a salir primera sin despeinarse, ganando en las dos tandas y en todas las mediciones. La 6 quedó segunda en los tres protocolos, algo que en la primera tanda no se notaba tan claro y que ahora sí responde a lo que sugiere Espressif (feed mirando hacia afuera). El resto de los puestos intermedios varió un poco: en esa zona del medio las diferencias son chicas y muy sensibles al entorno.
Y el dato más curioso de la segunda tanda: a pesar de exigir la red al máximo, el throughput apenas se enteró. Se veían caídas puntuales de rendimiento por ráfagas de paquetes perdidos, pero aparecían salpicadas en todas las posiciones por igual. Hace falta degradar muchísimo más la señal para que el rendimiento caiga de forma sistemática. El RSSI acusa la mala ubicación del módulo mucho antes de que lo notes en la velocidad de transmisión.
Permutación Transmisor/Receptor: enlace bidireccional (A → B vs B → A)
Para esta tercera ronda aumentamos la distancia entre placas a 350 cm (frente a los 230 cm anteriores) y permutamos transmisor y receptor en la segunda mitad de cada ensayo. Queríamos ver si la conexión de ida (A → B) y la de vuelta (B → A) dan simétrico en RSSI y throughput, o si el sentido del enlace introduce alguna diferencia.
Ranking de posiciones a 350 cm
Con la distancia mayor, la brecha entre mejor y peor posición se mantuvo amplia (entre 14.4 y 15.8 dB):
| Protocolo | Mejor posición | Peor posición | Brecha (mejor − peor) |
|---|---|---|---|
| ESPNOW | 3 (-49.33 dBm) | 6 (-63.74 dBm) | 14.41 dB |
| BLE | 3 (-65.40 dBm) | 5, centro (-81.17 dBm) | 15.78 dB |
| BT Classic | 3 (-23.88, relativo) | 5, centro (-38.54) | 14.66 dB |
El ranking varió un poco respecto a las tandas anteriores:
| Protocolo | Ranking completo de RSSI (mejor → peor) |
|---|---|
| BLE | 3 (-65.40 dBm) > 2 (-68.08) > 4 (-69.07) > 1 (-72.96) > 6 (-73.72) > 5 (-81.17) |
| BT Classic | 3 (-23.88) > 2 (-26.10) > 4 (-27.08) > 1 (-31.22) > 6 (-31.26) > 5 (-38.54) |
| ESPNOW | 3 (-49.33 dBm) > 2 (-51.67) > 4 (-53.99) > 5 (-55.55) > 1 (-56.89) > 6 (-63.74) |
La posición 3 volvió a quedar primera en todo. Esta vez la 2 subió al segundo puesto y la 4 al tercero, bastante parejas en los tres modos. La 5 (centro) siguió última en BLE y BT Classic, cayendo hasta -81 dBm en BLE. En ESPNOW la 6 fue la que se hundió al último lugar, probablemente porque esa orientación sufre más a 3.5 metros.



Throughput y simetría del enlace
El throughput dio prácticamente idéntico en ambas direcciones (A → B vs B → A):
- BLE: 7.80 kbps en A → B vs 7.91 kbps en B → A (p = 0.2494, no significativo).
- BT Classic: 7.87 kbps en A → B vs 7.89 kbps en B → A (p = 0.7621, no significativo).
- ESP-NOW: 7.84 kbps en A → B vs 7.89 kbps en B → A (p = 0.5612, no significativo).
El sentido del enlace puede meter asimetrías de RSSI chicas, del orden de 0.3 a 1.7 dB, probablemente por pequeñas diferencias de sensibilidad o emisión entre los dos módulos concretos que usamos. Pero el throughput no se entera, y la ubicación del módulo en el PCB sigue siendo lo que realmente importa.
Visualización de campo cercano
Las visualizaciones sintéticas estaban bien, pero nos dejaron con ganas de hacer la versión real: montar un LED WS2812B físico en la placa, moverlo en el espacio con la habitación a oscuras y capturar el recorrido con una cámara. Y la hicimos, o al menos lo intentamos.
Al principio probamos mover la placa con el led con la mano por encima de la placa de prueba. Se notaban cambios de color, pero como la trayectoria no era muy pareja que digamos, no se llegaba a apreciar un patrón limpio.
Usamos entonces una impresora 3D (una Artillery Sidewinder X1). Un script en Python generaba el G-code con un recorrido sistemático en el plano XZ, montamos la placa sobre el extrusor y dejamos que la máquina hiciera el barrido con el módulo en distintas posiciones. Los resultados:
Se puede ver una significativa cantidad de “rojo” para el caso de la posición 5, lo que indica una mala recepción de la señal.
Qué nos llevamos de esto para diseñar un PCB
Mover el módulo unos centímetros dentro de la misma placa cambia el RSSI entre 11 y 15 dB. No da lo mismo cualquier rincón.
Encerrar la antena en plano de masa es lo peor que podés hacer. El módulo en el centro, rodeado de cobre, dio los peores resultados en casi todas las pruebas. El feed apuntando hacia un borde libre es el camino seguro: la posición 3 (esquina con salida despejada) ganó en las seis pruebas que hicimos, y la 6 (mismo criterio: antena fuera y feed point en el borde) también rindió muy bien en la tanda rápida. La teoría del fabricante se cumple.
Dicho esto, perder 11 dB no es lo mismo que perder la comunicación. En todas las pruebas, incluso la posición 5 (la peor) mantuvo el enlace activo y el throughput no se desplomó hasta que forzamos tasas muy altas. Si el dispositivo va a operar a distancias cortas, en un entorno con buena propagación, o con un margen de enlace generoso, una ubicación subóptima puede ser perfectamente aceptable. El problema aparece cuando el presupuesto de señal es ajustado: mayor distancia, paredes, interferencia, o módulos de baja potencia. En esos escenarios, esos 11 dB que se “regalan” por una mala posición pueden ser la diferencia entre un enlace estable y uno que se cae.
Si solo medís velocidad de transferencia no vas a notar ninguna diferencia a corta distancia, aunque la señal esté 12 dB más abajo. El RSSI es la única métrica que te canta al toque si la posición es mala. Y ojo con las posiciones intermedias: el primer y el último puesto quedaron clarísimos, pero los del medio cambiaron un poco según la prueba. Si vas a tomar una decisión de diseño basándote en una posición intermedia, medí un par de veces más.
Nota sobre el RSSI en Bluetooth Classic: en este modo el firmware no lee un RSSI absoluto en dBm como en WiFi/ESP-NOW o BLE. El controlador de Bluetooth Classic del ESP32 sólo expone esp_bt_gap_read_rssi_delta(), que devuelve un valor relativo al “Golden Receive Power Range” — el rango de potencia que el propio chip considera ideal para su algoritmo interno de control de potencia. Un valor de 0 significa “la señal está dentro del rango ideal”, negativo significa “más débil de lo ideal” y positivo “más fuerte de lo ideal”, pero no es una medida de potencia absoluta ni comparable en dB directo contra el RSSI de WiFi o BLE. Por eso en los gráficos de BT Classic vas a ver una escala relativa (por ejemplo -16 a -28) en vez de valores típicos de dBm: no representan la misma magnitud física, y no hay que compararlos número contra número con los otros dos protocolos, solo la tendencia entre posiciones dentro del propio modo BT Classic.