15
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

aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

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

Page 2: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 26

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

Page 3: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 27

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:

Page 4: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 28

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.

Page 5: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 29

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)

yGPGSV (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.

Page 6: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 30

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.

Page 7: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 31

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 Sur-Oeste 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.

Page 8: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 32

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.

Page 9: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 33

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.

Page 10: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 34

La PCB que se muestra en la imagen sirve para la conversión de niveles simplemente y las tres líneas utilizadas para la comunicación son las señales RX, TX y GND del terminal móvil. El modem gsm admite la comunicación full-duplex y se adecua a la velocidad fijada por el 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…

Movil

RX-TX-GND

MAX232

Al PC

Page 11: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 35

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

Page 12: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 36

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

Page 13: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 37

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.

Page 14: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 38

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

Page 15: aplicacionbibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan... · de alto nivel como es el C++ Builder de Borland para conocer a fondo el proceso y posteriormente trasladarlo

Localizador GPS-GSM Iván Rodríguez Carmona

2.3. Aplicación C++ Builder - 39

Lectura SMS AT+CMGR=”id” +CMGR: 1,,117 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