Redes de Área Local e Interconexión de Redes

Anuncio
Redes de Área Local e
Interconexión de Redes
Práctica 5
Control PC de un móvil mediante
comandos Hayes (AT+)
1.- Introducción
El auge de los últimos años en la telefonía
celular permite que hoy en día cualquier
usuario pueda comunicarse y conectar con
Internet desde prácticamente cualquier punto
de nuestra geografía. Los móviles actuales
(2.5G, 3G) no solo dan servicio de telefonía, son
también agendas, reproductores multimedia,
cámara de fotos… y permiten el acceso a
Internet a velocidades hasta hace poco
reservadas a líneas ADSL.
Una utilidad de los móviles actuales poco
conocida es la posibilidad que tienen de ser
utilizados como módem. Pueden ser usados
para transmitir datos de un PC a Internet o a
otro móvil utilizando la red celular.
Los móviles GSM (denominados de segunda
generación o 2G) funcionan como módems de
9.6 Kbps. Una velocidad lenta para los
requerimientos actuales, pero suficiente para
mandar “pequeños mensajes de texto” o SMS (Small Message System). Más
actuales, los móviles 2.5G (GPRS) pueden funcionar como módems de 40Kbps
de bajada y 9.6Kbps de subida de datos y los móviles 3G (UMTS) pueden
funcionar como módems de hasta 2Mbps en condiciones ideales de
funcionamiento.
1
Los profesores agradecen la colaboración de Vicente Sancho Guijarro en la realización de la práctica.
Redes de Área Local e Interconexión de Redes – DISCA - UPV
2.- Objetivos de la práctica
La práctica tiene por objetivo el control módem de un móvil desde un
ordenador personal mediante comandos Hayes. Estos comandos pueden ser
enviados al móvil desde el PC mediante un cable, conexión IrDA o mediante
enlace inalámbrico BlueTooth. Utilizaremos esta última opción.
Como ejercicio práctico se propone configurar un PC al que se le conecta
un sensor/alarma por la puerta paralelo y un móvil (modem) por la puerta
BlueTooth. Hay que desarrollar un programa que detecte si salta la alarma del
sensor y entonces mandar un SMS a través del módem.
Atención: La realización de esta práctica requiere el uso de un teléfono
móvil. Para algunos ejercicios, no todos, se requiere que el móvil pueda
acceder a la red celular (para hacer una llamada, para mandar un SMS, etc.).
Estos accesos a la red celular, algunos al menos, tienen un coste económico
que DEBE SER ASUMIDO POR EL ALUMNO propietario del móvil. Dado que el
laboratorio de redes no proporciona móviles con acceso a la red celular, el
alumno es libre de decidir si quiere o no hacer los ejercicios propuestos. Una
alternativa razonable, si no se quiere asumir ningún coste económico por error
de programación, es utilizar el móvil habiéndole quitado el módulo SIM
del operador telefónico (no todos los teléfonos móviles son operativos
cuando se les quita el SIM).
2
Redes de Área Local e Interconexión de Redes – DISCA - UPV
3.- Conexión PC-móvil y verificación
1. Arranque Windows XP e instale el adaptador BlueTooth en el PC.
XP indicará “Nuevo Hardware encontrado… listo para utilizarse”.
2. Active el BlueTooth en el móvil y seleccione la opción “Teléfono visible”.
3. En el PC; Inicio Æ Configuración Æ Panel de Control Æ Dispositivos
BlueTooth.
En la pestaña “Dispositivos” pulsar agregar.
El PC iniciará un escaneado para ver cuales dispositivos están en sus
inmediaciones. Esto puede llevar un par de minutos. Seleccione <su
móvil> y pulse siguiente.
4. El asistente para agregar dispositivos BlueTooth le preguntará si
quiere/debe utilizar una clave de paso para poder vincular el dispositivo
al PC. Utilice una clave de paso. Puede usar la opción “Deseo elegir mi
propia clave”. Utilice una clave de al menos 8 dígitos y no utilice
secuencias triviales como “12345678”. Tenga en cuenta que en el
laboratorio sus compañeros hacen la misma práctica.
5. El móvil le pedirá que introduzca la clave de paso para la vinculación
con el PC. Tiene un tiempo limitado para meter la clave (unos 30
segundos). Si todo va bien, el móvil se vincula al PC y este le informa de
los puertos serie (COM) asignados al móvil.
3
Redes de Área Local e Interconexión de Redes – DISCA - UPV
No todos los móviles tienen la capacidad de actuar como “modem
estándar con vínculo BlueTooth”, que es en nuestro caso el servicio
requerido. Y tampoco todos los móviles, aunque den el servicio de
“modem estándar”, aceptan todos los comandos Hayes.
6. Para ver si nuestro móvil tiene propiedades de módem:
Inicio Æ Configuración Æ Panel de Control Æ Opciones de teléfono y
módem. Vamos a la pestaña de Modem. Podemos ver si aparece
listado nuestro modem y a que puerta está vinculado.
Pulsando en el botón Propiedades y seleccionando la pestaña
Diagnóstico podemos pulsar el botón Consultar módem. Esto manda
una secuencia de comandos al módem e informa al usuario si los
comandos son soportados por el modem.
7. Para verificar la conexión PC-módem utilizaremos el hyperterminal de
Windows.
Inicio Æ Programas Æ Accesorios Æ Comunicaciones Æ Hyperterminal.
Este programa se limita a sacar por la puerta serie lo que tecleemos.
Debemos indicar como puerta serie la COMxx de salida asignada al
móvil. (ver punto 5). También podemos seleccionar Módem estándar
con vínculo BlueTooth del menú desplegable. (ver imagen).
4
Redes de Área Local e Interconexión de Redes – DISCA - UPV
8. Teclee “AT” (sin comillas) y pulse <intro>. El modem debe contestar OK.
Puede ser que al pulsar sobre el teclado no tenga eco en la pantalla.
Pruebe a teclear “ATE1” <intro> . El modem volverá a contestar OK y
activará el “modo ECHO-on”. A partir de ahora podrá ver en la pantalla
lo que va tecleando.
Si tiene problemas con la comunicación con el móvil a través de esa
puerta serie, puede probar alguna de estas opciones:
a. Intente utilizar el otro puerto COM que se asignó a su móvil.
Inténtelo también con “modem estándar con vinculo BlueTooth”
b. En Archivo Æ Propiedades vaya al menú desplegable en
Conectarse usando y seleccione “Modem estándar con vínculo
BlueTooth”.
En la misma ventana de diálogo, pulse el botón Configurar… y
seleccione como velocidad del puerto 9600 bit/seg.
Vuelva a configurar como puerto serie el COM saliente. Intente
ahora el comando AT
c. Si el hyperterminal se cuelga en alguna de las pruebas, es muy
probable que la puerta COM se quede bloqueada. Re-arranque
Windows.
5
Redes de Área Local e Interconexión de Redes – DISCA - UPV
4.- Comandos Hayes
La mayoría de los módems (tanto telefónicos como celulares) se controlan
y responden a caracteres enviados a través del puerto serie. El lenguaje de
comandos para módem más extendido es de los comandos Hayes.
Todos los comandos Hayes empiezan con la secuencia AT. La excepción es
el comando A/. Tecleando A/ se repite el último comando introducido. El
código AT consigue la atención del módem. Lo que venga a continuación es
el comando que el modem debe ejecutar.
Por ejemplo, los comandos:
AT+CGMI
AT+CGSN
AT+CIMI
Identity)
Pide al móvil que identifique el fabricante
Pide al móvil el número de serie
Pide al móvil el IMSI (International Mobile Subscriber
(no es el IMEI, el IMEI puede obtenerlo tecleando en el
móvil *#06#)
Ejercicio-1
Pruebe los comandos anteriores tecleándolos en el hyperterminal.
Pruebe, además, los comandos:
AT+CSQ
- Devuelve el estado de calidad de la señal de cobertura.
- Sintaxis: AT+CSQ | +CSQ: <rssi>,<ber>
<rssi> = 0 indica -113 dBm o menos
= 1 indica -111 dBm
= 2..30 indica -109..-53 dBm
= 31 indica -51dBm o más
= 99 indica desconocido
<ber> = 99 indica porcentaje desconocido
- Respuesta: +CSQ: 13,99
AT+CBC
- Devuelve el estado de carga de la batería.
- Sintaxis: AT+CBC | +CBC: <bcs>, <bcl>
<bcs> = 0 indica que el teléfono está conectado a una batería.
<bcl> = 0 indica que el teléfono tiene la batería agotada.
= 1..100 indica el porcentaje de carga que aún queda por agotar.
- Respuesta: +CBC:0,56
AT+CPBR=<indice inicial> [,<indice final>]
- Leer una entrada de la agenda de contactos.
- Sintaxis: AT+CPBR=<indice inicial> [,<indice final>] | +CPBR: <índice>, <número>,
<tipo>, <texto>
<índice> indica el índice de la agenda de contactos.
6
Redes de Área Local e Interconexión de Redes – DISCA - UPV
<número> indica el número de teléfono almacenado en el índice.
<tipo> indica el tipo de tipo de número de teléfono. Por defecto, 129 o 145 si
incluye el prefijo internacional +.
<text> indica el texto asociado al número de teléfono, normalmente, el nombre
del contacto.
- Respuesta a AT+CPBR=8: +CPBR: 8,"646123456",129,"Gospel"
Ejercicio-2
Atención: El comando a continuación hará que el móvil realice una
llamada telefónica. Si no se descuelga el terminal llamado, este ejercicio
no supondrá coste económico alguno. En cualquier caso es
responsabilidad del propietario del móvil realizar o no este ejercicio. Para el
ejercicio se requiere que el móvil esté conectado a una red celular (por lo
tanto, debe tener el SIM instalado)
ATD<numero>
- Inicia una llamada telefónica al número indicado.
- Sintaxis: ATD123456789
para una llamada de Datos.
ATD123456789;
para una llamada de Voz. (Importante la
notación ';')
ATD>"Pepe";
para llamar al contacto almacenado en la
agenda con el texto
asociado Pepe.
Ejercicio-3
Atención. Los comandos a continuación harán que el móvil mande un SMS.
El envío de SMSs no es gratuito. El coste depende del operador de telefonía
celular. (Coste típico 0,15€). Es responsabilidad del propietario del móvil
realizar o no este ejercicio.
No todos los móviles aceptan estos comandos. Este ejercicio está probado
en un Nokia 6600 y debería funcionar bien al menos en móviles de este
fabricante. Con Siemens (modelo SL-55) el ejercicio no funcionó.
AT+CMGF=1
{modo texto}
AT+CMGS="<num. Teléfono>"
{incluya las comillas}
> escriba el texto del SMS y termine con <CTRL-Z>
7
Redes de Área Local e Interconexión de Redes – DISCA - UPV
5.- Ejemplo de aplicación práctica
Todas las librerías, programas, y código fuente para la realización de este
ejercicio se encuentran en la web de la asignatura.
El objetivo es desarrollar una aplicación que compruebe el estado de un
pin concreto del puerto paralelo de un equipo informático. Cuando este pin se
ponga a alto nivel deberá mandar un comando por Bluetooth a un teléfono
móvil para que éste realice una llamada.
La solución a este problema podría servir, por ejemplo, para implementar
un sistema de alarma, en el cual un sensor estuviera conectado al puerto
paralelo y pusiera un pin del puerto paralelo a alto nivel cuando éste se
activara. Al activarse el sensor, el teléfono móvil conectado por Bluetooth al
ordenador podría llamar a un número, o bien, mandar un mensaje (SMS) al
número que le indiquemos para avisarnos de la activación del sensor.
La aplicación LPT1XP
Para simular el sensor y hacerlo más cómodo de activar, se ha utilizado una
aplicación en la cual podemos modificar el estado de los pines de nuestro
puerto paralelo sin necesidad de manipularlo físicamente o de conectar algún
periférico a él.
Dicha aplicación se llama LPT1XP y tiene licencia freeware, la cual está
descrita en el fichero Licencia.txt que acompaña a la aplicación. Está escrita
en Visual Basic y viene acompañada por su código fuente. Para el desarrollo
de esta aplicación se ha usado la librería la librería io.dll, que es la misma que
se usará en la aplicación a desarrollar, por lo que nos puede servir de ejemplo
del uso de esta librería en otro lenguaje de programación como es Visual
Basic.
8
Redes de Área Local e Interconexión de Redes – DISCA - UPV
Pantalla principal de LPT1XP
Como muestra la figura, podemos ver el estado de los puertos que
componen el puerto paralelo. Los marcados en verde se corresponden con el
puerto de entrada de datos. Podemos cambiar el estado de dichos pines
simplemente pulsando sobre ellos.
En la barra de botones nos aparecen tres botones. El primero de ellos, el del
círculo rojo con un aspa roja en su interior, sirve para cerrar el programa. Con
el botón de en medio podemos cambiar la visión del puerto paralelo,
pudiendo conmutar entre la visión del conector hembra y la del conector
macho. En la barra de estado nos aparece cual estamos viendo actualmente.
Por último, si pulsamos el botón de la interrogación nos aparecerá ayuda sobre
el funcionamiento del puerto paralelo mostrándonos su funcionamiento
interno, así como los nombres que se le da a cada uno de los pines.
Explicación de la solución
Para la implementación de la solución se ha optado por usar el lenguaje C
usando para ello la plataforma MS Visual C++ 6.0. Los ficheros de código
adjuntados son los siguientes:
• io.h / io.cpp
Se trata de una librería usada para la comunicación con los puertos
paralelos y serie desde Windows. En este caso se ha usado únicamente para la
comunicación con el puerto paralelo. Para el correcto funcionamiento de la
librería, el fichero io.dll debe ubicarse en el directorio C:\Windows\System\ ó
bien en la misma carpeta que el ejecutable. Se requieren permisos de
administrador para la primera ejecución de esta librería.
• serial.h / serial.cpp
Con la ayuda de esta librería se ha accedido al puerto serie virtual
(BlueTooth serializado) que está enlazado al teléfono móvil de una manera
fácil. Esta librería puede ser usada tanto desde Windows como desde Linux.
• StdAfx.h / StdAfx.cpp
9
Redes de Área Local e Interconexión de Redes – DISCA - UPV
Esta librería es requerida por io.h y es utilizada durante el precompilado.
• Principal.cpp
Este fichero contiene el código de la aplicación que a continuación
pasaremos a comentar.
Para empezar, se han cargado las librerías necesarias. Las dos primeras ya
se han comentado antes y nos dan la interfaz necesaria para poder
comunicarnos con los puertos serie y paralelo de nuestro equipo. La libraría
stdio.h es la estándar de entrada/salida y la usamos principalmente para poder
mostrar mensajes por pantalla (printf).
#include "io.h"
#include "serial.h"
#include <stdio.h>
Seguidamente definimos las constantes que usaremos. La primera se
corresponde con la dirección base del puerto paralelo, la cual suele ser 0x378.
La segunda constante es el nombre del puerto virtual creado para la
comunicación Bluetooth. En este caso el puerto era el COM4, pero se deberá
cambiar al nombre del puerto asociado al móvil en cada caso, el cual será de
la forma COMx.
#define PORTADDRESS 0x378
#define PUERTOBT "COM4"
Ya dentro de la función main, nos disponemos a abrir la comunicación con el
puerto paralelo. Para ello llamamos a LoadIODLL(), la cual simplemente carga la
librería io.dll, y a isDriverInstalled(), la cual comprueba que el controlador (driver)
del puerto paralelo está instalado para que podamos acceder correctamente
a él. Si estas dos funciones fallaran, devolverían un 0, por lo que se nos
devolvería un error por pantalla y saldría del programa.
if(LoadIODLL() == 0 && IsDriverInstalled() == 0) {
printf("\n**ERROR** No se ha podido inicializar el driver.");
getchar();
exit(1);
}
Si todo ha ido bien, ya podemos leer del puerto paralelo. Para ello usamos
la función GetPortBit, la cual recibe como parámetros la dirección base del
puerto (PORTADDRESS) y el número de bit de entrada a leer, devolviendo el valor
de dicho bit. Devolverá 0 si está activo y -1 si no lo está. En este caso hemos
puesto que compruebe el primer bit de entrada (D0).
Nótese que esta comprobación se ejecuta continuamente, ya que está
dentro de un bucle, el cual sólo ejecuta esa comprobación. Cuando se active
el bit saldrá del bucle y seguirá avanzando en el código.
printf("Esperando a que se active la entrada 1 del puerto paralelo...");
while(GetPortBit(PORTADDRESS,0) == 0);
printf("\nPuerto 0 *ACTIVO*\n");
Una vez ha llegado la activación del bit que interesa, se tiene que abrir el
puerto serie dedicado a la conexión Bluetooth y mandar el comando AT
10
Redes de Área Local e Interconexión de Redes – DISCA - UPV
correspondiente. Para abrir el puerto se ha creado un objeto de tipo CSerial,
cuya clase está definida en serial.h. En el constructor de dicha clase hay que
pasarle dos argumentos. El primero es el nombre del puerto, el cual lo hemos
definido en la constante PUERTOBT, y la velocidad del puerto. Al ser una
conexión Bluetooth, le podemos poner una velocidad de 115200 bps (B115200).
Una vez abierto el puerto, se llama al método Write del objeto que
acabamos de crear pasándole como argumento la cadena a mandar. En
este caso mandamos el comando ATD123; que se encarga de llamar al número
123. De esta forma el móvil se pondrá a llamar al número 123.
printf("\nLlamando...");
CSerial puerto = CSerial(PUERTOBT,B115200);
puerto.Write("\nATD123;\r");
Para probar el programa deberemos arrancar primero la aplicación LPT1XP
y desactivar todas las entradas del puerto paralelo (D0-D7) ya que por defecto
aparecen activadas. Una vez hecho esto ya podemos ejecutar el código
explicado. Éste se quedara a la espera de que activemos la entrada D0. Para
activarla pinchamos sobre ella (2ª de la fila superior empezando por la
derecha) en el programa LPT1XP. Una vez activa observamos que nuestro
programa ha salido del bucle y está mandando el comando AT al móvil.
11
Redes de Área Local e Interconexión de Redes – DISCA - UPV
Apéndice-A: Comandos Hayes de Nokia
NOKIA GSM AT COMMAND SET
Call Control
ATA
ATD
ATH
ATL
ATM
ATO
ATP
ATT
AT+CSTA
AT+CRC
Answer Command
Dial Command
Hang Up Call
Monitor Speaker Loudness
Monitor Speaker Mode
Go On-Line
Set Pulse Dial as Default
Set Tone Dial as Default
Select Type of Address
Cellular Result Codes
Data Card Control Commands
ATI
ATS
ATZ
AT&F
AT&V
AT&W
AT&Y
AT+CLCK
AT+COLP
AT+GCAP
AT+GMI
AT+GMM
AT+GMR
AT+GSN
Identification
Select an S-register
Recall Stored Profile
Restore Factory Settings
View Active Configuration
Store Parameters in Given Profile
Select Set as s Powerup Option
Facility Lock Command
Connected Line Identification Presentation
Request Complete Capabilities List
Request Manufacturer Identification
Request Model Identification
Request Revision Identification
Request Product Serial Number Identification
Phone Control Commands
AT+CBC
AT+CGMI
AT+CGMM
AT+CGMR
AT+CGSN
AT+CMEE
AT+CPAS
AT+CPBF
AT+CPBR
AT+CPBS
AT+CPBW
AT+CSCS
AT+CSQ
Battery Charge
Request Manufacturer Identification
Request Model Identification
Request Revision Identification
Request Product Serial Number Identification
Report Mobile Equipment Error
Phone Activity Status
Find Phone Book Entries
Read Phone Book Entry
Select Phone Book Memory Storage
Write Phone Book Entry
Select TE Character Set
Signal Quality
Computer Data Card Interface Commands
ATE
ATQ
ATV
ATX
AT&C
AT&D
Command Echo
Result Code Suppression
Define Response Format
Response Range Selection
Define DCD Usage
Define DTR Usage
12
Redes de Área Local e Interconexión de Redes – DISCA - UPV
AT&K
AT&Q
AT&S
AT+ICF
AT+IFC
AT+IPR
Select Flow Control
Define Communications Mode Option
Define DSR Option
DTE-DCE Character Framing
DTE-DCE Local Flow Control
Fixed DTE Rate
Service
AT+CLIP
AT+CR
AT+DR
AT+ILRR
Calling Line Identification Presentation
Service Reporting Control
Data Compression Reporting
DTE-DCE Local Rate Reporting
Network Communication Parameter Commands
ATB
AT+CBST
AT+CEER
AT+CRLP
AT+DS
Communications Standard Option
Select Bearer Service Type
Extended Error Report
Radio Link Protocol
Data Compression
Miscellaneous Commands
A/
Re-Execute Command Line
AT?
Command Help
AT*C
Start SMS Interpreter
AT*T
Enter SMS Block Mode Protocol
AT*V
Activate V.25bis Mode
AT*NOKIATEST
Test Command
AT+CESP
Enter SMS Block Mode Protocol
SMS Commands SMS Text Mode
AT+CSMS
AT+CPMS
AT+CMGF
AT+CSCA
AT+CSMP
AT+CSDH
AT+CSCB
AT+CSAS
AT+CRES
AT+CNMI
AT+CMGL
AT+CMGR
AT+CMGS
AT+CMSS
AT+CMGW
AT+CMGD
Select Message Service
Preferred Message Storage
Message Format
Service Centre Address
Set Text Mode Parameters
Show Text Mode Parameters
Select Cell Broadcast Message Types
Save Settings
Restore Settings
New Message Indications to TE
List Messages
Read Message
Send Message
Send Message from Storage
Write Message to Memory
Delete Message
SMS PDU Mode
AT+CMGL
AT+CMGR
AT+CMGS
AT+CMGW
List Messages
Read Message
Send Message
Write Message to Memory
13
Redes de Área Local e Interconexión de Redes – DISCA - UPV
Apéndice B: Capacidad de mandar/recibir SMS con comandos AT+
14
Redes de Área Local e Interconexión de Redes – DISCA - UPV
Apéndice C: Referencias
• http://www.activexperts.com/files/activsms/manual.htm#CHAP_GSMOUT
SMS and Pager Toolkit by ActiveXperts
Software para añadir capacidades de manejo de SMS a aplicaciones
VBasic.NET, C#.NET, Visual C++, ASP.NET, PHP, Java,…
• http://foro.elhacker.net/index.php?topic=161120.0
Comandos AT para Nokia 8310. Algunos son específicos de este móvil y sólo
funcionan en él, pero la mayoría son genéricos y funcionan en la mayoría de
los móviles con BlueTooth.
• http://www.solocodigo.com/index.php?opt=viewitem&id=339&type=1&n
ode=27
Programa LPT1XP
15
Descargar