-
Couldn't load subscription status.
- Fork 2
Library reference in Spanish
Versiones:
- 1.0.1611.1
- 1.0.1612.1
La librería RF Explorer IoT para Arduino ha sido creada para utilizar toda la potencia de los módulos RF Explorer IoT en el ecosistema de Arduino. Es una librería nativa, totalmente documentada y, organizada en clases y funciones. El uso en Arduino es intuitivo y sencillo.
Recomendamos los siguientes ejemplos para entender mejor el uso de la librería.
La estructura de funcionamiento sigue el mismo sistema que todos los sketch para Arduino: el uso de las funciones estándar setup() y loop().
Tradicionalmente, en setup() se realiza la configuración del Arduino, por ejemplo, se dice que pines son de entrada y cuales son de salida. En nuestro caso particular se configura el módulo RF Explorer 3G+ IoT. Por otro lado, el loop es el código que se estará ejecutando continuamente, por ejemplo, obteniendo el máximo de una señal.
Para el caso específico de la librería RF Explorer 3G+ IoT y usando como base el ejemplo RFE_IoT_GetPeak en un Arduino Due, la estructura del sketch es la siguiente:
-
setup(): -
Inicializa el Hardware y las comunicaciones UART
-
El módulo MWSUB3G se conecta a 115200bps
-
El Monitor Serial (UART0 a través del Puerto USB) se configura a 57600bps
-
Se llama la función
requestConfig()para recibir la configuración del módulo MWSUB3G -
loop(): -
Escanea continuamente el espectro de frecuencia para detectar el pico de señal
-
Cada vez que se recibe un escaneo (sweep) el Serial Monitor mostrará el máximo de potencia de la señal así como la frecuencia a la que se encontró dicho máximo
Probablemente el aspecto más importante de entender es, el ciclo de captura de datos de manera continua del módulo analizador RF Explorer 3G+ IoT y el sketch de Arduino. El RF Explorer 3G + IoT envía datos a la UART de Arduino en tiempo real, por lo que es importante que el código de Arduino esté correctamente programado para realizar la tarea de manejar este flujo masivo de información.
Las dos funciones que gestionan la captura de información entre el módulo RF y el sketch de Arduino son:
-
updateBuffer(): Esta función obtiene los bytes capturados por la UART de Arduino y los almacena internamente en el buffer interno de la librería IoT. Esta función es importante para evitar el desbordamiento de la UART de Arduino. -
processReceivedString(): Esta función procesa todos los bytes almacenados internamente y los convierte en los datos y comandos de alto nivel que puede usar el sketch de Arduino.
Ambas funciones descritas arriba deben ser ejecutadas periódicamente en la función loop() del Sketch, para asegurarnos de que toda la información transmitida por el módulo RF es correctamente capturada y procesada. Si dichas funciones no son llamadas con la suficiente regularidad, la información transmitida por el módulo puede perderse total o parcialmente.
En cualquier sketch de Arduino en el que se utilice RF Explorer 3G+ IoT se deben realizar llamadas frecuentes tanto a updateBuffer() (número 1 en la imagen siguiente) como a processReceivedString() (número 2 en la imagen). Estrictamente en ése orden.
El resultado devuelto por processReceivedString() se puede utilizar para procesar externamente la información, como se muestra en el bloque 3 de la imagen. El código utilizado en el bucle debe ser rápido y sencillo, para evitar que se produzcan demoras que puedan ocasionar la pérdida de información transmitida por el módulo RF.
La gestión de errores, presentación de información, etc debe ser rápida como se muestra en los bloques 3 y 4.
Para aclarar más el concepto de bucle de captura, podemos utilizar la sencilla modificación mostrada en la imagen a continuación. En dicho ejemplo, se ha introducido un delay(1000) de forma que el bucle de captura tardará un segundo completo en volver a gestionar los bytes capturados por la UART.
Con este tipo de retrasos, la UART normalmente se desborda y algunos bytes se perderán, produciéndose errores de comunicación con el módulo RF y corrompiendo los datos. Un ejemplo de salida en un código como el de arriba podría ser como sigue:
En esta imagen del Serial Monitor podemos ver que, tras los caracteres de inicio de programa, aparecen mensajes de “Error: 20” y ninguno de procesamiento del espectro. Si consultamos el apartado Manejo de errores veremos que es un RFE_IGNORE que significa que el dispositivo se encuentra esperando para obtener más información de una cabecera cortada.
Como solucionar errores en el bucle de captura:
- Utilizar un código sin retrasos ni esperas activas (procesamiento mas rápido)
- Llame a las funciones de captura en más de una ocasión.
- Seleccionar baudrates de menor velocidad
- Mejorar el rendimiento del sketch
- Detener temporalmente la comunicación con el módulo RF usando funciones
setHold()ysetRun()
Nota: Para el tiempo de monitorización en su programa utilice la función micros() de la referencia de lenguaje Arduino. Esta función devuelve el número de microsegundos desde que la placa Arduino empezó a ejecutar el programa, por tanto puede ser utilizada para diagnosticar tiempos de ejecución.
- Class RFExplorer_3GP_IoT
- Class RFEConfiguration
- Class RFESweepData
- Tipos de Mensajes RFExplorer_3GP_IoT
- Manejo de Errores RFExplorer_3GP_IoT
Inicializa los elementos necesarios (comunicación, variables miembro...) en el RF Explorer 3G+ IoT. Llame a esta función una vez. Siempre al principio.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Coloca el pin de Reset de RFExplorer 3G+ IoT a nivel bajo durante un tiempo determinado. Se recomiendan 5 segundos. Provoca un reinicio hardware en el módulo del 3G+.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Cambia la velocidad de comunicación de RF Explorer con la UART principal. El cambio es inmediato y se pierde con un reset.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
| nbaudrate | uint32_t | Nueva velocidad (bps) para la comunicación asíncrona con la UART. Las velocidades de transmisión disponibles para Arduinos de 8 bit (como Seeeduino) son: 2400, 4800, 9600, 19200, 38400, 57600. Para Arduino Due (u otros modelos basados en ARM) es posible alcanzar una velocidad de 115200 |
Ejemplo:
changeBaudrate(115200);Cambia el número de pasos en frecuencia para un procesamiento óptimo. A mayor número de pasos, mayor RBW pero en contraposición es necesario mayor tiempo de procesamiento y se necesita mayor RAM para almacenar todos los pasos. Recomendado para Arduino Due - 512 puntos. Recomendado para Seeeduino - 240 puntos. Como nota aclaratoria, y para los usuarios que conocen y trabajan con la familia RF Explorer, los dispositivos Handheld poseen un número de pasos fijo de 112.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
| nSteps | uint16_t | Numero de puntos para determinar la resolución en frecuencia |
Ejemplo:
changeNumberSteps(512);Comando de petición de configuración en RF Explorer 3G+ IoT. Con este comando se recibe la configuración actual de la unidad.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Cambiar la configuración actual para RF Explorer 3G+ IoT. Se establece una frecuencia de inicio y otra de parada para el análisis de espectro. Los valores de potencia se ajustan a 0dBm y -120dBm. RF Explorer 3G+ IoT ignora estas unidades.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
| nStartFreqKHZ | uint32_t | Valor de inicio del intervalo de frecuencia en kHz (inferior) |
| nStartFreqKHZ | uint32_t | Último valor del intervalo de frecuencia en kHz (más alto) |
Ejemplo:
sendNewConfig(1180000, 1200000);Detiene el volcado de datos del analizador de espectro.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Inicia el dispositivo si se ha detenido previamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Apaga la unidad RF Explorer 3G+ IoT. Necesita un resetHardware() para reactivarse.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | void | - |
Introduce los valores recibidos por el puerto serie almacenándolos en un Buffer Circular.
Función crítica: Actualizar este buffer circular periódicamente para evitar la pérdida de información.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint8_t | Número de bytes leídos en el último uso |
Función que procesa los diferentes tipos de Mensajes en RFExplorer que se almacenan en el Buffer Circular. Además gestiona el manejo de errores.
Función crítica. Este método almacena información en la clase RFEConfiguration (última configuración del dispositivo) y en la clase RFESweepData (último conjunto de datos válidos).
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint8_t | 0 si es posible procesar. Ver Manejo de errores en otro caso |
Devuelve el tipo de mensaje del último proceso realizado en processReceivedString(). Identifica por tanto el tipo de información recibida para actuar en cada caso.
Los tipos válidos de mensajes son constantes como: _CONFIG_MESSAGE / _SWEEP_MESSAGE / _MODEL_MESSAGE / _UNKNOWN_MESSAGE/_ERROR_MESSAGE / _SERIALNUMBER_MESSAGE
Puede ampliar información en el apartado Tipos de Mensajes
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint8_t | 0 si es éxito |
Función que determina si la configuración y los datos recibidos del 3G+ tienen un formato correcto que permite al usuario realizar operaciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | boolean | 0 si es correcto |
Obtiene el valor máximo de la amplitud de datos y la frecuencia correspondiente de acuerdo a la configuración del dispositivo.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint8_t | 0 si es éxito |
| pFreqKHZ | uint32_t* | Puntero a la frecuencia de almacenamiento en KHz del valor máximo |
| pMaxDBM | uint32_t* | Puntero al valor máximo de almacenamiento en dBm |
Ejemplo:
if (g_objRF.getPeak(&nFreqPeakKHZ, &nPeakDBM) ==_RFE_SUCCESS)
{
g_objRF.getMonitorSerial().print(nFreqPeakKHZ);
g_objRF.getMonitorSerial().print(" KHz to ");
g_objRF.getMonitorSerial().print(nPeakDBM);
g_objRF.getMonitorSerial().println(" dBm");
}Devuelve el objeto RFEConfiguration interno para uso de métodos y propiedades. Este objeto contiene la última configuración del dispositivo. Debe consultarse RFExplorer_3GP_IoT::isValid() para asegurar la validez de los datos antes de intentar usarlos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | RFEConfiguration* | Puntero al objeto de la clase RFEConfiguration |
Ejemplo:
if ((g_objRF.getLastMessage() == _CONFIG_MESSAGE))
{
g_objRF.getMonitorSerial().print("StartKHz: ");
g_objRF.getMonitorSerial().println(g_objRF.getConfiguration()->getStartKHZ());
}Devuelve el objeto RFESweepData interno para uso de métodos y propiedades. Este objeto contiene el último sweep capturado, pero debe consultarse RFExplorer_3GP_IoT::isValid() para asegurar la validez de los datos antes de intentar usarlos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | RFESweepData* | Puntero al objeto de la clase RFESweepData |
Ejemplo:
if((g_objRF.getLastMessage() == _SWEEP_MESSAGE) && g_objRF.isValid())
{
g_objRF.getMonitorSerial().print("StartKHz: ");
g_objRF.getMonitorSerial().println(g_objRF.getSweepData()->getStartKHZ());
}Acceso al objeto interno. Utilizado para realizar prints en el Serial Monitor de los distintos tipos de Serial que posee Arduino. En el caso del Arduino Due se encapsula HardwareSerial y en el caso de Seeeduino se encapsula SoftwareSerial.
Para más información consulte la referencia https://www.arduino.cc/en/Reference/Serial
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | HardwareSerial& | Encapsula el objeto Serial3 si es Arduino Due |
| Retorno | SoftwareSerial& | Encapsula el objeto Software Serial si es Arduino Small Factor |
Ejemplo:
int nFreqPeakKHZ = 2462000;
g_objRF.getMonitorSerial().print(nFreqPeakKHZ);
g_objRF.getMonitorSerial().println(" KHz");Obtiene el valor inicial de frecuencia de la última configuración recibida.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia inicial en KHz |
Obtiene el valor final de la frecuencia de la última configuración recibida.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia final en KHz |
Obtiene la frecuencia correspondiente al tamaño del paso de la última configuración recibida.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia en Hz del paso en frecuencia |
Obtiene el número total de pasos de la última configuración recibida.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint16_t | Número total de pasos |
Obtiene el modo de funcionamiento del dispositivo.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | eMode | Modo de funcionamiento. Valores posibles del enumerado: SPECTRUM_ANALYZER:0, RF_GENERATOR:1, WIFI_ANALYZER:2, UNKNOWN:255 |
Obtiene el valor mínimo de frecuencia que soporta el dispositivo 3G+ IoT.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Valor mínimo de frecuencia en KHz del dispositivo |
Obtiene el valor máximo de frecuencia que soporta el dispositivo 3G+ IoT.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Valor máximo de frecuencia en KHz del dispositivo |
Obtiene el valor de Resolution Bandwith que está actualmente seleccionada.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia en KHz del RBW |
Obtiene el valor máximo de Span para el dispositivo 3G+ IoT.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia en KHz del paso en frecuencia |
Obtiene el valor de offset seleccionado en la unidad.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint16_t | Valor de offset en dB |
Obtiene el modo usado en procesar resultados.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | eCalculator | Modo usado para procesar. Valores posibles: 0=NORMAL, 1=MAX, 2=AVG, 3=OVERWRITE, 4=MAX_HOLD |
Obtiene el valor codificado para los dispositivos RF Explorer.
El valor devuelto por el 3G+ IoT será 5 correspondiente al módulo MWSUB3G
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | eModel | Modelo RF Explorer. Valores establecidos: 433M:0, 868M:1, 915M:2, WSUB1G:3, 2.4G:4, WSUB3G:5 |
|
Obtiene el valor del firmware utilizado por la placa 3G+.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint16_t | Puntero al primer elemento de la cadena de caracteres que indica el número de versión |
Obtiene el número de identificación del dispositivo RF Explorer.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | char* | Puntero al primer elemento de la cadena de caracteres que forma el Serial Number |
Devuelve la frecuencia correspondiente a un determinado paso del RFESWeepData.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia en KHz |
| nStep | int16_t | Número de paso |
Devuelve la amplitud correspondiente a un determinado paso del RFESWeepData.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | int16_t | Amplitud en dBm |
| nStep | int16_t | Número de paso |
Devuelve el step del mayor valor de amplitud encontrado.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint16_t | Número de paso donde se haya el mayor valor en amplitud |
Obtiene el valor inicial de la frecuencia correspondiente al último sweep de datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia inicial en KHz |
Obtiene el valor final de la frecuencia correspondiente al último sweep de datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia final en KHz |
Obtiene la frecuencia correspondiente al tamaño del paso del último sweep de datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint32_t | Frecuencia en Hz del paso en frecuencia |
Obtiene el número total de pasos del último sweep de datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
| Retorno | uint16_t | Número total de pasos |
| Número de Mensaje | Código de mensaje | Explicación |
|---|---|---|
| 1 | _CONFIG_MESSAGE | Mensaje RFEConfiguration |
| 2 | _SWEEP_MESSAGE | Mensaje RFESweepData |
| 3 | _MODEL_MESSAGE | Modelo de RFExplorer |
| 4 | _UNKNOWN_MESSAGE | Mensaje no procesado y desconocido |
| 5 | _ERROR_MESSAGE | Error. Mirar sección manejo de errores |
| 6 | _SERIALNUMBER_MESSAGE | Serial Number RFExplorer 3G+ IoT |
| Número de Error | Código de Error | Función |
|---|---|---|
| 0 | _RFE_SUCCESS | Procesamiento correcto. |
| 1 | _RFE_ERROR | Error General. No usado. |
| 3 | _RFE_ERROR_UNEXPECTED_CHARACTER | El carácter recibido no es correcto. El mensaje es descartado. |
| 4 | _RFE_ERROR_UNEXPECTED_SIZE | El tamaño del mensaje no es adecuado. |
| 5 | _RFE_ERROR_STRING_OVERFLOW | El almacenamiento de memoria está saturado. Es un error crítico. |
| 10 | _RFE_ERROR_CONFIG | RFEConfiguration es incorrecto. |
| 11 | _RFE_ERROR_SWEEP_BAD_CONFIG | RFESweepData es incorrecto porque el RFEConfiguration previo es incorrecto. El método previo processReceivedString() devuelve _RFE_ERROR_CONFIG y RFESweepData es totalmente descartado. |
| 12 | _RFE_ERROR_DEVICE_INCORRECT | El dispositivo no es un RF Explorer 3G+ IoT para Arduino. |
| 20 | _RFE_IGNORE | No es un error, es información de procesamiento. Significa que no se han recibido suficientes bytes para finalizar el tratamiento de un mensaje. |
| 21 | _RFE_NOT_MESSAGE | El mensaje que se intenta procesar no es reconocido por la librería. |



