La mayoria de los BLE Tag son o emisores puros (un localizador que nunca escucha) o escaneadores continuos (una etiqueta que debe oir el ping del gateway). El emisor puro es invisible a las ordenes centralizadas; el escaneador agota una pila boton en semanas. Este articulo trata el termino medio: hacer que la etiqueta sea localizable bajo demanda manteniendo la corriente media en microamperios bajos.

El problema de la localizacion

Un BLE Tag que solo anuncia no puede ser paginado. Si quieres “encontrar este activo concreto ahora” o empujar un cambio de configuracion, el gateway no tiene con quien hablar. La solucion ingenua es hacer que la etiqueta escanee continuamente:

  • Corriente RX en un SoC tipico (nRF52840, nRF5340): 4-8 mA
  • Una CR2032 con ~220 mAh utiles: 220 / 8 aproximadamente 27 horas

Eso es inaceptable. La escucha continua convierte una etiqueta de anos en una de un dia.

Tres estrategias de escucha

Estrategia Corriente escucha Latencia alcance Coste anual bateria*
Escaneo continuo 5-8 mA ~10 ms se agota en dias
Escaneo periodico (duty-cycled) 200-400 uA media un intervalo (p.ej. 2 s) meses
Receptor wake-up (WuR) 50-200 nA simbolo wake + arranque (~5-50 ms) anos

*CR2032, base de emision idle 5 uA sumada.

El escaneo periodico cambia latencia por corriente: abre una ventana RX de W ms cada T ms. Corriente media de escucha aproximadamente I_rx * W / T. Con W=100 ms, T=2000 ms, I_rx=5 mA: media aproximadamente 250 uA. Suma la base y estas en ~300 uA – meses de vida, pero lejos de los anos de un emisor puro.

Receptores wake-up

Una radio wake-up es un segundo receptor de ultrabaja potencia sintonizado a un simbolo wake dedicado. Escucha casi continuamente a 50-200 nA y, al detectar un patron valido, alimenta la radio BLE principal. Como la radio principal solo funciona tras un evento wake, su corriente RX de 5 mA se amortiza en eventos raros.

Implementaciones WuR para etiquetas tipo BLE:

  • WuR Sub-GHz OOK/ASK (p.ej. 433 MHz, 868 MHz): largo alcance, barato, PHY propietaria. El gateway despierta todas las etiquetas en rango; cada una valida un token antes de arrancar BLE.
  • Inductivo 125 kHz: alcance muy corto (cm-m), bueno para lectores “toca para despertar”, inmune a congestion 2.4 GHz.
  • Sniff de preambulo en banda: algunos SoC hacen sniff de bajo consumo del preambulo BLE; no es un WuR real pero mas barato que RX completo.
  • IC WuR dedicado: chip independiente en 2.4 GHz que da interrupcion al SoC; escucha total ~100 nA.

No hay wake-up BLE estandar; cada fabricante lo hace de forma propietaria. Preve un gateway que hable tu PHY WuR.

Matematica de latencia

Paginacion sin conexion: latencia maxima = periodo ventana wake T. Si el gateway envia el simbolo wake L ms y el WuR muestrea cada S ms, la etiqueta responde en S + arranque. Con S=100 ms y arranque BLE 20 ms, peor caso ~120 ms.

Orientado a conexion (luego conecta): suma establecimiento de conexion (~30-80 ms) y descubrimiento GATT si no esta en cache. Presupuesta ~150-250 ms de extremo a extremo.

Una etiqueta de escaneo periodico tiene peor peor caso: puede perder la ventana de paginacion del gateway y esperar un intervalo T completo. Con T=2 s eso es hasta 2 s de latencia – bien para “localizar activo” pero mal para uso interactivo.

Ejemplo de presupuesto de potencia

Etiqueta paginada 10 veces/dia, cada wake arrancando BLE 200 ms a 5 mA:

  • Escucha WuR: 100 nA * 86400 s = 8.64 mC/dia
  • 10 wakes * 200 ms * 5 mA = 10 mC/dia
  • Emision base 5 uA * 86400 = 432 mC/dia
  • Total aproximadamente 451 mC/dia -> CR2032 (220 mAh = 792000 mC) -> ~4.8 anos

La corriente de escucha WuR es error de redondeo. Esa es toda la clave.

Bosquejo de implementacion

<h1>pseudo: nRF despierta por interrupcion desde IC WuR</h1>

def on_wake_interrupt():
ble.power_on()
ble.advertise_wake_token(signed_token)   # prueba que es una pagina real
if gateway.connected:
handle_command()
ble.power_off()

<h1>RTC programa escaneo periodico de respaldo si WuR falla</h1>

rtc.every(3600s, short_scan, window_ms=50)

El token wake firmado importa: sin el, un atacante con transmisor WuR puede despertar todas las etiquetas en rango continuamente y agotar la flota (ataque denial-of-sleep).

Nota de seguridad

Un simbolo wake sin autenticar es un primitivo de DoS de bateria. Exige un token autenticado y con proteccion de replay (p.ej. HMAC con clave por etiqueta + contador rotativo). Una etiqueta que no puede verificar el token debe seguir dormida. Tambien limita tasa: ignora un segundo wake en N segundos para mitigar un bucle jam-and-drain.

Cuando usar una etiqueta WuR

  • Debes paginar activos concretos (“muestrame donde esta la paleta X ahora”).
  • Las etiquetas duermen anos entre contactos (cadena de frio, activos estaticos).
  • La densidad de gateways es baja y no puedes costear cobertura continua por etiqueta.

Omitelo si la etiqueta es emisor puro ya cubierto por gateways fijos, o si la latencia bajo ~100 ms es obligatoria (entonces manten un pequeo escaneo periodico).

Conclusion

Un BLE Tag no tiene que elegir entre “nunca localizable” y “bateria muerta en una semana”. Un receptor wake-up mueve el coste de escucha de miliamperios a nanoamperios, y un escaneo periodico es el termino medio pragmatico cuando no hay PHY WuR. Dimensiona ventana e intervalo wake contra tu presupuesto de latencia, autentica el wake, y la etiqueta sigue localizable por anos.