Autor Tema: ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT  (Leído 19229 veces)

0 Usuarios y 1 Visitante están viendo este tema.

softmania

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +4/-0
    • Ver Perfil
ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« en: Noviembre 19, 2013, 01:46:14 am »
Citar
Esto se encuentra en el foro de vb6 y el código es correspondiente a vb.net ... Moderador mi intención no es hacer spam ... simplemente trato de ordenar la información, el tema es que no se si debo borrar de vb6 el post ya que fue una respuesta.

Hola, bueno explicaré un poco como es el tema de los módem GSM a través de USB, así pueden practicar desde su celular, módem Claro, módem Movistar o desde cuales quiera…

Es realmente fácil la manipulación de los mismos, hay código AT estándar  que se aplica prácticamente en todos los módem y hay otros que son particulares de cada dispositivo…
Estos códigos AT nos permiten conversar con el dispositivo, pudiendo ejecutar intrucciones en el mismo, obtener datos y establecer configuraciones ...
No empecé explicando que es un comando AT, porque no pretendo profundizar conceptos, ni aburrirlos, pero sería bueno que investiguen un poco sobre el tema
Vamos al grano…

Explicaré con Vb.net, pero es equivalente a VB6…

Trataré de hacer el ejemplo lo más simple que se pueda

Primero hay que tener el driver del módem el cual permitirá interactuar con el puerto serie a través del puerto USB … este puede venir en forma individual o contenido en el aplicativo que la empresa haya proporcionado para interactuar con el mismo … ok

Una vez que tenemos instalado el driver… hay que identificar el puerto COM con el que acepta los comandos AT, ya que puede haber más de uno utilizados por el dispositivo…

En algunos casos se puede saber porque esta descripto en el mismo nombre con el que se encuentra el driver, en administrador de dispositivos (caso Windows), pero otras veces habrá que hacer algunas pruebas…

Programación

Agregamos un Control que nos permite conectar el puerto COM (o puerto serial), “Serialport”

Armamos una función de conexión

Código: (VB) [Seleccionar]
Private Function Conectar() As String
        Try
            With SerialPort1
                If .IsOpen Then
                    .Close()
                End If
                .PortName = “COM9”
                .BaudRate = 9600 ‘bits por segundo (velocidad)
                .DataBits = 8 ‘bits de datos
                .DtrEnable = False
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
                .Handshake = IO.Ports.Handshake.None
                .WriteBufferSize = 1024 ‘buffer de escritura
                .ReadBufferSize = 2048 ‘buffer de lectura
                .WriteTimeout = 500 ‘tiempo de espera
                .Encoding = System.Text.Encoding.Default
                .Open()
            End With
            Conectar = vbOK
        Catch ex As Exception
            Conectar = ex.Message
        End Try
    End Function

Citar
De donde saque los datos de la función?  De las propiedades del dispositivo,  allí se detalla la configuración del puerto …

Bién, ya estamos conectados… ahora … ¿Cómo enviamos un comando AT?

Haremos otra función para que se entienda

Código: (VB) [Seleccionar]
Public Function Check_AT() As String
        Try
            SerialPort1.Write("AT" & Chr(13))
            Check_AT = vbOK
        Catch ex As Exception
            Check_AT = ex.Message
        End Try
    End Function

Citar
EL chr(13) es necesario para darle ingreso al comando AT


Ahora unos comandos AT para tener en cuenta

ATZ&F = resetea el dispositivo

Código: (VB) [Seleccionar]
Private Function Resetear() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            Resetear = vbOK
        Catch ex As Exception
            Resetear = ex.Message
        End Try
End Function

Para enviar SMS se construiría de la siguiente manera: AT+CMGS

Código: (VB) [Seleccionar]
Private Function Enviar_mensaje(ByVal Numero_Movil As String, ByVal Mensaje As String) As String
        Try
            SerialPort1.Write("APZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto
            SerialPort1.Write("AT+CMGS=" & Chr(34) & (Numero_Movil) & Chr(34) & Chr(13))
            SerialPort1.Write(Mensaje & Chr(26))
            Enviar_mensaje = vbOK
        Catch ex As Exception
            Enviar_mensaje = ex.Message
        End Try
End Function

Citar
Chr(26) es un carácter especial necesario para poder indicar el envío del mensaje “→”

Para obtener mensajes contenidos en el dispositivo sería algo así: AT+CMGL

Código: (VB) [Seleccionar]
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto

            Select Case Tipo
                Case 0
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no leidos
                Case 1
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC READ" & Chr(34) & Chr(13)) ‘solo recibiremos los sms leidos
                Case 2
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO UNSENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no enviados
                Case 3
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO SENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms enviados
                Case 4
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & Chr(13)) ‘Recibiremos todos los sms

            End Select
            Recibir_mensaje = vbOK
        Catch ex As Exception
            Recibir_mensaje = ex.Message
        End Try
End Function

Para recibir en forma automática mensajes que vaya recibiendo el dispositivo sería:

Código: (VB) [Seleccionar]
Private Function Auto_Recibir() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13)) ‘reseteamos
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘establecemos el modo texto
            SerialPort1.Write("AT+CNMI=" & Chr(34) & "1,2,0,0,0" & Chr(34) & Chr(13)) ‘esto es más largo de explicar, recomiendo lo investiguen
            Auto_Recibir = vbOK
        Catch ex As Exception

            Auto_Recibir = ex.Message
        End Try

    End Function

Bueno hay muchos comandos mas, como saber la señal del dispositivo, nivel de carga de la batería, fabricante, se pueden hacer llamadas, colgar llamadas, etc y algo interesante para que investiguen, se pueden redireccionar llamadas ... mnmnm

Bueno salu2
« última modificación: Noviembre 19, 2013, 01:47:55 am por softmania »
Solo se que no se nada!!! ;) By Sócrates

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #1 en: Noviembre 19, 2013, 10:19:03 am »
Yo era que prepare también algo similar pero nunca me funciono para recibir el mensaje.
La funcion que pasaste aca me dice un error en As Tipo no esta definido.

Código: (VB) [Seleccionar]
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
Yo tengo un Galaxy S2 como se en que puerto esta conectado.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #2 en: Noviembre 19, 2013, 02:52:54 pm »
Mira vos, yo siempre trabaje directamente con los modulos motorola G20/G24, pensaba que esos comandos eran especificos de motorola, no sabia que era un std gsm

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #3 en: Noviembre 19, 2013, 03:54:57 pm »
¡Qué bueno!
Me gustaría implementar esto. ¿Alguien podría decirme qué se necesita para ello? No sé nada al respecto, por lo que no sé si se necesita un modem especial (y si se debe comprar a las empresas prestadoras del servicio de telefonía celular), alguna autorización o registración, etcétera.
Muchas gracias.

Jerónimo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #4 en: Noviembre 19, 2013, 04:05:08 pm »
yo siempre use un modem,
pero por lo que comenta el amigo "softmania" con cualquier telefono conectado x USB con los drivers correspondientes a una pc, seguramente aparezca como un puerto COM en la PC, una vez que identificas el puerto, lo abris como un puerto serie comun y le envias los comandos AT.

No la telefonica, no tiene idea, el SMS lo envia siempre el telefono, ya sea escribiendolo en el tel o por el comando AT, pero en definitiva siempre sale un SMS

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #5 en: Noviembre 19, 2013, 05:24:06 pm »
Gracias, Waldo.
¿El modem qué tipo de modem es? La última vez que usé uno era para dial-up  :-[
Imagino que siempre será más cómodo poner un modem y no estar conectando y desconectando un teléfono, ¿no?
Muchas gracias.

Jerónimo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #6 en: Noviembre 19, 2013, 05:36:51 pm »
Con los unicos que yo trabaje son Motorola modelos G20 o G24, pero no es un modem externo con gabinete, es mas bien un OEM para algun proyecto electronico, necesita fuente y la interfaz es serial RS-232

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #7 en: Noviembre 19, 2013, 05:50:12 pm »
Perdón por la ignorancia.
¿A ese modem se le pone un chip de telefonía celular para que pueda enviar mensajes?
Muchas gracias.

Jerónimo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #8 en: Noviembre 19, 2013, 05:55:20 pm »
Si, si un simcard comun y silvestre como el de cualquier telefono

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #9 en: Noviembre 19, 2013, 05:58:52 pm »
Excelente.
Muchas gracias, Waldo, por tus respuestas y por tu tiempo.

Jerónimo

softmania

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +4/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #10 en: Noviembre 20, 2013, 12:20:01 am »
Hola Enter ... te defino a función que pides ...


Citar
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String

Código: (VB) [Seleccionar]
Enum Tipo
        SMS_NO_LEIDOS
        SMS_LEIDOS
        SMS_NO_ENVIADOS
        SMS_ENVIADOS
        SMS_TODOS
    End Enum

 
Código: (VB) [Seleccionar]
  Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) 'este comando establece el modo texto

            Select Case Tipo
                Case Form1.Tipo.SMS_NO_LEIDOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr(13)) 'solo recibiremos los sms no leidos
                Case Form1.Tipo.SMS_LEIDOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC READ" & Chr(34) & Chr(13)) 'solo recibiremos los sms leidos
                Case Form1.Tipo.SMS_NO_ENVIADOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO UNSENT" & Chr(34) & Chr(13)) 'solo recibiremos los sms no enviados
                Case Form1.Tipo.SMS_ENVIADOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO SENT" & Chr(34) & Chr(13)) 'solo recibiremos los sms enviados
                Case Form1.Tipo.SMS_TODOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & Chr(13)) 'Recibiremos todos los sms

            End Select
            Recibir_mensaje = vbOK
        Catch ex As Exception
            Recibir_mensaje = ex.Message
        End Try
    End Function

Hola Jerónimo

Citar
no sé si se necesita un modem especial

Puedes usar cualquier módem gsm ... (puede que tengas un módem gsm a mano como son los módem claro y movistar que se usan para conectividad de internet o simplemente tu celular ... con el tema del celular puedes tener algunos  inconveniente dependiendo de la marca y modelo ...  )

Y como dice el colega Waldo

Citar
Si, si un simcard comun y silvestre como el de cualquier telefono



Esto tiene muchas aplicaciones. Se puede implementar en Desarrollos en donde automáticamente se envíen mensajes individuales o masivos para diferentes propósitos ....

Publicidades, estados de deudas, etc ...

Pero esto es potenciado con la capacidad de recibir y procesar los mensajes recibidos ... ya que mediante ellos se puede tener una conversación automatizada con el emisor ... ejemplo ... ampliaciones de servicios, selección de opciones, códigos de alertas,etc

Creo que ampliaré un poco mas con un ejemplo, consigan un módem claro, este tipo módem trae los driver contenidos en el mismo ...  ya estaré subiendo un ejemplo ... salu2 colegas

Solo se que no se nada!!! ;) By Sócrates

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #11 en: Noviembre 20, 2013, 12:50:45 am »
Excelente, softmania.
Muchas gracias.

Jerónimo

softmania

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +4/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #12 en: Noviembre 20, 2013, 02:04:22 am »
Hola nuevamente Colegas ...

Bueno acá les dejo el Link de un ejemplo en vb2010.  :)

Hay una clase que les permitirá utilizar un módem GSM ... y un plus  ::) ... que es una función que fue echa a medida del módem claro, separando la cadena de datos obtenidas y presentada en el listview ...

http://www.mediafire.com/download/9ijg2kwnpmkbbf8/Modem_SMS.rar

pass: softmania

Salu2 Colegas
Solo se que no se nada!!! ;) By Sócrates

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #13 en: Noviembre 20, 2013, 09:49:30 am »
Gracias por compartir.

Un dato para tener en cuenta que me paso en algunas ocasiones.

Para enviar un sms luego de ingresar el texto del mensaje se termina con un ctrl+z , o chr 26.

Bueno tenia hecho mi codigo similar al tuyo, y luego del ctrl+z, el modem devolvia error, no siempre.
Una vez, mientras devolvia error continuamente,  pare el programa, abrir un hyperterminal y ejecute todo a mano, y perfecto sin error, me puse a pensar cual era la diferencia, y se me ocurrio que al hacerlo a mano, existe un delay entre que termino de escribir el texto y luego ingreso el ctrl+z, asi que se me ocurrio en mi codigo poner un delay antes del ctrl+z, y nunca mas fallo.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« Respuesta #14 en: Noviembre 20, 2013, 10:13:18 am »
Excelente información. Gracias a ambos por compartirla.
Voy a ver si me consigo un modem para empezar a probar.
Saludos.

Jerónimo