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 puedaPrimero 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ónAgregamos un Control que nos permite conectar el puerto COM (o puerto serial),
“Serialport”Armamos una función de conexiónPrivate 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 FunctionDe 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 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 FunctionEL chr(13) es necesario para darle ingreso al comando AT
Ahora unos comandos AT para tener en cuenta
ATZ&F = resetea el dispositivoPrivate 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+CMGSPrivate 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 FunctionChr(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 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 FunctionPara recibir en forma automática mensajes que vaya recibiendo el dispositivo sería: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 FunctionBueno 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