2.3.Aplicación C++ Builder

Anuncio
2.3.
Aplicación C++ Builder
2.3.1. Introducción
2.3.2. Inicio
2.3.3. Configuración de los Puertos Serie
2.3.4. Consola de datos GPS
2.3.5. Visualización gráfica de la posición
2.3.6. Comunicación modem GSM
2.3.6.1. Funciones
2.3.6.2. Agenda
2.3.6.3. Lectura de SMS
2.3.6.4. Envío/Almacenamiento SMS
Localizador GPS-GSM
Iván Rodríguez Carmona
2.3.1. Introducción
Como ya dijimos en la introducción de este documento, para la realización de este
proyecto se comenzó por ir probando los protocolos de comunicación del terminal móvil y del
GPS. Una vez visto el canal, se continuó con la utilización de la información que nos enviaba
tanto el uno como el otro. Para facilitar esta labor, se ha recurrido a un entorno de programación
de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y
posteriormente trasladarlo a un sistema microcontrolador.
Los bloques más importantes de los que consta esta aplicación son los siguientes:
- Configuración de los puertos serie
- Consola de datos del GPS
- Visualización gráfica de la posición en un mapa
- Comunicación bidireccional con el móvil
A continuación iremos explicando de forma gráfica cada una de estas ventanas y su
funcionamiento.
2.3.2. Inicio
Al lanzar la aplicación la ventana inicial que nos aparece es la siguiente y en ella vemos
los distintos elementos.
Menús desplegables
Menú de estado
2.3. Aplicación C++ Builder - 26
Localizador GPS-GSM
Iván Rodríguez Carmona
En la parte superior de la ventana tenemos la barra de menús desplegable la cual nos
permitirá acceder a todas las opciones que dispone nuestra aplicación. Además de ser un menú
desplegable, existen teclas de acceso directo como por ejemplo las que vemos a continuación.
Cada una de estas opciones será explicada en detalle a continuación
2.3.3. Configuración de los puertos serie
La comunicación tanto del GPS como con el móvil se hace mediante protocolo RS232,
con lo cual hay que especificar cual van a ser los puertos a los que se conectan ambos
dispositivos y las velocidades de los mismos. La ventana que nos aparece cuando
seleccionamos Configuración o CTRL+C, es la siguiente:
2.3. Aplicación C++ Builder - 27
Localizador GPS-GSM
Iván Rodríguez Carmona
En primer lugar debemos habilitar el puerto para GPS o GSM según vayamos a utilizar
o ambos, validando el Check Box correspondiente. Esto nos habilita los ComboBox de COM y
BaudRate, pudiendo elegir el número de puerto y su velocidad. Una vez elegido esto clickamos
en el botón APLICAR para ver si ese puerto esta disponible. En caso afirmativo el led se pondrá
verde y podremos ACEPTAR. En caso de que se pusiese en rojo, la comprobación del puerto en
su apertura fue errónea y debida a múltiples causas, entre ellas la no existencia del mismo.
Cuando le damos al botón ACEPTAR y las comprobaciones han sido válidas se
actualiza un archivo .INI de configuración para evitar que cada vez que arrancamos el programa
tengamos que configurar los puertos. Para recuperar la configuración por defecto, pulsamos
DEFAULT.
2.3. Aplicación C++ Builder - 28
Localizador GPS-GSM
Iván Rodríguez Carmona
Este archivo se almacena C:\ y contiene número y velocidad de
ambos puertos y algunos datos más como algunos números de
teléfono que serán usados en otras pantallas.
Una vez que se han configurado los puertos, nos aparece en la barra inferior de la
pantalla inicial el estado de ambos puertos, pudiéndose acceder ahora al resto de ventanas sin
que nos de el aviso de que no esta el puerto configurado.
2.3.4. Consola de datos GPS
En esta ventana podemos ver los datos enviados por el GPS que por la configuración
que este tiene son 3 mensajes NMEA cada segundo y un 4º cada 5 segundos. Estos son:
GPGGA ( Global Positioning System)
GPGSA (Active Satellites)
GPRMC (Recommended Minimun)
y
GPGSV (Satellites in View)
Cada uno de estos mensajes comenzará a aparecer en la ventana superior, que
simplemente es la visualización de todo lo que nos llega por el puerto serie.
2.3. Aplicación C++ Builder - 29
Localizador GPS-GSM
Iván Rodríguez Carmona
Cuando queremos quedarnos con un mensaje y extraer la información para
representarla, debemos elegir cual de ellos vamos a filtrar. En este caso se han elegido el RMC y
GGA pero igualmente se podrían haber enumerado todos los que el GPS nos puede facilitar. De
cada uno de ellos se extraerá cierta información como son latitud longitud, hora, fecha… altitud…
En la siguiente pantalla vemos como nos hemos quedado con los mensajes filtrados y
como a partir de cada uno de ellos vamos actualizando la información en los campos inferiores.
Otra de las formas que nos permite la aplicación para mostrar los datos es de forma
gráfica. Eligiendo la segunda opción dentro del menú Opciones que es Medidores. En esta
pantalla se nos muestra de forma intuitiva dos magnitudes que nos devuelve el GPS como son la
velocidad y el rumbo del vehículo.
2.3. Aplicación C++ Builder - 30
Localizador GPS-GSM
Iván Rodríguez Carmona
2.3.5. Visualización gráfica de la posición en un mapa
Cuando obtenemos del GPS la posición latitud-longitud, además de visualizarla,
podemos utilizarla para la colocación de un punto dentro de un mapa cartografiado. En la
siguiente imagen vemos un mapa mundial con la cuadricula que nos marca latitud y longitud.
Son muchos los modelos que se utilizan para realizar la conversión de coordenadas
latitud-longitud con sus diferentes correcciones en función del geoide que se está utilizando para
la representación de la tierra. Como el objetivo de nuestro proyecto no ha sido este, se ha optado
por una solución lineal de manera que consideramos la tierra totalmente plana en la zona en la
cual estamos situados y hacemos una conversión de coordenadas latitud-longitud a píxeles de
pantalla como si se tratase de coordenadas X e Y.
Para realizar esta aplicación se ha partido de la captura de un mapa de la zona SurOeste de Andalucía. A continuación, y desde OziExplorer, se han tomado varios puntos para
obtener las coordenadas lat-lon y después sobre la imagen del mapa sus respectivas X e Y. Por
último se establece la relación proporcional lineal entre XY y lat-lon mediante una sencilla regla
de tres.
La forma de interactuar con el mapa puede ser la siguiente:
- Teniendo conectado el GPS e ir dándonos la posición exacta en cada
momento.
- Entrar de forma manual la posición para que veamos donde nos encontramos.
2.3. Aplicación C++ Builder - 31
Localizador GPS-GSM
Iván Rodríguez Carmona
En la siguiente captura vemos el mapa en cuestión:
Vemos en la barra inferior las coordenadas XY del ratón en el momento de la captura y a
la derecha su conversión a coordenadas latitud-longitud. El cuadrado rojo nos indica la
localización actual.
La otra forma de visualizar la posición actual o deseada es introducirla de forma manual.
Esto puede estar indicado si recibimos un SMS con la posición de nuestro coche y deseamos
saber donde se encuentra localizado. Para ello activamos la casilla MANUAL de la barra superior
y nos aparecen dos cuadros donde introduciremos las coordenadas obtenidas del GPS con su
mismo formato.
Lat: ddmm.mmmm
Lon: dddmm.mmmm
A continuación pulsamos sobre IR A y el cuadro rojo se nos situará en la posición indicada.
2.3. Aplicación C++ Builder - 32
Localizador GPS-GSM
Iván Rodríguez Carmona
2.3.6. Comunicación modem GSM
La parte que nos queda por probar es la comunicación del PC con el teléfono móvil, a
través de comandos AT. La lista de comandos Hayes es muy extensa y en lo que la aplicación
se refiere se han usado muchos de ellos pero no todos. Hemos probado los mas significativos
como son la lectura de parámetros del terminal (IMEI, fecha-hora, batería, versión, fabricante…),
actuaciones sobre el terminal (bloqueo, desbloqueo, envío de información de llamada..), lectura
de agenda, llamadas perdidas, recibidas… lectura/envío de SMS… Para más información sobre
los comandos AT, acudir a la bibliografía donde encontrará el manual con todos ellos.
En primer lugar vamos a ver un montaje del terminal móvil a través del puerto serie y a
continuación vamos a describir cada una de las pantallas donde se muestran las distintas
funcionalidades de los comando AT usados.
2.3. Aplicación C++ Builder - 33
Localizador GPS-GSM
Iván Rodríguez Carmona
La PCB que se muestra en la
MAX232
imagen sirve para la conversión de
niveles simplemente y las tres líneas
utilizadas para la comunicación son
Al PC
las señales RX, TX y GND del
Movil
terminal móvil. El modem gsm admite
la comunicación full-duplex y se
adecua a la velocidad fijada por el
RX-TX-GND
puerto serie del PC.
Para comprobar que la comunicación está
establecida
podemos
abrir
una
ventana
de
Hyperterminal y escribir la cadena AT para ver que
nos responde el móvil. En caso de que fuese todo
correcto nos devolvería un OK, como observamos en
la imagen. En caso contrario no nos llegaría nada.
Ahora si, veamos las diferentes pantallas de la aplicación:
- Funciones
- Agenda
- Lectura mensajes
- Envío Mensajes
2.3.6.1. Funciones: Con esta primera opción
accederemos a ciertos parámetros del móvil
como son su IMEI, fabricante, modelo, versión,
código de móvil, nivel de la batería, bloqueo,
desbloqueo…
2.3. Aplicación C++ Builder - 34
Localizador GPS-GSM
Iván Rodríguez Carmona
A continuación vemos el detalle de la pantalla con los datos leídos del móvil y mostrados
en la pantalla negra, así como el nivel de batería.
En la siguiente tabla mostramos todos los comandos AT utilizados con las respuestas
correspondientes:
Descripción
Comando
Respuesta
Obtención del IMEI
AT+CGSN
352377005117318
Número de fabricante
AT+CGMI
SIEMENS
Versión
AT+CGMR
11
Código de móvil
AT+CGMM
M55
Batería
AT+CBC
+CBC: 0,80
Bloqueo
AT+CLCK=CS,1
OK
Desbloqueo
AT+CLCK=CS,0
OK
Hora
AT+CCLK?
+CCLK: "05/08/22,20:17:43"
Información entrante
AT+CLIP=1
OK
RING
+CLIP: "686120802",161,,,,0
2.3. Aplicación C++ Builder - 35
Localizador GPS-GSM
Iván Rodríguez Carmona
Otra de las funciones que tenemos en esta pantalla es la detección de alarmas en
función del número de llamadas perdidas que recibamos en el móvil ya sean de un número
cualquiera o un determinado número. Para ello indicamos cuantas perdidas tenemos que recibir
para que salte de alarma, si es de un número determinado o no y activaremos el check Box para
que se arranque el proceso que gestionará la llegada de entrantes.
La diferencia entre numero determinado o no es la respuesta que nos llega desde el
móvil ya que por defecto sólo nos enviará la cadena RING cada vez que se realice una llamada
sobre este móvil, mientras que si activamos la información de llamada (AT+CLIP=1), el modem
nos enviará además de la cadena RING, el número entrante. El aspecto de la pantalla de
detección de entrantes sería el siguiente:
2.3.6.2. Agenda: en esta pantalla se engloban todos los controles para poder visualizar la
agenda de teléfonos y las llamadas recibidas, perdidas y realizadas. Si lo deseamos podremos
leer toda la agenda de nuestro terminal y almacenarla en un fichero de texto para su
almacenamiento. Además de esto, se podrían añadir nuevas opciones sin más que usar otro de
los comandos AT, como por ejemplo la introducción de nuevas entradas en la agenda. La lista de
los usados en esta pantalla son los siguientes:
Descripción
Comando
Respuesta
Selección SIM
AT+CPBS=SM
OK
Selección ultimas enviadas
AT+CPBS=LD
OK
Selección ultimas recibidas
AT+CPBS=RC
OK
2.3. Aplicación C++ Builder - 36
Localizador GPS-GSM
Iván Rodríguez Carmona
Selección ultimas perdidas
AT+CPBS=MC
OK
Lectura entrada
AT+CPBR=”id”
+CPBR: 12,"956074638",129,"Abalo (h)"
2.3.6.3. Lectura mensajes: los SMS almacenados tanto en la memoria SIM como en la del móvil
están en formato PDU, con lo cual cuando leemos una de las entradas nos aparece una cadena
codificada que no podemos interpretar directamente. Si leemos la entrada 4 de la memoria del
móvil tenemos el siguiente SMS.
2.3. Aplicación C++ Builder - 37
Localizador GPS-GSM
Iván Rodríguez Carmona
En el apartado dedicado al modem GSM se ha explicado la conversión de formato ASCII
a PDU y viceversa, con lo cual aquí nos vamos a limitar a ver como trabaja la aplicación y las
posibilidades que nos ofrece.
Podemos elegir la lectura de la memoria SIM o la del móvil con los checks box de la
izquierda. A continuación el índice del SMS y pulsamos sobre el botón LECTURA. Tras la
visualización del SMS en el Memo superior se decodifican todos los campos del SMS,
colocándose correspondientemente en los edits y mostrando el texto ASCII que contiene. En el
memo inferior se muestra el texto junto con la fecha/hora del envío para su almacenamiento en
archivo de texto si se desea.
Una vez leído el SMS puede borrarse con tal solo pulsar el botón situado a la derecha
del primer memo.
Los comandos AT usados en esta pantalla han sido los siguientes:
Descripción
Comando
Respuesta
Selección memoria SIM
AT+CPMS=SM,SM,SM
+CPMS: 9,25,9,25,9,25
Selección memoria móvil
AT+CPMS=ME,ME,ME
+CPMS: 90,100,90,100,90,100
2.3. Aplicación C++ Builder - 38
Localizador GPS-GSM
Iván Rodríguez Carmona
+CMGR: 1,,117
Lectura SMS
AT+CMGR=”id”
079...8406A545D699CD124E9F5310
OK
Borrar SMS
AT+CMGD=”id”
OK
2.3.6.4. Envío/Almacenamiento de mensajes: una vez que tenemos la decodificación del
formato PDU, podremos realizar el proceso inverso al anterior para convertir un texto ascii a PDU
y así poder almacenarlo en el móvil o bien enviarlo a un destinatario. Al igual que en el caso
anterior invitamos al lector a documentarse de cómo se realiza este proceso acudiendo al
apartado del modem GSM.
En la pantalla siguiente vemos el entorno del envío de mensajes. En el primer Memo
escribiremos el texto a enviar/almacenar, y con los edits de los laterales llevamos el conteo de
caracteres usados para no exceder los 160 que permite el standard. Una vez terminado damos
al botón CONVERTIR para codificar el ascii a PDU, además de añadirle las cabeceras y el
número de destino. Lo único que nos queda es decidir si deseamos enviarlo, pulsando el botón
ENVIAR o bien almacenarlo en la memoria del móvil o en la SIM, botón GUARDAR. En el memo
inferior vemos el dialogo modem GSM
PC, observando que todo ha ido correcto y que se ha
almacenado/enviado correctamente
Pantalla del móvil
2.3. Aplicación C++ Builder - 39
Descargar