Ir al contenido


Foto

Ayuda para enviar SMS con TSdpoSerial


  • Por favor identifícate para responder
19 respuestas en este tema

#1 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 12 junio 2011 - 09:38

Hola que tal, querido foro, estoy tratando de enviar un SMS usando el componente TSdpoSerial. En fin, conecto correctamente mi celular Motorola V360, me aparece en windows como un Moden conectado al puerto Com3, entro al hyperterminal y escribo la siguiente secuencia de comandos:

AT(enter)
Me responde OK

O sea todo bien, ahora preparo para mandar SMS, todo desde hyperterminal.

AT+CMGS="381XXXXXX"(enter)
Me aparece >
>(pongo el mensaje) y enter
>(mando la convinación ctrl+Z)

Y desde hyperterminal, me sale ok y en instante mi celular manda el mensaje.

Ahora en lazarus, creo un programa un aplicación, para poner el codigo de area, el numero y el mensaje. y en el evento onclick del un boton enviar, pongo el siguiente código (que es donde necesito ayuda).



delphi
  1. procedure TForm1.BEnviarClick(Sender: TObject);
  2. var
  3. strnumero:string;
  4. begin
  5.   SdpCel.Active:= True;
  6.   strnumero:= EArea.text + ENumero.text;
  7.   //agregar al final ctrl+z (ascii 26)
  8.   SdpCel.WriteData('AT+CMGS="' + strnumero +'"' + #13);
  9.   SdpCel.WriteData(MMensaje.Text + #13);
  10.   SdpCel.WriteData(#26);
  11. end;



En el evento onreaddata pongo lo siguiente, y me sale un tonelada de errores.



delphi
  1. procedure TForm1.SdpCelRxData(Sender: TObject);
  2. var rec: string;
  3. begin
  4.   rec:= SdpCel.ReadData;
  5.   if (rec = 'OK') then ShowMessage('Mensaje enviado correctamente')
  6.   else ShowMessage('Error: ' + rec);
  7. end;




Deberia aparecerme un ">" pero no lo hace, tampoco me aparece OK.
Bueno el tema es que no se que estoy haciendo mal, tal vez deba enviar en un sola vez, algo así.



delphi
  1. procedure TForm1.BEnviarClick(Sender: TObject);
  2. var
  3. strnumero:string;
  4. begin
  5.   SdpCel.Active:= True;
  6.   strnumero:= EArea.text + ENumero.text;
  7.   //agregar al final ctrl+z (ascii 26)
  8.   SdpCel.WriteData('AT+CMGS="' + strnumero +'"' + #13 + MMensaje.Text + #13 + #26);
  9. end;




Bueno, desde ya muchas gracias y al que le interese esta es una manera que la aplicación mande mensaje espero que le sirva a alguien.

  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 12 junio 2011 - 09:53

Hola

Yo creo que es una de dos

1. Es un problema de configuración de los parámetros de comunicación, Velocidad, Bit de Stop, Bits de Datos y Paridad

ó

2. Debes esperar la respuesta del dispositivo antes de enviar el siguiente comando.

Salud OS
  • 0

#3 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 13 junio 2011 - 06:08

Si creo que es eso, también lei en un foro de java, que había que poner un delay, para darle tiempo. Ahora no estoy en casa, recién a la tarde lo probare y mandare el 1º comando y esperare por ">" luego mandare el 2º y de vuelta esperare por ">", recién ahí mandare el 3º.

Muchas gracias, no creo que sea la configuración, recuerdo haber chequeado que sea la misma que tenia el hyperterminal, pero mejor empiezo por ahí.



  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 13 junio 2011 - 04:10

Me gustaria saber todas las configuraciones que usaste desde tu hyperterminal y si tu celular tiene que tener un plan de data o gprs para que puedas enviar sms por medio de hyperterminal.


Estaba tratando de emular el asunto con un puerto virtual via bluetooh, pero no recibo ninguna respuesta.
  • 0

#5 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 14 junio 2011 - 10:24

Cuando llegue a mi casa te pongo el detalle, pero el plan que uso es tarjeta creo que se llama prepago, o sea no tengo ningún plan de data ni nada por el estilo.
Algo importante de detallar que lo comandos no son lo mismo para motorola, en varios foros lei que para enviar mensaje era sinplente con:
AT+CMGS=381XXXXXX(enter)           
O sea sin comilla.

  • 0

#6 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 15 junio 2011 - 03:21

Recien ahora me libre:
La configuración que uso en el Celular, es que se debe configurar como módem, no como memoria, para eso en mi motorola v360, me voy a Programación -> Conexión -> Configuración usb -> Conexión predeterminada y me aparece 2 opciones una dice Tarjeta de memoria, la otra dice conexión data/fax (está es la que elijo).

Luego instalo los drivers del celular para windows y conecto el celular.
Me fijo en mi pc, botón derecho propiedades -> me voy a ... hardware y luego a administradores de dispositivos, busco módems y me aparece, Motorola USB Módem, le hago botón derecho, propiedades y en la pestaña Módem veo que para mi caso, usa los siguientes datos:
Com3
Velocidad 921600
Nada más.
Entro a hyperterminal, me pide:
1 - nombre de la conexion le pongo motorola, aceptar
2 - Me aparece una pantalla que dice "conectar a" no lleno nada en pais, codigo de area, numero de telefono. Pero en "conectar usando", ahí pongo Com3 y aceptar
3 - Me aparece una ventana que dice "Propiedades de Com3" pongo
bits por segundo: 2400
Bits de datos: 8
Paridad: Ninguno
Bits de parada: 1
Control de flujo: Hardware
(Todo lo anterior, no toque nada, ya estaba así)
4 - Me aparece ya todo listo, y uso el comando AT para ver si responde OK, el comando AT, lo traen TODOS los celulares (es lo que tengo entendido).

Ahora en este preciso momento, acabo de instalar un adaptador USB Bluetooth, y cuando entre a Modems vi que tenia 2 módems nuevo uno llamado "Bluetooth Dun Modem" y el otro "Bluetooth Fax Modem", en el "Bluetooth Dun Modem", me aparece
Puerto Com11
Velocidad 115200 (pero me da para elegir, antes no me daba)


  • 0

#7 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 15 junio 2011 - 03:32

El mensaje anterior se me corto, porque se trabo mal la maquina y aprete enviar y reinicie la maquina.
No se todavía como conectarme al cel por bluetooth acabado de abrir el bluetooth y lo conecte y se me traba el hyperterminal cuando accedo al com11.
Ya me voy a fijar.
ahora me pongo a trabajar con el programa para que espere por ">"
ya le cuento como me fue.
  • 0

#8 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 15 junio 2011 - 04:49

Ya mande mi primer mensaje desde lazarus, el problema estaba en la secuencia de comandos, el proximo codigo está incompleto, pero me tengo ir a trabajar aca en Tucuman argentina son las 7:55 a.m. y entro a la 8:30.

El código no optimizado es.


delphi
  1. procedure TForm1.BEnviarClick(Sender: TObject);
  2. var
  3. strnumero, rec:string;
  4. begin
  5.   //agregar al final ctrl+z (ascii 26)
  6.   strnumero:= EArea.text + ENumero.text;
  7.   SdpCel.Active:= True;
  8.   rec := SdpCel.ReadData;
  9.   Sleep(2000);
  10.   SdpCel.WriteData('AT' + #13);
  11.   rec := rec + SdpCel.ReadData;
  12.   Sleep(2000);
  13.   SdpCel.WriteData('AT+CMGS="' + strnumero +'"' + #13);
  14.   rec := rec + SdpCel.ReadData;
  15.   Sleep(2000);
  16.   SdpCel.WriteData(MMensaje.Text + #13);
  17.   rec := rec + SdpCel.ReadData;
  18.   Sleep(2000);
  19.   SdpCel.WriteData(#26);
  20.   rec := rec + SdpCel.ReadData;
  21.   MMensaje.Lines.Add('');
  22.   MMensaje.Lines.Add(rec);
  23. end;         




El problema se me dio, que ni de hyperterminal podia mandar el mensaje, cuando ponia
at+cmgs="AREANUMERO"
me daba error, leyendo desde el mensaje anterior, encontre varias paginas interesantes:
está ya la estaba usando http://translate.goo...=es&langpair=en|es&u=http://en.wikipedia.org/wiki/Motorola_phone_AT_commands
pero encontre:
http://www.tomshardw...sons-error-cmgs
Ahí explica que puede poner el comando
at+cmee=1
y te informa el error
luego puse el comando y me salio el error 304
entre a la pagina, donde te informa el error http://www.smssoluti.../gsmerrorcodes/
y ahí encontre que era problema de dpu
poniendo
at+cmgf=1
se habilita el envio
y luego funciona
en hyperterminal puse
at+cmgf=1
descolge y desde lazarus me ando,
ya mande mi primer mensaje  :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

  • 0

#9 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 15 junio 2011 - 06:15

Cuando llegue a mi casa, are el detalle, la primera vez que mande un sms habia probando tanta cosas que en alguna de los comando probado parece ser que envié at+cmgf=1 y luego termine mandando el mensaje, hay otro comando más que le precede al anterior es at+mode = 0 (para asegurarse que este en modo módem, ya acomodare las ideas, mejorare el código le di mucho tiempo para olvidarme de ese problema seguramente se puede esperar la respuesta y seguir, para no quedar a la escucha, además implementarlo en un hilo seria una buena idea (si alguien me da una mano con esto, estaría agradecido) luego que termine are un tuto al respecto.
;)


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 15 junio 2011 - 10:09

Que bien que ya has podido realizar el envío, con eso lo demás ya sólo es coser y cantar  :D :D :D (y)

Salud OS
  • 0

#11 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 15 junio 2011 - 03:20

que bueno que lo hayas logrado, voy a comprar otro celular y probar con el puerto serial.
  • 0

#12 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 15 junio 2011 - 03:53

Hojo que el celular tiene puerto mini USB, yo me conecto por puerto usb al celuar.

Yo diria que sigas tratando con el Bluetooth, una vez que yo termine con el puerto USB voy a tratar de hacerlo con Bluetooth.

No te olvides que tanto el puerto USB (Universal Serial Bus) y

bluetooth
Los dispositivos Bluetooth basados en la interfaz serie o de Rayos Infrarrojos (UART) se controlan mediante sio(4), ng_h4(4) y hcseriald(8). Este capítulo describe el uso de dispositivos Bluetooth USB. El soporte para Bluetooth se encuentra en las versiones de FreeBSD 5.0 y posteriores.

Sacado de http://www.freebsd.o...-bluetooth.html

O sea son en el fondo un puerto Serie, es más no debería de cambiar tu programa para la implementación de los distintos dispositivos, una vez bien configurados cada uno.
Además a la larga el software se termina comunicando con un modem el cual aparecerá como si se tratara de un puerto serie. Todo el parrafo anterior no se como justificarlo, tengo una laguna en el cerebro del funcionamiento interno de cada uno de los dispositivos, pero no tengo algo que afirme tajante mente lo que te estoy diciendo; lo sé pero no sé como justificarlo (por otro lado no soy experto en el tema, así que puede ser que este errado).

Dame un tiempito, un par de dias para que empiece a hacer pruebas con bluetooth o a las 7:00 a.m. se me trabo la maquina cuando conecte el adaptador usb bluetooth en su estreno.







  • 0

#13 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 16 junio 2011 - 07:15

jajajajjajajajajjaa ja ajajajaj aj HOJO jajajajajjaja quise decir ojo, eso es por escribir rapido
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 junio 2011 - 07:37

jajajajjajajajajjaa ja ajajajaj aj HOJO jajajajajjaja quise decir ojo, eso es por escribir rapido


Lo bueno que agarraste dormidos a los criticones :D :D :D

Salud OS
  • 0

#15 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 16 junio 2011 - 08:16

Listo, recién me puedo sentar en la maquina.
Este es el código del boton, para enviar SMS.



delphi
  1. procedure TForm1.BEnviarClick(Sender: TObject);
  2. var
  3. strnumero, rec:string;
  4. begin
  5.   //agregar al final ctrl+z (ascii 26)
  6.   strnumero:= EArea.text + ENumero.text;
  7.   SdpCel.Active:= True;
  8.   rec := SdpCel.ReadData;
  9.   Sleep(500);
  10.   SdpCel.WriteData('at+cmgf=1' + #13);
  11.   rec := rec + SdpCel.ReadData;
  12.   Sleep(500);
  13.   SdpCel.WriteData('AT+CMGS="' + strnumero +'"' + #13);
  14.   rec := rec + SdpCel.ReadData;
  15.   Sleep(500);
  16.   SdpCel.WriteData(MMensaje.Text + #13);
  17.   rec := rec + SdpCel.ReadData;
  18.   Sleep(500);
  19.   SdpCel.WriteData(#26);
  20.   rec := rec + SdpCel.ReadData;
  21.   MMensaje.Lines.Add('');
  22.   MMensaje.Lines.Add(rec);
  23. end;       



El componente SdpCel debe tener el puerto en el que está instalado el celular, en mi caso el COM3.

Ahora me pongo a ver como hago andar el celular por Bluetooth.

  • 0

#16 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 16 junio 2011 - 08:48

Como suponia, el programa funciona con Bletooth, solo que primero hay que conectarse con el software que viene con el bluetooth que uno compra, para eso uno debe.
1 - Poner el celular a la escucha.
2 - Buscar desde la pc, dispositivos, disponbles.
3 - Conectarse y poner la contraseña.

luego ejecuta el programa y el elije el puerto Com correspondiente, en mi caso el puerot com 11.
El mismo programa funciona.


  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 junio 2011 - 08:56

Que bien, pues ya estás del otro lado, ahora sólo falta la implementación. (y)

Salud OS
  • 0

#18 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 16 junio 2011 - 09:30

No todavía no termino.
Para Linux existe: http://wiki.lazarus....l.org/Bluetooth para que desde mi programa me conecte por bluetooth (igual en el celular abra que poner la clave).
Para windows, no encuentro nada en pascal pero pongo la mano en el fuego que hay algo para delphi y con un poco de suerte lo puedo pasar para lazarus.
Además cuando instalo el bluetooth, se instalan drivers en mi pc, esas dll, deben tener funciones para comunicarse por bluetooth, seria cuestión de saber como llamarlas. Sé que existe un programa en windows que te dice que dll estás ejecutando (los programas en ejecución que tienes), se que existe otro programa en windows que le pones una dll, y te dice que funciones o metodos que tienes (si tienen nombre entendibles es cuestion de llamarla), esto lo hice antes, no recuerdo de donde, ni como se llama el programa, ni que hice(de vuelta tengo una laguna en el cerebro) eso pasa por programar durante más de 10 años y de repente dejar de programar por 5 años y volver a programar.
:undecided: :undecided: :undecided:Creo que solo hice pruebas.

Si solo hice pruebas, siempre me quede con la ganas de usar una cámara de vídeo y para hacer eso, necesitas manejar las dll, si solo hice pruebas.

uhmmm, pero a lo que concierne para mi tesis final, ya recontra termine.
Tal vez que la corto acá, sigo con otros temas, me recibo (me urge por cambio de plan de estudio) y después sigo.






  • 0

#19 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 16 junio 2011 - 11:59

DLL Show me muestra las dll que usa mis programa.
Dll export me dice sus funciones (pero no me da parametro)

Encuentro que mi driver usa una dll llamada btfunc.dll
adentro hay una función que me interesa que se llama
bt_connectservice

Le pregunto a san google y me responde con un solo link http://perseo.cs.bua...esis/TES965.pdf
Abro el pdf (sorpresa en español) y busco "bt_connectservice" encuentro un detalle de una aplicación echa en Visual C++ 6.0 (sabia que alguna vez en la vida, el tiempo que perdí con ese lenguaje me iba a servir de algo).
Acá me quede estoy bastante emocionado, creo que nunca más debería dejar la programación de vuelta, esto de no tener ni idea de como hacer algo y como sea, sacarlo es el único trabajo en el que me imagino.

Creo que me voy a dormir para no ser un zombie (hoy en el laburo).



  • 0

#20 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 17 junio 2011 - 06:02

Ya encontré documentación de la librería.
en  http://en.pudn.com/d...l728784_en.html hay abajo un archivo de word.
Sera cuestión de crear funciones que llamen a las funciones de la dll.
Creo que seria una buena manera de aportar a Lazarus.




  • 0




IP.Board spam blocked by CleanTalk.