Conectar un receptor
Mapit GIS admite receptores GNSS externos para conseguir una precisión centimétrica. En Android puedes conectar un receptor por Bluetooth (lo más habitual), Bluetooth Low Energy (BLE), serie USB, TCP/IP (receptores conectados a la red o flujos NTRIP) o mediante una aplicación complementaria de terceros que canaliza los datos de ubicación a través del sistema de ubicaciones simuladas de Android. En iOS puedes conectarte por Bluetooth Low Energy (BLE) o TCP/IP.
Solo puede haber un método de conexión activo a la vez: al activar uno se desactivan automáticamente los demás.
- Android
- iOS
Conexión por Bluetooth
La mayoría de los receptores GNSS externos se comunican por Bluetooth mediante el perfil de puerto serie (SPP). Es un flujo de datos serie que transporta sentencias NMEA del receptor a la aplicación.
Emparejar un dispositivo
- Abre Ajustes desde el menú principal.
- Ve a GNSS externo.
- Activa GPS Bluetooth emparejado.
- La aplicación solicita los permisos de Bluetooth (
BLUETOOTH_CONNECTyBLUETOOTH_SCANen Android 12 y posteriores). - Aparece un cuadro de selección con todos los dispositivos Bluetooth vinculados (emparejados), con su nombre y su dirección MAC.
- Elige tu receptor. La dirección y el nombre del dispositivo se guardan para las próximas sesiones.
Empareja primero el receptor con tu dispositivo Android desde Ajustes de Android > Bluetooth, antes de abrir Mapit GIS. La aplicación solo muestra los dispositivos ya emparejados: no realiza búsqueda de dispositivos Bluetooth.
Proceso de conexión
Al iniciarse una sesión de GNSS por Bluetooth, la aplicación intenta conectarse por cuatro métodos sucesivos, con reintentos automáticos:
| Método | Descripción |
|---|---|
| UUID del dispositivo | Usa el UUID que anuncia el propio receptor |
| UUID SPP estándar | Usa el UUID estándar del perfil de puerto serie (00001101-0000-1000-8000-00805F9B34FB) |
| RFCOMM inseguro | Usa un canal RFCOMM inseguro; útil con receptores antiguos que rechazan las conexiones seguras |
| Canal directo | Abre el canal RFCOMM 1 directamente por reflexión; último recurso para receptores que no anuncian ningún UUID |
Cada método se reintenta hasta dos veces antes de pasar al siguiente. Una vez establecida la conexión, la aplicación empieza a leer sentencias NMEA del flujo de datos del receptor.
Correcciones RTCM por Bluetooth
Cuando hay una sesión del cliente NTRIP activa, los datos de corrección RTCM se envían de vuelta al receptor por esa misma conexión Bluetooth SPP. El enlace serie bidireccional permite que las correcciones lleguen al receptor en tiempo real para el posicionamiento RTK.
Tiempo de espera de datos
Si no llegan datos durante 5 segundos tras establecer la conexión, la aplicación la considera obsoleta y se desconecta. Así se evita que la aplicación parezca conectada cuando el receptor se ha dormido o está fuera de alcance.
Servicio en primer plano
Mientras hay conexión, la aplicación ejecuta un servicio en primer plano de GNSS externo para impedir que Android corte la conexión en segundo plano. Una notificación permanente confirma que la conexión GNSS está activa. Ese servicio mantiene además un bloqueo de activación de CPU para que el procesador siga funcionando con la pantalla apagada.
Conexión por Bluetooth Low Energy (BLE)
Algunos receptores GNSS modernos, como la serie ArduSimple, se comunican por Bluetooth Low Energy mediante el perfil Nordic UART Service (NUS) en lugar del Bluetooth clásico SPP. BLE consume menos energía y es el método de conexión preferible en los receptores que lo admiten.
Buscar dispositivos
- Abre Ajustes > GNSS externo.
- Activa GPS por BLE.
- La aplicación solicita los permisos de Bluetooth (
BLUETOOTH_CONNECTyBLUETOOTH_SCANen Android 12 y posteriores). - Aparece un cuadro de búsqueda que localiza automáticamente los dispositivos BLE cercanos que anuncian el UUID del servicio NUS.
- La búsqueda dura hasta 15 segundos en modo de baja latencia.
- Elige tu receptor en la lista. El nombre y la dirección del dispositivo se guardan para las próximas sesiones.
A diferencia del Bluetooth clásico, BLE no exige emparejar antes el dispositivo en los ajustes de Android. La aplicación descubre los receptores GNSS BLE directamente en el cuadro de búsqueda.
Proceso de conexión
Al iniciarse una sesión de GNSS por BLE, la aplicación se conecta al dispositivo elegido con el cliente GATT (Generic Attribute Profile) de Android. La secuencia de conexión es:
- Conexión GATT: establece un enlace BLE con el receptor.
- Descubrimiento de servicios: localiza el Nordic UART Service (NUS) en el dispositivo.
- Activación de notificaciones: se suscribe a la característica TX del NUS (del receptor al teléfono) escribiendo el descriptor CCCD.
- Negociación de MTU: solicita una MTU mayor (hasta 512 bytes) para transferir datos con eficiencia.
- Flujo NMEA: la aplicación empieza a leer sentencias NMEA de las notificaciones BLE.
Correcciones RTCM por BLE
Cuando hay una sesión del cliente NTRIP activa, los datos de corrección RTCM se envían de vuelta al receptor por BLE escribiendo en la característica RX del NUS. La aplicación fragmenta automáticamente los datos RTCM en segmentos del tamaño de la MTU para entregarlos con fiabilidad.
Tiempo de espera de datos
Si no llegan datos NMEA durante 5 segundos, la aplicación considera perdida la conexión y se desconecta. Así se garantiza que la información GPS se borre enseguida si el receptor se apaga o queda fuera de alcance, en lugar de esperar al tiempo de supervisión de BLE.
Reconexión automática
Si la conexión BLE se corta de forma inesperada (por ejemplo, si el receptor queda fuera de alcance un momento), la aplicación espera 2 segundos y después intenta reconectarse automáticamente. Si la desconexión es deliberada, provocada por el usuario o por el tiempo de espera de datos, no se intenta ninguna reconexión.
Servicio en primer plano
Con conexión por BLE, la aplicación ejecuta un servicio en primer plano de GNSS externo con bloqueo de activación de CPU, igual que con el Bluetooth clásico. El bloqueo de wifi y la devolución de llamada de red no se usan en las conexiones BLE, porque no interviene ninguna red.
Conexión serie por USB
En los receptores GNSS conectados por cable USB OTG (On-The-Go), la aplicación puede leer los datos NMEA directamente por una conexión serie USB. Resulta útil con receptores que no tienen Bluetooth, o cuando necesitas una conexión por cable más fiable en sesiones de levantamiento largas.
Configuración
- Abre Ajustes > GNSS externo.
- Activa GPS por serie USB.
- Elige la velocidad en baudios adecuada para tu receptor (predeterminada:
115200).
Se admiten estas velocidades:
| Baudios |
|---|
| 4800 |
| 9600 |
| 19200 |
| 38400 |
| 57600 |
| 115200 |
| 230400 |
| 460800 |
| 921600 |
La mayoría de los receptores GNSS modernos usan 115200 baudios de forma predeterminada. Consulta la documentación de tu receptor si no sabes qué velocidad usar.
Proceso de conexión
- Conecta el receptor GNSS a tu dispositivo Android con un cable o adaptador USB OTG.
- La aplicación detecta automáticamente los dispositivos serie USB mediante los controladores estándar USB CDC/ACM y FTDI/CH340/CP210x/PL2303.
- Android pide permiso de USB la primera vez que se conecta un dispositivo.
- Una vez concedido, la aplicación abre el puerto serie con la velocidad configurada (8 bits de datos, 1 bit de parada, sin paridad) y empieza a leer sentencias NMEA.
Correcciones RTCM por USB
Cuando hay una sesión del cliente NTRIP activa, los datos de corrección RTCM se envían al receptor por esa misma conexión serie USB. El enlace serie bidireccional hace del USB una opción ideal para los flujos RTK en los que las correcciones deben llegar al receptor con la mínima latencia.
Detección de desconexión del cable
La aplicación escucha el aviso USB_DEVICE_DETACHED de Android. Cuando el cable USB se desconecta físicamente, la aplicación lo detecta al instante y limpia la conexión: no hay ninguna espera.
Recuperación de errores
Si se producen errores de lectura por USB (por ejemplo, por ruido eléctrico o una conexión floja), la aplicación reintenta con 1 segundo de espera entre intentos. Tras 5 errores de lectura consecutivos, considera perdida la conexión y se desconecta.
Servicio en primer plano
Con conexión por USB, la aplicación ejecuta un servicio en primer plano de GNSS externo con bloqueo de activación de CPU, para que la conexión no se interrumpa con la pantalla apagada.
Conexión por TCP/IP
Para receptores GNSS conectados a la red, casters NTRIP o datos GNSS retransmitidos desde un PC, puedes conectarte por TCP/IP.
Configuración
- Abre Ajustes > GNSS externo.
- Activa GPS por TCP.
- Introduce el nombre de host o la dirección IP del servidor (predeterminado:
localhost). - Introduce el número de puerto (predeterminado:
52003).
Configuración del socket
La conexión TCP está ajustada para datos GNSS en tiempo real:
| Ajuste | Valor | Finalidad |
|---|---|---|
| Keep-alive | Activado | Evita que el router o el cortafuegos corten la sesión por inactividad |
| TCP no-delay | Activado | Desactiva el algoritmo de Nagle para entregar el NMEA con baja latencia |
| Tiempo de espera de lectura | 90 segundos | Tolera los periodos de silencio de los flujos NTRIP y a la vez detecta conexiones muertas |
Correcciones RTCM por TCP
Cuando hay una sesión del cliente NTRIP activa, los datos de corrección RTCM se envían al receptor por ese mismo socket TCP. Resulta útil con receptores que aceptan correcciones por su interfaz de red, o cuando las correcciones se retransmiten a través de un PC o un dispositivo complementario.
Reconexión automática
Si la conexión TCP se corta de forma inesperada, la aplicación intenta reconectarse automáticamente:
- Hasta 3 reintentos con retroceso exponencial (2 s, 4 s, 8 s).
- Un aviso muestra
«Conexión perdida, reconectando (intento X)...». - Si fallan todos los reintentos, la aplicación vuelve al GPS interno.
Servicio en primer plano
El servicio en primer plano de TCP adquiere además un bloqueo de wifi (modo de baja latencia) y registra una devolución de llamada de red para impedir que Android apague la radio wifi durante la sesión.
Aplicaciones complementarias de terceros
Algunos fabricantes de GNSS ofrecen sus propias aplicaciones complementarias, que entregan posiciones corregidas mediante el sistema de ubicaciones simuladas de Android. Mapit GIS puede leer los datos de ubicación de esas aplicaciones en lugar de conectarse directamente al receptor.
Aplicaciones admitidas
| Aplicación | Fabricante | Preferencia |
|---|---|---|
| Eos Tools Pro | Eos Positioning Systems (serie Arrow) | Eos Tools Pro |
| Zeno Connect | Leica Geosystems (serie Zeno) | Zeno Connect |
| Trimble Mobile Manager | Trimble | Trimble Mobile Manager |
| Trimble SPace | Trimble (receptor DA2) | Trimble SPace |
| SXblue Toolbox | Geneq (serie SXblue) | SXblue Toolbox |
Cómo funciona
- Abre Ajustes > GNSS externo.
- Activa la opción de la aplicación complementaria correspondiente.
- La aplicación complementaria debe estar en marcha y entregando ubicaciones simuladas mediante
LocationManager.GPS_PROVIDER. - Mapit GIS lee el objeto
Locationestándar de Android y extrae datos ampliados del paqueteextras: valores de DOP, información de satélites, precisión RMS, tipo de solución, antigüedad de la corrección diferencial y más.
Las aplicaciones complementarias suelen gestionar internamente las correcciones RTK, las conexiones NTRIP y la calibración de la antena. La posición corregida se entrega después a Mapit GIS como una ubicación simulada.
Datos ampliados de las aplicaciones complementarias
Además de la posición y la precisión estándar, Mapit GIS lee del paquete de extras de la ubicación lo siguiente, cuando está disponible:
- Valores de DOP: HDOP, VDOP, PDOP, GDOP, TDOP
- Precisión RMS: HRMS, VRMS, RMS 3D
- Información de satélites: satélites en uso, satélites a la vista, identificadores PRN, elevación, azimut, SNR, tipo de constelación
- Datos diferenciales: antigüedad de la corrección, ID de la estación de corrección, tipo de solución
- Datos de altura: altura sobre el nivel del mar, ondulación del geoide, altura de antena
- Información del receptor: nombre del modelo, sistema de corrección SBAS
Proveedor de ubicaciones simuladas
Con conexión por Bluetooth o TCP/IP, Mapit GIS puede actuar opcionalmente como proveedor de ubicaciones simuladas. Eso significa que la posición del GNSS externo se inyecta en el sistema de ubicaciones de Android y queda disponible para todas las aplicaciones del dispositivo, no solo para Mapit GIS.
Para usar esta función debes activar las opciones de desarrollo en tu dispositivo Android y marcar Mapit GIS como la aplicación de ubicaciones simuladas en Opciones de desarrollo > Seleccionar aplicación de ubicación simulada.
Las ubicaciones simuladas requieren tener activadas las opciones de desarrollo. En los dispositivos gestionados (de empresa), este ajuste puede estar restringido por el administrador informático.
Prioridad de conexión
Si hay varias opciones de conexión activadas a la vez (algo no recomendable), la aplicación las resuelve en este orden de prioridad:
- GPS interno (predeterminado)
- GPS Bluetooth
- GPS por TCP
- GPS por serie USB
- GPS por BLE
- Eos Tools Pro
- Zeno Connect
- Trimble Mobile Manager
- SXblue Toolbox
- Trimble SPace (máxima prioridad)
Prevalece la última opción activada de esta lista.
Mapit GIS en iOS admite tres vías de GNSS externo:
- Bluetooth clásico: accesorios certificados MFi (actualmente solo Eos Arrow)
- Bluetooth Low Energy (BLE): receptores que exponen el Nordic UART Service (NUS)
- TCP/IP: receptores conectados a la red o retransmisores de NMEA
Elige la vía en Ajustes - Ajustes de levantamiento - Origen GPS.
Bluetooth clásico (MFi)
En iOS, los receptores GNSS por Bluetooth clásico se conectan mediante el marco ExternalAccessory de Apple. Apple exige que cada fabricante esté certificado MFi y autorizado individualmente en la aplicación antes de poder comunicarse con sus accesorios.
Autorizados actualmente en iOS:
| Fabricante | Receptores |
|---|---|
| Eos Positioning Systems | Serie Eos Arrow (Arrow Gold+, Arrow 100, Arrow Lite) |
| Juniper Systems | Geode GNS2, Geode GNS3 (GNS3S, GNS3M, GNS3H) y Spire |
Emlid Reach RX, Reach RX2 y Reach RS ya funcionan hoy en Android y están en pruebas activas para iOS por BLE; la compatibilidad llegará en una versión próxima.
Mapit GIS trabaja activamente con Apple para autorizar más fabricantes. Hasta que un fabricante esté aprobado, sus receptores por Bluetooth clásico no aparecerán en el selector de dispositivos en iOS: recurre a BLE si el receptor lo admite, o a TCP/IP si las posiciones pueden retransmitirse por red.
Emparejar un receptor Eos Arrow
- Enciende el receptor y emparéjalo en Ajustes de iOS - Bluetooth. Aparece como emparejamiento de «accesorio» (MFi), no como un dispositivo Bluetooth normal.
- En Mapit GIS, abre Ajustes - Ajustes de levantamiento.
- Pon Origen GPS en Bluetooth clásico.
- Toca Seleccionar dispositivo y elige tu receptor Arrow en la lista de accesorios conectados.
- Toca Conectar. La aplicación abre una sesión con el receptor mediante
EASessiony empieza a leer NMEA del flujo de entrada del accesorio.
Los datos NMEA llegan a Mapit GIS por el flujo de entrada del accesorio y, cuando el cliente NTRIP está activo, las correcciones RTCM se escriben de vuelta por el flujo de salida.
Cuando un receptor MFi no está autorizado
Si tu receptor Bluetooth clásico no aparece en el selector de dispositivos, es casi seguro que su protocolo MFi aún no se ha añadido a Mapit GIS. Escríbenos desde la página de comentarios indicando el modelo de tu receptor: priorizamos la incorporación de MFi según la demanda de los clientes.
Conexión por Bluetooth Low Energy (BLE)
Mapit GIS en iOS también se conecta a receptores GNSS externos por Bluetooth Low Energy mediante el perfil Nordic UART Service (NUS). BLE no tiene la restricción de MFi y funciona con cualquier receptor que anuncie el servicio NUS; se ha probado con dispositivos ArduSimple y u-blox (consulta Cliente NTRIP: receptores probados para más detalles).
Buscar dispositivos
- Abre Ajustes - Ajustes de levantamiento.
- Pon Origen GPS en Bluetooth BLE.
- iOS pide permiso de Bluetooth la primera vez.
- Toca Seleccionar dispositivo para abrir la pantalla de búsqueda. Localiza automáticamente los dispositivos BLE cercanos que anuncian el Nordic UART Service (NUS).
- Los dispositivos encontrados aparecen con su nombre y un indicador de intensidad de señal (visualización de 4 barras basada en el RSSI).
- Elige tu receptor. El identificador y el nombre del dispositivo se guardan para las próximas sesiones.
BLE no exige emparejar antes el dispositivo en los ajustes de iOS. La aplicación descubre los receptores GNSS directamente en su pantalla de búsqueda integrada. Si un dispositivo aparece como «Dispositivo GNSS desconocido», comprueba que el nombre Bluetooth de tu receptor está bien configurado.
Intensidad de señal
El selector de dispositivos muestra un indicador de intensidad de señal para cada dispositivo encontrado:
| Rango de RSSI | Intensidad |
|---|---|
| De −50 dBm a 0 dBm | Excelente |
| De −65 dBm a −50 dBm | Buena |
| De −80 dBm a −65 dBm | Regular |
| Por debajo de −80 dBm | Débil |
Proceso de conexión
Al iniciarse una sesión de GNSS por BLE, la aplicación se conecta al dispositivo elegido con CoreBluetooth de iOS. La secuencia de conexión es:
- Recuperar el periférico: busca el dispositivo guardado por su identificador. Si no está en la caché de Bluetooth, recurre a buscar el UUID del servicio NUS.
- Conexión GATT: establece un enlace BLE con el receptor.
- Descubrimiento de servicios: localiza el Nordic UART Service en el dispositivo.
- Descubrimiento de características: encuentra tanto la característica TX del NUS (del receptor al teléfono) como la RX (del teléfono al receptor).
- Activación de notificaciones: se suscribe a la característica TX para recibir datos NMEA.
- Negociación de MTU: consulta la longitud máxima de escritura para entregar el RTCM con eficiencia.
- Conexión lista: la aplicación solo informa de «conectado» cuando se han descubierto las características TX y RX y están activadas las notificaciones.
Tiempo de espera de conexión
El método connect() de CoreBluetooth espera indefinidamente de forma predeterminada. Para que la aplicación no parezca bloqueada, Mapit GIS impone un tiempo de espera de conexión de 10 segundos. Si la conexión GATT y el descubrimiento de características no se completan en ese margen, el intento se cancela y comienza un ciclo de reconexión.
Análisis del NMEA
Los receptores GNSS por BLE suelen enviar una mezcla de texto NMEA y datos binarios (por ejemplo, mensajes propietarios UBX) por la misma característica NUS. Mapit GIS usa un delimitador de sentencias basado en la suma de comprobación en lugar de fiarse de los saltos de línea:
- Busca
$o!seguidos de al menos dos letras mayúsculas (el identificador del emisor) para localizar el inicio de cada sentencia. - Localiza el marcador de suma de comprobación
*HH(un asterisco seguido de dos dígitos hexadecimales) para localizar el final. - Descarta automáticamente los datos binarios entre sentencias.
Este enfoque es robusto frente a los datos binarios, que podrían corromper los finales de línea o contener caracteres $ falsos.
El búfer de línea está limitado a 4 KB para evitar un crecimiento ilimitado de memoria si el receptor envía grandes volúmenes de datos binarios junto al NMEA.
Correcciones RTCM por BLE
Cuando hay una sesión del cliente NTRIP activa, los datos de corrección RTCM se envían al receptor escribiendo en la característica RX del NUS. La aplicación automáticamente:
- Fragmenta los datos RTCM en segmentos que caben en la MTU negociada (menos 3 bytes de sobrecarga ATT, con un mínimo de 20 bytes).
- Encola las escrituras en serie: BLE exige una única escritura pendiente a la vez. Cada fragmento se envía solo cuando el anterior ha terminado.
- Usa escritura sin respuesta para reducir la latencia, algo importante en las correcciones RTK en tiempo real.
Reconexión automática
Si la conexión BLE se corta de forma inesperada (por ejemplo, si el receptor queda fuera de alcance un momento), la aplicación intenta reconectarse automáticamente con retroceso exponencial:
| Intento | Espera |
|---|---|
| 1 | 2 segundos |
| 2 | 4 segundos |
| 3 | 8 segundos |
| 4 | 16 segundos |
| 5 y siguientes | 30 segundos (tope) |
El ciclo de reconexión continúa mientras el GPS por BLE siga activado. Si durante una reconexión el dispositivo no aparece en la caché de Bluetooth, la aplicación recurre a buscar el UUID del servicio NUS para volver a encontrarlo.
Si la desconexión la provoca el usuario deliberadamente, no se intenta ninguna reconexión.
Gestión del estado de Bluetooth
La aplicación responde a los cambios de estado del Bluetooth de iOS:
| Estado | Comportamiento |
|---|---|
| Encendido | Se conecta automáticamente al dispositivo guardado |
| Apagado | Considera perdida la conexión e informa de desconexión |
| Sin autorización | Registra un error: el usuario debe conceder el permiso de Bluetooth en los ajustes de iOS |
Conexión por TCP/IP
TCP/IP es un método alternativo para conectar un receptor GNSS externo en iOS. Funciona con receptores conectados a la red, casters NTRIP o datos GNSS retransmitidos por wifi desde un PC o un dispositivo complementario.
Configuración
- Abre Ajustes - Ajustes de levantamiento.
- Pon Origen GPS en NMEA por TCP/IP.
- Introduce el host (nombre de host o dirección IP).
- Introduce el número de puerto.
- Si quieres, activa la reconexión automática para recuperarte solo de las caídas de conexión.
La aplicación se conecta al punto TCP indicado y empieza a leer sentencias NMEA del flujo de datos.
Cómo funciona
Muchos receptores GNSS ofrecen un punto de acceso wifi o pueden transmitir datos NMEA por la red local. Algunas configuraciones habituales:
| Configuración | Descripción |
|---|---|
| Punto de acceso wifi del receptor | Conecta tu iPhone o iPad a la red wifi del receptor e introduce su dirección IP |
| Retransmisor NTRIP | Usa un PC o un dispositivo complementario para retransmitir por TCP las correcciones NTRIP y la salida NMEA |
| Red local | El receptor y el dispositivo iOS en la misma red wifi |
Si tu receptor tiene una aplicación complementaria capaz de emitir NMEA por un puerto TCP, puedes usarla junto a Mapit GIS. Configura la aplicación complementaria para que escuche en un puerto TCP y después apunta Mapit GIS a localhost (o a la IP del dispositivo) y a ese puerto.