Como obtener el numero llamante con Arduino


CLI, también conocido como Identificador de llamadas y entrega de números de llamada (CND), es un servicio ofrecido por el proveedor de servicios telefónicos a los clientes para obtener el número de parte que llama y la fecha / hora de la llamada. La activación del servicio y el formato de información de la CLI son diferentes de un operador de red telefónica a otro.

Para decodificar la modulación FSK del número llamante (Caller ID) de forma sencilla con Arduino, la forma más práctica es usar un módulo decodificador dedicado como el HT9032D que soporta la decodificación FSK Bell 202, que es el estándar usado para enviar la información del número llamante en sistemas analógicos telefónicos. Este módulo se conecta entre la línea telefónica (RJ11) y el Arduino, que recibe los datos ya demodulados en forma digital serial para procesarlos y mostrar el número en una pantalla LCD o enviar la información por puerto serie.

Hardware mínimo

  • Arduino (cualquier modelo básico como Arduino Uno o Nano es suficiente).
  • Módulo demodulador FSK Bell 202, típicamente el HT9032D:
    • Este módulo convierte la señal FSK analógica de la línea telefónica en una señal digital serial que el Arduino puede leer.
  • Aislamiento y acoplamiento a línea telefónica:
    • Un adaptador o un transformador de audio para aislar eléctricamente la línea telefónica del Arduino y proteger el equipo.
    • Resistencias y condensadores para el acoplamiento y filtrado según el esquema del módulo HT9032D.
  • Fuente de alimentación estable para Arduino y el módulo.

Opcionales (pero recomendados)

  • Pantalla LCD o display serial para mostrar el número llamante.
  • Cables y conectores RJ11 para conectar la línea telefónica al módulo demodulador.

Resumen de los componentes:

ComponenteFunción
Arduino Uno/NanoProcesa la señal digital decodificada
Módulo HT9032DDemodula la señal FSK analógica
Aislamiento (transformador)Protección y acoplamiento a la línea telefónica
Cables RJ11Conexión con línea telefónica

Este conjunto es el hardware mínimo básico para un sistema funcional de decodificación de Caller ID FSK con Arduino sin desarrollar desde cero la parte de demodulación FSK, lo que implicaría más componentes analógicos y circuitos complejos.

El HT9032D es un circuito integrado específicamente diseñado para la decodificación de señales FSK Bell 202, que es el esquema de modulación utilizado en las señales de Caller ID en líneas telefónicas analógicas. Funciones principales del HT9032D:

  • Demodula la señal FSK recibida desde la línea telefónica, convirtiendo las variaciones de frecuencia en datos digitales seriales.
  • Soporta la decodificación del protocolo estándar Bell 202 para Caller ID.
  • Proporciona una salida digital compatible con microcontroladores como Arduino para facilitar la lectura de los datos.
  • Incluye control y filtrado interno para separar la información útil relacionada con el número llamante (MDMF).

Desde la hoja de características del fabricante Holtek podemos ver un ejemplo típico de aplicación:

Vemos en el circuito como la señal de la línea telefònica en lugar de usar un transformador usa dos condensadores de 0.2microFaradios cuyos extremos van acoplados a un puente de diodos y su salida mediante un divisor de tensión es la que usaremos en el microcontrolador como RING-SENSE. Además de la línea telefónica también directamente van sendas resistencias de 200k y condensadores de 0.01microFaradios hacia los pines TIP y RING del. Respecto a la parte superior derecha, es solo opcional y es la parte de alimentación de 5V DC pues HT1050 es simplemente un regulador de 5v del propio fabricante.

Ojo porque el esquema entregado por el fabricante anterior presenta varias imprecisiones respecto al terminal X2 y las conexiones del microcontrolador, por lo que es mejor usar el siguiente esquema:

Es interesante destacar como la señal de la línea telefònica en lugar de usar un transformador usa dos condensadores de 0.2microFaradios cuyos extremos van acoplados a un puente de diodos y su salida mediante un divisor de tensión es la que usaremos en el microcontrolador como RING-SENSE.

Asimismo de la línea telefónica directamente también mediante sendas resistencias de 200k y condensadores de 0.01microFaradios son las señales de TIP y RING que van conectados directamente al chip.

El circuito se complementa con un circuito resonante conectados a los terminales X1 y X2 (ojo porque en el esquema del fabricante han obviado el terminal X2). Este circuito esta conectado al chip por un cristal del cuarzo de 3.58Mhz, una resistencia de 10M en paralelo y dos pequeños condensadores de 33pF conectados a masa. Por cierto, la señal PDWN se obtiene del chip derivándola también a masa con una resistencia de 22k

Por ultimo la salida de DATA del chip corresponde a la salida DOUT que usaremos en el microcontrolador.

En la imagen podemos ver el circuito montado, aunque si lo deseamos dado el numero reducido de componentes ( 7 resistencia s y 7 condensadores , el puente, el cristal y el chip HT9032D) también podemos montar en una placa de prototipos.

Este es el detalle de los componentes:

  • C1, C3 : 0.01μF / 400V Mylar Capacitor
  • C2 : 0.1μF / 50V Mylar Capacitor
  • C4, C5 : 33pF Ceramic Capacitor
  • C6, C7 : 0.22μF / 400V Mylar Capacitor
  • D1 : 2W10 Bridge rectifier
  • R1, R2 : 200KΩ
  • R3 : 22KΩ
  • R4 : 10MΩ
  • R5 : 470KΩ
  • R6 : 18KΩ
  • R7 : 15KΩ
  • U1 : HT9032D (DIP-8)
  • Y1 : 3.58MHz (HC49) Crystal
  • J1 : Molex 52018-6616 or equivalent RJ11 / 6P6C PCB socket
  • J2 : 5-pin 2.54mm Pin header

Como vemos pues en resumen , estas son las fases para obtener el numero llamante:

  • Utilizar un módulo HT9032D (o similar) para demodular la señal FSK de la línea telefónica.
  • Conectar el pin de salida digital (DATA OUT) del módulo HT9032D a una entrada RX del Arduino.
  • El Arduino lee la señal digital, que sigue el protocolo Bell 202 (1200 baud, mark 1200Hz, space 2200Hz).
  • Procesar la trama de datos MDMF (Multiple Data Message Format) para extraer el número llamante, fecha y hora.
  • Opcionalmente mostrar esos datos en un display LCD o enviarlos a un ordenador.

Ventajas de esta configuración:

  • No se requiere implementar desde cero la demodulación FSK (que es compleja).
  • El HT9032D está específicamente diseñado para este propósito.
  • Hay ejemplos de códigos para Arduino que leen los datos y los decodifican fácilmente.

Ejemplo de uso

Se pueden encontrar esquemas y código Arduino en proyectos como «Arduino Telephone Caller ID Unit» con HT9032D, donde se conecta la línea telefónica al módulo y éste al Arduino, y el código lee la información serial codificada en FSK ya demodulada por el módulo.

Esta solución es sencilla para un usuario Arduino que desea mostrar el número llamante sin tener que desarrollar un demodulador FSK desde cero, que sería bastante más complejo.

Circuito auxiliar

Este seria el montaje final:

Por tanto, para un método sencillo de decodificar la modulación FSK del número llamante con Arduino, se recomienda usar un módulo HT9032D con Arduino para recibir datos seriales decodificados y procesar la trama Caller ID. Para decodificar FSK Caller ID con Arduino, el hardware mínimo que se recomienda es el siguiente:

Aplicación típica

En proyectos con Arduino para decodificar el número llamante, el HT9032D se conecta directamente a la línea telefónica (con el debido aislamiento), y su salida digital se conecta a una entrada del Arduino. El Arduino luego interpreta los datos seriales para extraer y mostrar el número.

Codigo arduino con comentarios

/*****************************************************************************
 Copyright 2021 Dilshan R Jayakody.
 
*/

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

// Crear interfaz serial para callerID en el pin 10 (RX) y 11 (TX).
#define CALLER_ID_RX  10
#define CaLLER_ID_TX  11

#define LCD_RS      2
#define LCD_EN      3
#define LCD_DATA4   4
#define LCD_DATA5   5
#define LCD_DATA6   6
#define LCD_DATA7   7

#define LCD_BACKLED         12
#define LCD_CALL_ALERT_LED  13

#define RING_DET_PIN  8
#define CLI_PWDN_PIN  9

#define MDMF_HEADER   0x80
#define MDMF_PARAM_TIME   0x01
#define MDMF_PARAM_CID    0x02
#define MDMF_PARAM_NAME   0x07 

#define EEPROM_NUM_OFFSET   1
#define EEPROM_TIME_OFFSET  20

enum CID_STATE {CID_IDLE, CID_SYNC, CID_PACKET, CID_MESSAGE, CID_END};
enum CID_MSG_STATE {CIDMSG_HEADER, CIDMSG_LEN, CIDMSG_DATA};

SoftwareSerial callerID(CALLER_ID_RX, CaLLER_ID_TX);
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_DATA4, LCD_DATA5, LCD_DATA6, LCD_DATA7);

enum CID_STATE cidState;
enum CID_MSG_STATE cidMsg;

unsigned char tempCount, cidData, packetLen, currLen;
unsigned char msgType, msgLen, msgCurrPos;
unsigned long delayStart, watchdogDelay, recallTimeout;
unsigned char lineIdleCounter, watchdogSec;
unsigned char buttonState, tempInfoPos, recall;

char msgData[16];

char tBufferNumber[16];
char tBufferDateTime[9];

void programLastNumber()
{
  unsigned char memPos;

  // Escribir la última información del identificador de llamada en el buffer temporal.
  // Este buffer temporal se usa para evitar problemas de sincronización en el flujo serial (debido a operaciones lentas de escritura en EEPROM). 
  for(memPos = 0; memPos < 16; memPos++)
  {
    tBufferNumber[memPos] = msgData[memPos];
  }
}

void programLastCallTime()
{
  unsigned char memPos;

  // Escribir fecha/hora relacionada con la última llamada en el buffer temporal

En resumen lo ideal para obtener el numero llamante es usar un circuito especializado para Caller ID FSK, evitando tener que hacer una demodulación por software compleja. Eso simplifica el diseño y reduce componentes externos. Además está ampliamente probado y documentado en proyectos de Arduino y telefonía analógica.

Por lo tanto, el HT9032D es el chip indicado para soportar la decodificación FSK Bell 202 del número llamante (Caller ID) en proyectos Arduino con línea telefónica analógica.

Fuente: https://www.instructables.com/Arduino-Telephone-Caller-ID-Unit/

Como comunicar dos dispositivos sin la red movil


A veces, como lo demostró el gran apagón sufrido en España, es interesante tener un medio de transmisión donde aun sin la red de telefonia ( e incluso sin la rede de energia pública) podamos comunicarnos entre si. En este contexto si investigamos un poco es fácil encontrar una tecnologia surgida del mundo del IoT : Meshtastic una solución para una comunicación libre fuera de la red.

Meshtastic nació en 2020 gracias a Kevin Hester y hoy cuenta con miles de colaboradores que mantienen el firmware y las apps asociadas. De hecho existen comunidades muy activas en diversos países, incluida la comunidad española y latinoamericana, con grupos de soporte en Telegram y foros especializados.

Meshtastic es un proyecto de código abierto y descentralizado que permite crear redes de comunicación off‑grid usando radios LoRa de bajo coste, sin depender de Internet, cobertura móvil ni infraestructura externa. Solo necesitamos un transceptor de radio (normalmente basado en ESP32 con el fw de meshtastic) y enlazar este por bluetooth a un ordenador o a un smartphone mediante la app Meshtastic. Lógicamente si queremos comunicarnos con otra persona también necesitará este módulo para hacer posible la comunicación bidireccional y por supuesto que ambos nodos esten al alcance de la red.

En la siguiente imagen precisamente tenemos un modulo típico muy utilizado : el LoRa V3 para ESP-32.

¿Qué es Meshtastic?

Meshtastic transforma pequeños módulos LoRa (como LILYGO o Heltec) en dispositivos de comunicación de largo alcance, capaces de enviar y recibir mensajes de texto o datos a través de una red mallada.
Cada nodo actúa como repetidor, retransmitiendo la señal y extendiendo el alcance total de la red. Y si amigo lector si te estas preguntando como se gestiona, esto lo haremos a traves de un smartphone con la app Meshmastic vinculado al modulo Lora.

En efecto la app Meshtastic es una aplicación de código abierto que permite crear redes de comunicación LoRa en forma de malla (mesh), donde cada dispositivo actúa como nodo capaz de retransmitir mensajes a otros, extendiendo el alcance sin necesidad de cobertura móvil ni conexión a Internet. Está disponible para Android, iOS, Windows y Linux, y se conecta mediante Bluetooth o USB a placas compatibles como el ESP32 LoRa V3.

Su función principal es facilitar la mensajería y el intercambio de datos entre dispositivos en entornos donde no existe infraestructura de red, ofreciendo además opciones de geolocalización, configuración remota de parámetros y visualización en mapas. También puede integrarse con plataformas externas mediante MQTT o API REST, lo que lo hace útil tanto para comunicación entre usuarios como para proyectos IoT distribuidos.

Gracias a Meshtastic, los módulos LoRa se convierten en nodos inteligentes capaces de mantener una red de comunicación privada, autónoma y de largo alcance, ideal para actividades al aire libre, entornos rurales, redes de emergencia o experimentos tecnológicos donde la conectividad tradicional no está disponible.

Principales características

  • Comunicación cifrada de extremo a extremo.
  • Red completamente descentralizada: los nodos forman la malla sin routers ni antenas base.
  • Compatible con apps Android/iOS, cliente web y CLI de Python.
  • Alcance extraordinario: en pruebas se han registrado enlaces de hasta 331 km en condiciones ideales.
  • Autonomía prolongada, perfecta para dispositivos alimentados por batería o energía solar.
  • Opcionalmente, integración GPS para enviar la posición de cada nodo.

Usos más comunes

  • Excursiones y senderismo: comunicación fuera de cobertura móvil.
  • Eventos y festivales: redes alternativas cuando las móviles están saturadas.
  • Agricultura e IoT: monitoreo remoto de sensores de temperatura o humedad.
  • Emergencias y desastres naturales: comunicaciones de respaldo sin depender de Internet.

Cómo funciona Meshtastic

Cada nodo Meshtastic transmite mensajes vía LoRa P2P (peer‑to‑peer). Cuando recibe un mensaje, lo reenvía automáticamente, permitiendo múltiples saltos hasta alcanzar el destino.
Los nodos pueden emparejarse con un teléfono por Bluetooth o cable USB, aunque la comunicación entre ellos es independiente.

Bandas de frecuencia compatibles

Meshtastic utiliza bandas ISM (sin licencia) diferentes según la región y el hardware:

BandaRegiones principalesObservaciones
433 MHzEuropaUso limitado, reservada a radioaficionados.
868 MHzEuropaBanda ISM europea más común y recomendable.
915 MHzAmérica, OceaníaBanda ISM de 902‑928 MHz, muy extendida.

Frecuencia más usada en Europa

En Europa —y especialmente en España— la frecuencia 868 MHz es la estándar preferida, al ser legal, estable y compatible con la mayoría de nodos.
La frecuencia central más habitual según configuración LongFast es 869.525 MHz (slot 1).

Parámetros técnicos (EU 868)

ParámetroValor típicoReferencia
Rango de frecuencia863–870 MHzETSI EN 300 220
Potencia máxima+14 dBm (25 mW EIRP)ETSI/IR‑274
Duty cycle permitido1 % (10 % en subbandas 869.4‑869.65 MHz)ETSI EN 300 220
Ancho de banda típico125–500 kHz

Esto garantiza que Meshtastic funcione dentro de los límites legales europeos, manteniendo compatibilidad con LoRaWAN y otros sistemas IoT.

Configurar la frecuencia o canal de un nodo

  1. Conecta el nodo a tu móvil (app Meshtastic Android/iOS) o a un PC mediante terminal o puerto serie.
  2. Abre la configuración avanzada. En la app o terminal, accede a los parámetros de radio (radioConfig).
  3. Selecciona la región, por ejemplo EU_868.
  4. Cambia la ranura o canal con el parámetro primaryChannelFreq o channel.
    • Ejemplo CLI: bashmeshtastic --set channel 20
  5. Guarda y reinicia el nodo para aplicar cambios.

Importante: todos los nodos de una red deben operar en la misma frecuencia o canal para comunicarse correctamente.

Ejemplo de modulo Mesh: Módulo LoRa V3 para ESP32 – Potencia, conectividad y eficiencia para proyectos IoT

El LoRa V3 para ESP32 es una completa placa de desarrollo diseñada para proyectos IoT de largo alcance y bajo consumo. Combina la potencia del ESP32-S3FN8 con el chip LoRa SX1262, ofreciendo conectividad Wi-Fi, Bluetooth y LoRaWAN en un solo módulo.

Características destacadas

  • Compatibilidad total con Arduino IDE y Meshtastic, facilitando la programación y el despliegue de redes LoRa Mesh.
  • Chip LoRa SX1262, que garantiza gran alcance de comunicación y bajo consumo energético.
  • Procesador ESP32-S3FN8, con doble núcleo Xtensa LX7 de 240 MHz, 8 MB Flash y 512 KB SRAM, ideal para aplicaciones exigentes.
  • Conectividad Wi-Fi (802.11 b/g/n) y Bluetooth 5 / BLE Mesh, ampliando las posibilidades de comunicación inalámbrica.
  • Pantalla OLED de 0,96” (128×64) para visualizar datos, estado de red y nivel de batería en tiempo real.
  • Puerto USB-C con protección ESD y contra cortocircuitos, más gestión avanzada de batería de litio (carga/descarga segura y cambio automático entre batería y USB).
  • Frecuencia LoRa: 868–915 MHz (según versión).
  • Sensibilidad del receptor: hasta –139 dBm.
  • Consumo en modo de sueño profundo: < 10 μA.

Este módulo es Ideal para proyectos IoT, redes Meshtastic, sensores remotos, monitoreo ambiental, automatización y cualquier aplicación que requiera gran alcance de comunicación y bajo consumo energético.

Conclusión

Meshtastic es una alternativa libre y abierta para construir redes de comunicación privadas, ideal para entusiastas de la electrónica, exploradores, agricultores o equipos de emergencia.
Con tan solo unos módulos LoRa, es posible crear tu propia red descentralizada, resistente y completamente independiente de la infraestructura convencional.