¿Que es el Flipper Zero?



El Flipper Zero ha capturado la atención de la comunidad de ciberseguridad gracias a su diseño compacto y versátil. Aunque se ha señalado su potencial uso indebido, también exhibe una serie de aplicaciones legítimas que lo posicionan como una herramienta valiosapara todos los amantes de la tecnologíay aficionados en general.

Producto financiado a traves de Kickstarter, Flipper Zero, se describe como «un delfín cibernético al que realmente le encanta piratear», pero en realidad es un dispositivo multiherramienta de código abierto que fue diseñado para la investigación y realización de pruebas.

Flipper Zero, siendo una herramienta potente, posee el potencial de ser utilizada con intenciones maliciosas, aunque su nivel de peligrosidad no difiere significativamente de otras herramientas poderosas. La inquietud acerca de la seguridad del Flipper Zero surge principalmente de la desinformación, ya que muchas personas creen erróneamente que este dispositivo puede brindar acceso no autorizado, lo cual es falso. Es esencial destacar que la mayoría de las funciones del Flipper Zero son equivalentes a las que se pueden llevar a cabo con un teléfono móvil.

Veamos exactamente en que consiste esta «navaja suiza» de la conectividad ,algunas particularidades, usos legítimosy algunos aspectos legales que deberíamos respetar.

El dispositivo

El Flipper Zero es un pequeño dispositivo de bolsillo que ha causado sensación en el mundo de la ciberseguridad al combinar todas las herramientas de hardware necesarias para la exploración y el desarrollo sobre la marcha. Flipper se inspira en el proyecto pwnagotchi, pero a diferencia de otras placas DIY, Flipper se ha diseñado pensando en la comodidad del uso diario: tiene una carcasa robusta, botones prácticos y forma, por lo que no hay PCB sucias ni clavijas arañadas. Es una herramienta versátil que puede utilizarse para una variedad de propósitos, gracias a su numerosos sensores. Tiene tamaño muy pequeño de solo 3,5 x 2 x 0,8 cm y pesa 12 gramos y su precio ronda los 165€ en su pagina oficial ( flipperzero.one).

El sistema es controlado por un microcontrolador , concretamente el STM32WB55RG que cuenta con los siguientes carastericticas: 

  • Procesador de aplicaciones: ARM Cortex-M4 32 bits 64 MHz
  • Procesador de radio: ARM Cortex-M0+ 32 bits 32 MHz
  • Radio: Bluetooth LE 5.4, 802.15.4 y propietario
  • Flash: 1024 KB (compartida entre la aplicación y la radio)
  • SRAM: 256 KB (compartida entre la aplicación y la radio)

Cuenta con una pantalla LC monocroma muy pequeña de solo 1,4″ retroiluminada de 128×64 px con interfaz SPI(típica de las usadas con Arduino) , un puerto USB-C(12Mbs), una bateria LiPo de 2100maH (suficientes para unos 28 días de autonomia),un panel direccional de cinco botones, un lector de tarjetas microSD, pines GPIO (13 pines de E/S disponibles para el usuario en conectores externos de 2,54 mm con nivel CMOS de 3,3 V y entrada tolerante a 5V hasta 20 mA por pin digital), y una antena de 433 MHz que cuenta con un rango de alcance de 100 metros.

 El Flipper Zero está equipado con una serie de sensores y transmisores, que le permiten interactuar con una variedad de dispositivos y sistemas. Estos incluyen:

  • Antena RFID de 125 kHz: Permite al Flipper Zero leer y escribir tarjetas RFID, como tarjetas de proximidad y tarjetas de identificación.(Frecuencia: 125 kHz,Modulación: AM/OOK,Codificación: AKS, PSK,Tarjetas compatibles: EM400x, EM410x, EM420x, HID, Indala, FDX (A Y B), Pirámide,AWID, Viking, Jablotron, Paradox, PACStanley, Keri, Gallagher, Nexwatch)
  • Antena NFC: Permite al Flipper Zero leer y escribir tarjetas NFC, como tarjetas de crédito y tarjetas de transporte público.(transceptor: ST25R3916,frecuencia: 13,56 MHzf,Tarjetas compatibles: ISO-14443A/B, NXP MIFARE Classic®, Ultralight®, DESFire® etc., FeliCa™,● HID iClass (Picopass), Protocolos NFC Forum)
  • Transmisor de infrarrojos: Permite al Flipper Zero controlar dispositivos que utilizan señales infrarrojas, como televisores, aire acondicionado y reproductores de DVD.(Longitud de onda de recepción: 950 nm (+/-100 nm),Portadora RX: 38 KHz (+/-5%),Longitud de onda TX: 940 nm,Portadora TX: 0-2 MHz,Potencia de transmisión: 300 mW,Protocolos soportados: Familia NEC, Kaseikyo, RCA, RC5, RC6, Samsung, SIRC)
  • Sensor de ultrasonidos: Permite al Flipper Zero medir la distancia a objetos que estén cerca.
  • Sensor de vibración: Permite al Flipper Zero detectar vibraciones.

El Flipper Zero se puede utilizar para una variedad de propósitos, que incluyen:

  • Ciberseguridad: El Flipper Zero se puede utilizar para pruebas de penetración y análisis de vulnerabilidades.
  • Control de dispositivos: El Flipper Zero se puede utilizar para controlar dispositivos que utilizan tecnologías RFID, NFC o infrarrojos.
  • Creación de proyectos personalizados: El Flipper Zero se puede utilizar para crear proyectos personalizados, como juguetes, robots o dispositivos domésticos inteligentes.

RFID 125kHZ

Este tipo de tarjeta se utiliza mucho en los antiguos sistemas de control de acceso de todo el mundo. Es bastante tonta, sólo almacena un identificador de N bytes y no tiene ningún mecanismo de autenticación, lo que permite que cualquiera pueda leerla, clonarla y emularla. En la parte inferior de Flipper Zero se encuentra una antena de 125 kHz que puede leer tarjetas de proximidad de baja frecuencia y guardarlas en la memoria para emularlas más tarde.

También puede emular tarjetas introduciendo sus identificaciones manualmente.
Además, los propietarios de Flipper Zero pueden compartir los IDs de las tarjetas de forma remota con otros usuarios de Flipper Zero.

Una de las funciones más comunes del Flipper Zero es su capacidad para operar como una tarjeta de acceso RFID. Equipado con una antena RFID de 125 kHz, permite la interacción con tarjetas de proximidad, volviéndolo ideal para acceder a edificios, salas de conferencias y cualquier espacio que requiera identificación.

Gama Sub-1 GHz

Este es el rango operativo para una amplia clase de dispositivos inalámbricos y sistemas de control de acceso, como mandos a distancia de puertas de garaje, barreras de pluma, sensores IoT y sistemas remotos sin llave. Los usuarios pueden ampliar las capacidades de Flipper Zero instalando aplicaciones adicionales para leer datos de diversos dispositivos, como estaciones meteorológicas. Flipper lleva integrada una antena multibanda y un chip CC1101, lo que lo convierte en un potente transceptor con un alcance de hasta 50 metros.

El CC1101 es un transceptor universal diseñado para aplicaciones inalámbricas de muy bajo consumo. Admite varios tipos de modulaciones digitales, como 2-FSK, 4-FSK, GFSK y MSK, así como OOK y conformación ASK flexible. Puede realizar cualquier comunicación digital en sus aplicaciones, como la conexión a dispositivos IoT y sistemas de control de acceso.

Por todo ello el Flipper puede usarse como transceptor de radio (sub 1 GHz) para una larga lista de dispositivos que funcionan con ciertas frecuencias de radio (puertas de garaje, sensores IoT, llaves de coches, etc.), Flipper Zero puede escanear, grabar y reproducir estas señales.

NFC

lipper Zero incorpora un módulo NFC (13,56 MHz). Junto con el módulo RFID de 125 kHz, convierte a Flipper Zero en un dispositivo RFID definitivo que funciona tanto en rangos de baja frecuencia (LF) como de alta frecuencia (HF). El módulo NFC es compatible con los principales estándares.

Funciona prácticamente igual que el módulo de 125 kHz, permitiéndole interactuar con dispositivos habilitados para NFC: leer, escribir y emular etiquetas HF.

Bluetooth

El soporte completo de Bluetooth Low Energy (BLE) permite a Flipper Zero actuar como un dispositivo periférico, permitiéndole conectar su Flipper Zero a dispositivos de terceros y smartphones.

Hay aplicaciones para iOS y Android que le permiten actualizar su Flipper Zero a través de BLE, controlar remotamente el dispositivo, compartir claves y gestionar datos en una pantalla más grande.

Transceptor/Receptor de infrarrojos

El transmisor de infrarrojos puede transmitir señales para controlar aparatos electrónicos como televisores, aparatos de aire acondicionado (AC), equipos de música y otros.

Flipper Zero tiene una librería de señales incorporada para las marcas más comunes de TV, AC, proyectores, sistemas estéreo. Esta biblioteca se actualiza constantemente por la comunidad Flipper Zero añadiendo nuevas señales a la base de datos de IR Remote.

Flipper Zero también tiene un receptor de infrarrojos que puede recibir señales y guardarlas en la biblioteca, por lo que puede almacenar cualquiera de sus mandos a distancia existentes para transmitir comandos más tarde, y añadirlos a la base de datos pública de IR Remote para compartirlos con otros usuarios de Flipper Zero.

Por tanto el Flipper Zero se convierte en un mando a distancia universal al incorporar una función de infrarrojos, permitiendo el control de dispositivos como televisores, aire acondicionado o calefacción. Al igual de como funciona el control remoto de su televisor el Flipper Zero puede enviar el mismo tipo de señales pues también incluye una biblioteca cada vez mayor de códigos remotos. Ciertamente existen apps para Android para aquellos smartphone que cuentan con infrarrojos les ofrece una funcionalidad similar, pero es interesante que el flipper zero también lo soporte .

Iwire

Flipper Zero tiene incorporado un conector 1-Wire para leer las teclas de contacto iButton. Esta vieja tecnología es todavía ampliamente utilizada en todo el mundo. Utiliza el protocolo 1-Wire que no tiene ninguna autentificación. Flipper puede leer fácilmente estas llaves, almacenar IDs en la memoria, escribir IDs en llaves en blanco y emular la propia llave.

Flipper Zero tiene un diseño único de almohadilla de contacto iButton – su forma funciona tanto como lector como sonda para conectarse a los enchufes iButton

Herramienta de exploración de hardware

Flipper Zero es una herramienta versátil para la exploración de hardware, flasheo de firmware, depuración y fuzzing. Se puede conectar a cualquier hardware utilizando GPIO para controlarlo con botones, ejecutar su propio código e imprimir mensajes de depuración en la pantalla LCD. También se puede utilizar como un adaptador USB a UART, SPI, I2C, etc.

Es completamente autonomo:Flipper incorpora clavijas de alimentación de 5 V y 3,3 V. Se puede controla el dispositivo con la ayuda de los botones y la pantalla incorporados, por lo que no se necesita PC.

Convertidor SPI, UART, I2C a USB: permite comunicción con cualquier hardware desde tu aplicación de escritorio.

Herramientas de flasheo y depuración:Programador SPI Flash,Programador AVR ISP y OpenDAP
Herramienta de Fuzzing :Pruebas de cualquier protocolo y señal

Además, el Flipper Zero puede desempeñar el papel de un sonar gracias a su sensor de ultrasonido, útil para medir la distancia a objetos cercanos, siendo beneficioso en actividades como la caza, la pesca o la navegación.

Este dispositivo también se destaca como un metrónomo o afinador de guitarra, gracias a su sensor de vibración que mide el ritmo o la frecuencia de un sonido.

Adicionalmente, el Flipper Zero ofrece otras aplicaciones legítimas, como:

  • Control remoto de ordenadores: Gracias a la conexión USB, se puede acceder a su ordenador desde cualquier ubicación. Esta característica resulta especialmente útil cuando no se puede utilizar nuestro PC directamente, permitiéndonos operarlo desde nuestro teléfono móvil o cualquier otro ordenador a distancia.
  • Creación de un luxómetro: Una aplicación ingeniosa del Flipper Zero es utilizarlo como luxómetro, midiendo la intensidad de la luz en un entorno dado. Solo necesitas el software adecuado para transformar este dispositivo en un luxómetro portátil y fácil de utilizar.
  • Análisis del funcionamiento de una llave de coche: Para vehículos más antiguos, la antena inalámbrica sub-1 GHz del Flipper Zero puede ser utilizada para verificar el estado de la llave y de la batería.
  • Juego de videojuegos clásicos: Para los aficionados a los videojuegos clásicos, existen paquetes de software disponibles en GitHub que te permiten disfrutar del icónico juego Doom en tu Flipper Zero, añadiendo un toque lúdico a tus momentos de ocio.
  • Análisis del entorno: El Flipper Zero se puede emplear para analizar las frecuencias circundantes, útil para detectar dispositivos inalámbricos como cámaras de seguridad o routers.

Uso ético

El Flipper Zero es una herramienta poderosa que puede utilizarse para una variedad de propósitos. Sin embargo, es importante utilizarlo de forma ética y legal, ya que puede conllevar riesgos si no se utiliza de forma responsable. Por ello es importante reconocer el lado menos ético del Flipper Zero pues su uso indebido puede acarrear una serie de riesgos, como acciones legales, violación de la privacidad, daño a sistemas y dispositivos, así como riesgos personales.

Es fundamental que los usuarios del Flipper Zero estén conscientes de estos riesgos y los consideren al emplear el dispositivo. Aunque el Flipper Zero puede ser una herramienta valiosa para aprender y mejorar en ciberseguridad, su utilización debe ser responsable.

Aquí se presenta un resumen de los posibles riesgos asociados al Flipper Zero:

  1. Acciones Legales: El uso del Flipper Zero para acceder a dispositivos o sistemas sin autorización puede resultar en acciones legales, como multas o incluso penas de prisión.
  2. Violación de la Privacidad: El Flipper Zero puede ser empleado para acceder a información privada, como contraseñas o datos bancarios, lo que constituiría una violación de la privacidad de terceros.
  3. Daño a Sistemas y Dispositivos: La utilización indebida del Flipper Zero podría provocar daños a sistemas y dispositivos, como ordenadores o routers, con consecuencias que van desde la pérdida de datos hasta fallos críticos.
  4. Riesgos Personales: Emplear el Flipper Zero en entornos peligrosos, como escalar muros o asomarse a ventanas, podría representar un riesgo personal.

Para evitar estos peligros, se insta a utilizar el Flipper Zero de manera ética y legal, lo que implica:

  • Utilizar el dispositivo exclusivamente para propósitos legítimos.
  • Obtener permiso de los propietarios de dispositivos o sistemas antes de acceder a ellos.
  • Respetar la privacidad de los demás.
  • Utilizar el dispositivo con precaución en entornos potencialmente peligrosos.

El Flipper Zero se presenta como una herramienta útil con diversas aplicaciones, pero su uso debe ser guiado por la responsabilidad. Para garantizar un uso seguro del Flipper Zero, se recomienda emplearlo exclusivamente con fines legítimos, obtener el consentimiento de los propietarios de dispositivos o sistemas antes de acceder a ellos, respetar la privacidad de terceros y utilizar el dispositivo con precaución en entornos potencialmente riesgosos.

Timbre a distancia por wifi


Hoy en dia es relativamente asequible poder abordar proyectos con un nivel de acabado excepcional usando tecnologia de impresión 3d por ejemplo , y al mismo tiempo emplear componentes muy compactos, económicos y muy sencillos de programar además sin necesidad de soldar nada.

En este post vamos a ver un interesante proyecto de Giovanni Aggiustatutto en su proyecto de timbre a distancia por Wifi , que básicamente se compone de un módulo de micrófono de detección compatible con Arduino y dos módulos compatibles con ESP8266 : uno para la parte de transmisión y otro para la parte de recepción. Además el circuito se completa con dos cajas impresas en 3D , aunque por su tamaño se puede usar cualquier otro soporte.

El resultado desde luego queda totalmente sorprendente como podemos ver en la imagen.

Obviamente este proyecto puede servir para reenviar el timbre a otro lugar gracias a la cobertura wifi, lo cual lo hace muy versatil por ejemplo para extender la llamada del clasico interfono, la llamada de un intercomunicador, la llamada normal de un telefono fijo/inalambrico y como no como sencilla alarma por sonido.

La electrónica de este proyecto, aunque nos pueda asustar, en realidad es bastante sencilla porque todo pasa por el módulo detector que viene ya ensamblado pero que debemos ajustar al nivel de ruido en que sea detectado la señal de timbre que generara un pulso de disparo que será recogido por un ESP8266 y enviado hacia el otro ESP8266 que presentara una alerta.

El AZDelivery KY038 es un módulo de detección de sonido de alta sensibilidad ideal para muchos proyectos y aplicaciones, por ejemplo para sistemas de alarma sonora (como el de este proyecto).

El Modulo de micrófono cuenta con un micrófono de condensador eléctrico y una salida de señal de un solo canal. La señal de salida de bajo nivel se utiliza para la luz de control de sonido. Este módulo utiliza un micrófono en miniatura para detectar los niveles de sonido. Es crucial que dispone de un comparador basado en un CI LM393 con un potenciómetro para ajustar el nivel disparo para producir una salida digital de nivel alto, que es el que utilizaremos para transmitir la señal de alarma.

Componentes

Estos son los componentes del proyecto:

2 mini placas ESP8266 Wemos D1 (en realidad puede usarse también un ESP32 adaptando el código y las librerías correspondientes)
5 LEDs rojos
1 LED verde
6 resistencias de 330 ohmios para los LEDs
1 zumbador fuerte
1 interruptor
1 módulo sensor de sonido Arduino
Conector JST de 3 pines
Cable de JST a puente
Conectores Jumper
Perfboard
Cable
8 insertos roscados M3
8 tornillos M3x12 mm

El circuito

El receptor no puede ser mas sencillo pues básicamente se compone de un pequeño display de 5 leds conectados directamente a los 5 puertos (configurados como salidas digitales del ESP8266) mediante sendas resistencias de 680 ohmios . Además también para que sea perceptible realmente la llamada, usaremos un pequeño zumbador piezoeléctrico de alta potencia conectado también a un puerto del microcontrolador con un interruptor en serie para poder cortar el sonido y no moleste si es persistente porque si lo veremos con una indicación luminosa.

La parte del transmisor es si cabe mas simple pues únicamente se compone del detector de sonido cuya salida se conecta a un pin de entrada digital del ESp8266.

En este punto es importante estudiar la parte que detecta cuando suena algun sonido fuerte como el timbre del teléfono o del interfono, pues para detectar cuando suena el teléfono, se utiliza un módulo sensor de sonido hecho para Arduino, que lleva un pequeño micrófono.

Estos módulos son muy sencillos de usar porque en los pines hay conexiones para la alimentación y una salida digital, que se activa cuando el ruido que escucha el micrófono es superior a un cierto umbral, que fijamos con el potenciómetro. Este micrófono se colocará cerca de la base del teléfono o interfono lo mas cerca del timbre o altavoz interno (en el caso de un telefono convencional) o en caso de un interfono cerca del altavoz del micro teléfono o del zumbador, por lo que activará el timbre adicional cuando haya una llamada.

Montaje

La caja exterior que contendrá la placa transmisora ESP8266 conectada al micrófono será igual que la caja del timbre, pero en la parte trasera tendrá un conector para conectar el micrófono y en la parte delantera sólo tendrá un LED, para indicar cuando se detecta un sonido y es transmitido al otro modulo receptor.

De forma practica soldamos un conector JST de 3 pines en un pequeño trozo de placa perforada , al que conectamos tres cables para 3,3v, GND y la señal digital del módulo del micrófono. Estos tres cables van a los pines correspondientes de la placa.Para conectarle el módulo de micrófono utilizamos un cable JST a jumper, con el conector JST enchufado a la caja que acabamos de hacer y el conector jumper enchufado a GND, positivo y salida digital del módulo de micrófono.

La caja para la placa conectada al receptor es exactamente igual a la del transmisor, para dar continuidad al diseño. El otro ESP8266 configurado como receptor puede ir en una placa de prototipos y encaminar los pines del ESP8266 necesarios para el módulo del micrófono y los LEDs de estado que conectaremos a la placa mediante conectores jumper. Esta vez la resistencia para el LED en la placa, y dos cables directamente entre los dos pines de un LED rojo y los dos puentes correspondientes de la placa. También esta vez pegamos el LED en el soporte del LED, y pegamos también el soporte a la caja. Luego pegamos el conector JST en el agujero del panel trasero de la caja. Al igual que con el timbre, pegamos la placa dentro de la caja con un trozo de plástico debajo, para que el puerto USB quede alineado con el agujero del panel. Como última cosa cerramos la tapa con tornillos M3 atornillados en los agujeros roscados, y podemos decir que también el sensor de sonido está terminado.

ESP-Now

Antes de realizar cualquier conexión eléctrica, primero tenemos que subir el código a las dos placas ESP8266. Para conectar el ESP8266 que estará cerca del teléfono al que está conectado al zumbador y a los LEDs, utilizamos el protocolo de comunicación WiFi ESP-NOW, que es una librería proporcionada por Espressif, el fabricante del chip ESP.

ESP-Now es otro protocolo de comunicación inalámbrica desarrollado por Lexin, que puede permitir que múltiples dispositivos se comuniquen sin Wi-Fi sin usar Wi-Fi. Este protocolo es similar a un bajo consumo de energía de una conexión inalámbrica de 2.4GHz comúnmente común en el dispositivo de ratón inalámbrico debe emparejarse antes de comunicarse. Después del emparejamiento, la conexión entre los dispositivos es continua, punto a punto, y no se requiere un protocolo de apretón de manos. Es una breve transmisión de datos y una tecnología de comunicación rápida no conectada que permite que los controladores de baja potencia controlen directamente todos los dispositivos inteligentes sin conectar enrutadores. Es adecuado para luces inteligentes, control remoto y retorno de datos del sensor.

Después de usar la comunicación ESP-Now, si un determinado dispositivo se apaga repentinamente, siempre que se reinicie, se conecta automáticamente al nodo correspondiente para volver a comunicarse.

ESP-Now admite las siguientes características:

  • Paquete de paquete de transmisión única o paquete de transmisión única sin comunicación cifrada;
  • Uso mixto de equipos de emparejamiento de cifrado y equipos no cifrados;
  • Se pueden transportar datos de carga útil que pueden transportar hasta 250 bytes;
  • Configuración de soporte para enviar una función de devolución de llamada para notificar a la fallas o éxito de envío de envío o éxito de envío de la capa de aplicación.

Del mismo modo, hay algunas restricciones en ESP-Now:

  • Los paquetes de transmisión no son compatibles temporalmente;
  • Hay restricciones en el dispositivo de emparejamiento cifrado, y el modo de estación admite hasta 10 dispositivos de emparejamiento encriptados; el modo híbrido SoftAP o SoftAP + Station admite hasta 6 dispositivos de emparejamiento cifrados en el modo mixto. Los dispositivos de emparejamiento no cifrados admiten varios, y el número total de dispositivos de cifrado no es más de 20;
  • La carga útil efectiva se limita a 250 bytes.

Elegimos esta biblioteca porque es muy fácil de usar configurando ambos ESP como una comunicación unidireccional.

FIRMWARE

En la parte transmisora usaremos los pines 12 (ledPin) y el pin 14 ( pic Pin), respectivamente el pin 12 al que conectaremos el led indicador de detección de sonido y el pin 14 al que conectaremos la salida digital del modulo detector de sonido.

Antes de subir el código a las dos placas, necesitamos saber la dirección MAC de la placa que usaremos como receptor. Para ello, podemos subir el siguiente boceto a través del IDE de Arduino.

#include "WiFi.h"

//#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_MODE_STA);
  //WiFi.mode(WIFI_AP_STA);
  Serial.println(WiFi.macAddress());
}

void loop() {
}

Una vez subido el sketch, abrimos el monitor serie y esperamos a que aparezca la dirección MAC de la placa. Esta dirección hay que copiarla de ahí y pegarla en el código de la placa transmisora, antes de subirla.

#include <ESP8266WiFi.h>
#include <espnow.h>

//Aquí es donde se inserta la dirección MAC en el código.
// REPLACE WITH RECEIVER MAC Address (example 34:94:54:8E:13:20)
uint8_t broadcastAddress[] = {0x34, 0x94, 0x54, 0x8E, 0x13, 0x20};


// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
  bool isRinging;
} struct_message;


// Create a struct_message called myData
struct_message myData;


unsigned long lastTime = 0;  
unsigned long timerDelay = 800;  // send readings timer


int micStatus = 0;


const int micPin = 14;  // D5
const int ledPin = 12;  // D6


// Callback when data is sent
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Last Packet Send Status: ");
  if (sendStatus == 0){
    Serial.println("Delivery success");
  }
  else{
    Serial.println("Delivery fail");
  }
}

void setup() {
  // Set microphone pin as input
  pinMode(micPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  // Init Serial Monitor
  Serial.begin(74880);

  // Set device as a Wi-Fi Station
  WiFi.mode(WIFI_STA);


  // Init ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }


  // Once ESPNow is successfully Init, we will register for Send CB to
  // get the status of Trasnmitted packet
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  esp_now_register_send_cb(OnDataSent);

  // Register peer
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}

void loop() {
  if (digitalRead(micPin) == HIGH) {
    micStatus = 1;
    digitalWrite(ledPin, HIGH);
  }

  if ((millis() - lastTime) > timerDelay) {
    if (micStatus == 0) {
      myData.isRinging = false;
      digitalWrite(ledPin, LOW);
    }


    if (micStatus == 1) {
      myData.isRinging = true;
      micStatus = 0;
    }


    // Send message via ESP-NOW
    esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

Respecto al receptor conectaremos cuatro leds indicadores de presencia de sonido en los pines 12,14,0 y 4 conformando así una especie de vu-meter . Además en el pin 13 conectaremos un led de estado , y para terminar , para que sea de verdad perceptible, en el pin 5 conectaremos un zumbador de alta potencia.

El código de la placa receptora es el siguiente, y puede cargarse sin modificaciones.

#include <ESP8266WiFi.h> 
#include <espnow.h>


// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
  bool isRinging; 
} struct_message;


// Create a struct_message called myData
struct_message myData;


const int led1 = 12;  // LEDs from the top to the bottom of the device
const int led2 = 14;
const int led3 = 0;
const int led4 = 4;
const int statusLed = 13;
const int buzzer =  5;
const long buzzerTime = 200 ;
long timeFromLastUpdate = 0;
unsigned long previousMillis = 0;
const long interval = 500;


bool produceSound = false;
bool produceLight = false;
bool flag = false;
bool previousFlag = false;
bool hasIncremented = false;
int numberOfBlinks = 10;


// Callback function that will be executed when data is received
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.println("Data received!");


  if (myData.isRinging == false) {
    produceSound = false;

    digitalWrite(statusLed, LOW);
    timeFromLastUpdate = millis();
  }


  if (myData.isRinging == true) {
    digitalWrite(statusLed, LOW);
    timeFromLastUpdate = millis();
    //produceSound = true;
    //produceLight = true;


    //numberOfBlinks = 0;
  }
}

void setup() {
  // Set LED and ring pin as output
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(statusLed, OUTPUT);
  pinMode(buzzer, OUTPUT);

  // Initialize Serial Monitor
  Serial.begin(74880);

  // Set device as a Wi-Fi Station
  WiFi.mode(WIFI_STA);


  // Init ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  // Once ESPNow is successfully Init, we will register for recv CB to
  // get recv packer info
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}


void loop() {
  unsigned long currentMillis = millis();

  if ((timeFromLastUpdate + 10000) < millis()) {
    digitalWrite(statusLed, HIGH);
  } 


  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    flag = !flag;
  }

  callRoutine();
  blinkLeds();
  soundBuzzer();
}


void blinkLeds() {
  if (flag == true && (produceLight == true || numberOfBlinks <= 5) && hasIncremented == false) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    numberOfBlinks++;
    hasIncremented = true;

    produceLight = false;

    Serial.print("on ");
    Serial.println(numberOfBlinks);
  }


  if (flag == false) {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    Serial.println("off");


    hasIncremented = false;
  }
}


void soundBuzzer() {
  if (flag == true && produceSound == true) {
    digitalWrite(buzzer, HIGH);
    produceSound = false;
  }


  if (flag == false) {
    digitalWrite(buzzer, LOW);
  }
}


void callRoutine() {
  if (myData.isRinging == true && previousFlag != flag) {
    produceSound = true;
    produceLight = true;
    numberOfBlinks = 0;
  }


  else {
    previousFlag = flag;
  }
}

Mas información en https://www.instructables.com/Wireless-Loud-Phone-Ringer-Help-Elderly-With-Elect/