Programando en Java con los modems Siemens. Tercera entrega
Escrito por blogElectronica en 2.DISPOSITIVOS (práctico), Comunic. GSM/GPRS, GPSPor fin este Sábado he tenido un poquito de tiempo y os puedo poner la tercera y última entrega de la aplicación que prometí a principios de mes y que acabo de terminar. Lo que ha cambiado es lo que dije en la segunda entrega. En esta ocasión la posición GPS no se envía a un número que tengamos grabado en el fichero JAD. Ahora en el fichero JAD sólo tendremos el PIN de la tarjeta SIM por si hace falta.
Entonces, ¿qué es lo nuevo?
Pues ahora si desde un móvil cualquiera se envía un SMS con un texto, el módem MTX65+G va a decodificar el SMS entrante, obteniendo por un lado el nº de teléfono del teléfono que ha enviado el SMS y por otro lado el texto del SMS. Entonces, si se recibe un texto con la palabra:
el modem coge la posición actual GPS y la envía por SMS al nº de teléfono que envió el SMS.
“abrir“
el modem activa (pone a “1″) la salida GPIO 0 del módem, con lo que podríamos activar un relé, por ejemplo.
“cerrar“
el modem desactiva (pone a “0″) la salida GPIO 0 del módem, con lo que podríamos desactivar un relé.
Principalmente se han añadido los métodos al proyecto:
“int cambiarGPIO(int numGPIO, int valor)“
mediante el cual podemos cambiar el estado de una GPIO poniendola a “1″ o “0″. En el ejemplo sólo vamos a utilizar la GPIO número 0.
“SMS leerSMS(int posicionDeMemoria)“
mediante el cual decodificamos un SMS entrante obteniendo dentro de una clase SMS por un lado el número de teléfono que ha enviado el SMS y por otro lado el texto del mensaje.
Quedaría una cosa que no voy a hacer, eso ya os lo dejo a vosotros. Y es que estaría bien que cuando se procese un SMS entrante, después de ser procesado se elimine de la memoria del módem, pues de lo contrario llegará un momento que se llene la memoria del modem de SMSs (como ocurre con cualquier móvil) y no se podrán recibir más. Para ello no habría más que crear otro método que se llamara por ejemplo “borrarSMS” y utilizar el comando AT+cmgd para borrar el SMS una vez procesado. Muy muy fácil.
Os pongo esta tercera y última entrega aquí.
Recordar que todo este programa vale tanto para el módulo Siemens XT65 como para el MTX65+G. Para quien le interese estos módems son distribuidos en España por Matrix Electronica.
Espero que os haya gustado y hayáis encontrado de interés estos tres últimos artículos, y que pueda ayudar a aquellos que dáis los primeros pasos con los modems de Siemens
Post relacionados:
- Programando en Java con los modems Siemens. Segunda entrega Hoy no tengo mucho tiempo así que seré breve. Acabo...
- Programando en Java con los modems Siemens. Primera entrega. Hace unos días puse que crearía un programita Java para...
- Añadir datos a ficheros con módems Siemens-Cinterion desde java En bastantes ocasiones me ha llegado la pregunta de cómo...
- Cómo usar ficheros con módems de Siemens desde Java. Como seguro ya sabéis, varios de los modelos de módems...
- Autoarranque de aplicaciones Java en módems Siemens Muy buenas. Hoy voy a poner un pequeño post relacionado con...
Buenísimo tu post como siempre.
Sigue así. Mucho ánimo y muchas gracias por el blog
Hola Kanemor, muchas gracias.
Aprovecho para apuntar un inciso sobre el post. Cuando hablo de que es posible conmutar un relé desde una GPIO del MTX65+G, presupongo que sabéis que se necesita una etapa entre la GPIO y el Relé (un transistor, un ULN2003, o lo que sea …). Evidentemente no puede atacarse a un relé directamente desde la salida GPIO.
Para el que no lo tenga muy claro os pongo un link que tal vez os sea de interés:
http://perso.wanadoo.es/luis_ju/edigital/qnpn_pnp.html
Salu2.
Sólo tengo un pega, no me llegan los mensajes SMS al módulo. Lo estoy probando con una tarjeta de vodafone y he comprobado que cuando envío un sms no me llega al módulo. En cambio, cuando saco la tarjeta y la pongo en el móvil, el mensaje llega. ¿Qué hago mal? ¿Qué me falta?
Hola Tyler,
suponiendo que no tienes problemas de código PIN (AT+CPIN?), que la cobertura es correcta (AT+CSQ) etc etc …
prueba a enviar desde el hyperterminal el comando AT:
AT+CPMS=”SM”,”SM”,”SM”
y después vuelve a probar el programa.
Salu2.
Al poner AT+CPMS=”SM”,”SM”,”SM” me responde:
+CPMS: 13,15,13,15,13,15
¿Significa que le queda espacio, verdad?
He realizado una prueba más, cuando arranco la aplicación utilizo la función enviarSMS() para mandarme un SMS y notificarme que todo ha arrancado correctamente. Pero cuando le respondo con otro SMS para que me devuelva la posición, nada de nada. He comprobado, poniendo todos los comandos en el hiperterminal, que los URC del GPS llegan puntuales cada 5 segundos, pero cuando le mando el SMS, en el hiperterminal no aparece nada.
¿Alguna sugerencia?
Puntulizo mi comentario anterior
Resulta que los mensajes sí que han llegado, porque ahora el AT+CPMS=”SM”,”SM”,”SM” me responde:
+CPMS: 15,15,15,15,15,15
y los he leído y son los míos, pero entonces, porque el código URC no ha saltado? ni tampoco al probarlo por hiperterminal? … algo se me debe estar olvidando en la configuración de mi módulo…
Vale, ya me funciona todo!! He puesto unos valores por defecto y al borrar unos mensajes ha funcionado todo a la perfección.
Gracias por este fantástico ejemplo!!
Hola Tyler,
me alegro que te hayas podido resolver tu solo todas tus dudas. Ya sabéis que yo contesto por las tardes-noches.
Y gracias a ti por usar la aplicación. Es gratificante ver que la aplicación puede ser de utilidad.
Salu2.
Hola,
Muchas gracias por tus nueva entrada, he aprendido muchas cosas. Además hoy me han llegado los nuevos juguetitos (los MTX65+G) los he estado probando enviandoles comandos at por el hyperterminal y todo funciona bien pero cuando con el comenado at^sgpsr=0 que deberia devolverme los datos del GPS me da los datos por defecto (fecha 1980/01/06 etc). Al principio creia que podia ser un problema de cobertura asi que lo he probado en otro lugar, al final he conseguido tener una fecha exacta pero la posicion (90ºN 0ºE no es correcta, aunque hace frio de momento esto no es el polo). No se si puede darme una idea de cual es el error.
De nuevo muchas gracias.
Hola,
el problema q indicas es un problema de cobertura y/o de tiempo de arranque en frio. Piensa q cuando arrancas por primera vez un GPS debe de cargar el almanaque y efemerides, eso puede llevarte un minuto. Si quieres puedes utikizar comandos at para consultar la carga de estos datos. El gps del xt65 es un UBLOX con chipset de actaris (v4 creo) q es de lo mejorcito q hay.
Salu2.
Hola,
Antes de nada me gustaría felicitarte por este tremendo blog, y a los usuarios de el, animaros a utilizar el foro de este blog, en mi opinión tiene mucho futuro.
Tengo una pequeña duda con el MTX-G+65. Al conectar el modulo, y enchufar el GPS, está claro que este tarda unos segundos en obtener la posición válida. ¿Existe alguna instrucción o método para esperar a que esta posición sea valida?, Por ejemplo, en tu fabuloso programa ejemplo, cuando recibe el mensaje, este reenvía otro mensaje con la posición actual, pero si el modulo se acaba de enchufar y la posición no es valida, la envía erróneamente ¿Se te ocurre alguna solución?, Este problema se ve reflejado igualmente si por algún motivo el modulo está en funcionamiento y entra en un túnel por ejemplo.
Salu2 y de nuevo, mis felicitaciones!
Hola Juan, muchas gracias por tus comentarios.
En el programa se utilizan URCs que devuelven esta información:
GpsDate, GpsUTCTime, GpsLatitude, N-S-Indicator, GpsLongitude, EW-Indicator, GpsAltitude, GpsSpeed, GpsCourse, GpsStatus
Utiliza el último parámetro GpsStatus, que si no recuerdo mal debería valer 3 para tener una posición válida. Es cierto que un pequeño control de esta valiable (con un if … ) debería introducirse en el programa para el momento del arranque, de todas formas, en el mensaje SMS enviado, también verás este último parámetro con lo que sabrás si la posición es válida o no, y en caso de no serla, sabrás la última posición válida obtenida (si entra en un tunel, por ejemplo).
Salu2.
Hola,
Nuevamente, felicitaros por la calidad y claridad de los artículos publicados.
En mi caso estoy trabajando con un módem XT65 con el que estoy intentando realizar una aplicación que lee del GPS. He tomado como referencia el trakingexample.java que proporciona Siemens con el SMTK, que funciona correctamente en mi módem, y que usa la API javax.microedition.location.
Al principio, mi aplicación me devolvía siempre una posición no válida con un 0 en todos los campos (latitud, longitud…). Después, configuré en el .jad los permisos para el uso de esta API (curiosamente el .jad del trackingexample.java de Siemens no los tenía configurados y funcionaba) y comenzó a funcionar, pero devolviéndome siempre la misma posición (en el ejemplo, la posición se actualiza a cada ejecución de un timer).
Alguna idea acerca de donde puede estar el problema?
Gracias anticipadas por la ayuda.
Saludos.
Hola Dito,
yo he utilizado siempre el GPS a través de comandos AT, tal y como has visto en el ejemplo que he subido en estos artículos, no he utilizado la clase location, por lo que no te voy a poder ayudar mucho.
Lo que sí puedo hacer es ponerte un link a un archivo que me pasó un amigo hace ya un tiempo y que él si utilizaba Location. No lo he probado, aunque él me dijo que funcionaba. Fue un programita que hizo de pruebas. Te he subido el archivo al servidor para que le puedas dar un vistazo si quieres. Te paso el link:
http://www.blogElectronica.com/TEMP/gpsNoBlogElectronica.zip
Salu2
Efectivamente… funciona.
Si averiguo porqué lo que yo tenía no funcionaba, os lo contaré. Lo cierto es que el ejemplo de Siemens es un tanto enrevesado y usa elementos que estoy casi seguro que realmente no necesita y que únicamente serían útiles para una versión mejorada de la aplicación de tracking que proponen, pero no sé en que punto mi aplicación difería del ejemplo para que no funcionase y el ejemplo si…
En todo caso que sepas que, cuando funciona, esto es mucho más cómodo, limpio y elegante que los puñeteros comandos AT. Se me nota mucho que los odio? ;·)
Mil gracias.
Buenas!
Yo estoy desarrollando con el mtx 65 +g y la verdad es q me ha ido genial lo q has comentado.
Ahora estoy haciendo otras pruebas de conexión por socket a un servidor que me he echo en java.
El programa con la caja TC 65 (chip anterior) me va de perlas, pero con este me falla. Se queda bloqueado el atCommand y lo acabo haciendo saltar por timeout.
El tema es q el server recibe los datos pero cuando le respondo a la caja esta se queda en un estado catatónico jejeje.
Has desarrollado alguna cosa por el estilo? La configuración está ok, definiendo por el canal 0 del at^siss un servicio socket y el puerto y todo ok. De echo el servidor recibe los datos de la caja mtx 65g.
Muchas gracias!!
Jordi.
Hola Jordi,
me alegra que te haya sido de utilidad.
Cuando le envías los datos al servidor comentas que va bien, pues según leo los recibe. Entonces, según entiendo, envías datos al MTX65+G y éste no responde. ¿Llegas a recibir algún evento de que se has recibido datos? ¿cual es el tamaño del paquete de datos que le envías?
A ver si puedo conseguirte algún ejemplo de esto. Utilizando sockets con las clases de Java sí tengo, pero creando sockets mediante ATCommand he de buscarlo. Te digo algo en breve.
Salu2.
Hola!
Tal y como dices, en el servidor recibo los datos y veo el evento de SISW. En cambio nunca llego a ver el evento de SISR (una vez enviado los datos).
Envio un string “hola\r\n”.
Lo más raro de esto es que el mismo programa funciona en la caja tc65 y en esta mtx65+g no hay manera.
Si tienes algun ejemplo te lo agradecería, incluso el q has comentado usando clases de java también me iría genial ya que lo acabo de probar y da un error del tipo: Profile could not be activated.
Muchas gracias,
Jordi.
Hola, enorabuena por tu blog es genial. Tengo un problemita haber si alguien sabe resolverlo que toy ya desesperao. Toy haciendo un proyecto fin de carrera con el modem tc65 y la idea es que tengo una serie de sensores conectados a las gpio y necesito leer el valor de las gpio, es decir si tuviese un sensor de temperatura conectado, tengo que leer el valor de la temperatura. Sabes como podría hacerlo??? Muxas gracias y haber si me podeis ayudar.
Un saludo.
Fran.
Hola Fran,
tu pregunta no es clara. No indicas qué protocolo de comunicación utilizas, ni la velocidad de los datos que requieres, …
Si tu pregunta es cómo leer una simple entrada GPIO, bájate el ZIP de este post que indíca como cambiar una GPIO con un comando. Busca ese comando AT en el manual de comandos AT del módem y el de lectura lo encontrarás al lado.
Salu2.
Bien, exactamente lo que busco es que tengo un sensor de temperatura conectado a la GPIO 1 (por ejemplo) y en el modem tengo un pequeño programita que lo que hace es obtener el valor del sensor de temperatura para analizar q este dentro de un rango de valores. Con el comando AT SGIO lo que obtengo es el estado de la GPIO pero no el valor y no se como se puede hacer,
Un saludo
Tengo otro problema aver si alguien me da alguna idea. Bien, supongamos que tengo en el modem tc65 un archivo histórico con datos de entrada de una determinada GPIO. ¿de que forma puedo enviar ese archivo histórico a un móvil (por ejemplo)? es posible utilizando SMS??
Gracias y un saludo que me está ayudando un montón tu blog
Hola Fran,
este post es para comentar sobre el XT65, no sobre el TC65. Por favor si pones más comentarios sobre el tema ponlos en algún post en el que se hable del TC65.
Respecto a tus últimas preguntas, yo te puedo ayudar a averiguar cómo puedes leer una GPIO, pero eso ya lo sabes. Hablas “del sensor de temperatura” como si sólo hubiese un tipo de sensor de temperatura en el mundo, pero hay cientos de modelos de docenas de fabricantes y con muchos protocolos de comunicación. La respuesta a esa pregunta la debes averiguar tú leyendo el datasheet del sensor de temperatura, puesto que lo referente al módem y a lo que yo te podría ayudar ya lo sabes.
Y respecto a cómo puedes enviar un histórico te respones a ti mismo. La forma más fácil es vía SMS, evidentemente como ocurre con un SMS enviado por un móvil, tienes el tamaño limitado. En el programa java adjunto a este post puedes ver cómo se envía un SMS, utilizado para enviar una posición GPS.
Salu2.
Hola.
No se si este post es el más adecuado para plantear mi pregunta pero como se refiere al TX65+G creo que si puede encajar aunque no sea esactamenete en la dirección del post.
Voy al grano. Hasta ahora estabamos usando para comunicarnos un TC65 via GSM que comunicaba nuestro sistema con el servidor de tal forma que el modem descuelga automanticamente (ATS0=1) y lo envia todo al puerto serie (ASC0). Pero por diversos motivos hemos decidido cambiar al TX65+G (entre ellas para disponer de GPS integrado). Hemos desarrollado un programa para comunicarnos via GPRS pero mientras no está del todo depurado mantenemos la comunicación via GSM.
Así pues lo que necesitamos es que el TX65+G responda auntomaticamente a las llamadas lo que lo conseguimos con el comando ATS0=1 y que envie los datos al puerto serie 0 pero nos los envia al USB por defecto. Después de investigar varios días no hemos dado con la solución. Espero cualquiere indicación que nos pueda ser de ayuda.
Muchas gracias.
Hola Dani,
Utiliza el comando AT^SCFG?
Verás un parámetro STDOUT. Supongo que lo tendrás a USB. Cámbialo a ASC0 para que sea ésta la salida standard.
Ya me dirás qué tal.
Salu2.
Hola,
Muchas gracias por contestar tan rapido.
Esa era una de las cosas que habia pensado que era el problema y tengo que UserWare/Stdout ASC0. Y aún así no me funiona. Además intento conectar el terminal al un ordenado y comunicarme con el con el HyperTerminal de Windows y si lo hago por USB no hay problema sin embargo por el puerto serie no hay manera. Seguiré investigando a ver si consigo algo.
De nuevo muchas gracias.
Me das más pistas …
Mira si tienes el autobauding puesto y si lo tienes activado quítaselo con AT+IPR=115200. De esta manera lo configurarás a 115200 baudios. Comprueba también si esto no funciona el control de flujo.
Salu2.
Esa es otra, yo configuro a 9600 baudios AT+IPR=9600, sin embargo sigue funcionando a 115200 mientras que con el comando AT+IPR? me dice que la velocidad es 9600 (pero no es cierto) y al reiniciar AT+IPR? indica 115200 no guardando la orden que le he dado de 9600.
La verdad es que estoy bastante perdido y a lo de no poder conectame con el modulo por el puerto serie ASC0 no le encuentro sentido.
Un saludo.
Hola,
Al fin!!!! Después de días rompiendome la cabeza lo he logrado. Tenías razón el problema era el autobauding. Al encender el modulo me dejaba durante un instante enviarle un comando AT para acto seguido bloquearse el puerto serie. He aprobechado ese instante pare enviarle el comando IPR y establecer 9600 baudios y todo ha empezado a fundionar.
Muchas gracias por la idea.
bueno primero quiero felicitar al creador de los articulos por el trabajo y agradecerle por el tiempo que se toma en responder y ayudarnos.
bueno mi pregunta no es sobre la programacion o algo por el estilo, yo recien empiezo con esto de los modulos y compre un modulo sim340c para el efecto, bueno al grano lo que queria preguntar es cuanto sale el MTX65+G porque entre en la pagina web de matrix y no encuentro el precio.
desde ya muchas gracias y un saludo a todos
Alejandro Garrido
Alejandro,
llama por teléfono a Matrix o envíales un email, pues el precio varía mucho en función de las cantidades. No es lo mismo comprar 1, que 10, 100 o 1000. Escríbeles que te contestarán sin problemas rápidamente.
Salu2.
Hola, he estado probando un TC65 y haciéndole todo tipo de pruebas. Resulta que se ha empezado a apagar al cabo de unos minutos de uso, es decir, que arranca perfectamente, puedo llamar, enviar sms, etc… pero al cabo de unos minutos sin utilizarlo se apaga dando un mensaje que no entiendo:
00040031,00d47365635f636865636b2e632c6669726d776
17265207369676e617475726520636865636b206661696c6564
^EXIT
^SHUTDOWN
Me lo he cargado, no?
Hola Pablo,
efectivamente ese modem tiene por lo que enseñas mala pinta. Posiblemente en alguna de esas pruebas de todo tipo que dices que has hecho has estropeado el módulo por algún motivo que desconozco. El módulo TC65 tiene, entre otras, unas condiciones de protección con las que se apaga automáticamente en caso de situaciones peligrosas, como por ejemplo contra sobrevoltajes.
Salu2.
Hola,
Ese tipo de salidas suelen ser por excepciones de la máuina virtual Java.
Comprueba tu código y donde exactamente te aparece el EXIT.
Utilizas el garbage collector para liberar memoria?
Destruyes todos los hilos que no estás usando en ese momento?
defines vectores/arrays abiertos o cerrados?
Lo mejor es que te pongas en contacto con tu suministrador con toda esa información.
Salu2
Pua
Hola
Mi nombre es Patricio Gallardo (Chile) y recien estoy trabajando con este Modulo, el cual encuentro bastante interesante.
No he podido instalar el SMTK sobre Windows Vista. Sabes si efectivamente no funciona sobre esta versión de Windows, o existe alguna manera de lograrlo.
Desde ya, muchas gracias
Hola, tengo una duda con respecto del comando de calidad de señal (AT+CSQ) devuelve 2 valores uno el “rssi” y otro el “ber” que se supone indica la RXQUAL. Mi terminal para la primera llamada al comando devuelve un par de valores “27, 7″ y a partir de ese momento siempre devuelve “30, 0″. ¿Cuáles son las combinaciones que a vuestro entender indican una buena señal?
Muchas gracias por vuestra ayuda.
Salu2
hola,
Yo usaria el comando at^movi o at^smong para ver esos valores.
Salu2
Pua
at^moni o at^smoni
Hola Pua, me gusta tu sugerencia, además de la calidad de la señal, tiene en cuenta el registro en la red. Podría asumir que si la respuesta al comando AT^MONI contiene las frases “Limited Service” o “Searching”, seguro la comunicación fallará, si contiene “Cell Reselection” es probable que falle en breve, en cualquier otro caso todo va bien.
Muchas gracias.
Salu2.
Hola,
quizas at+cind o at^sind se acerquen mas a tus necesidades
Salu2
Pua
Hola buen dia a todos,
Quiero saber si es posible que el TC65 accese a nuestro servidor si tenemos IP’s dinamicas? Se que paginas como http://www.no.ip.com ofrecen servicios de DNS que enrutan a los clientes a una direccion cambiante. Si la solucion va por alli entonces una pregunta : ¿ Mediante comandos AT es posible ingresar una direccion ( socket adress) en forma de dominio???. De no ser asi entonces de que forma es posible evadir el costoso pago mensual por una IP fija?….Mandando un mensaje al TC65 con nuestra direccion IP y el TC65 la guardara??????
Hola, estoy haciendo mi propia placa de evaluación para dispositivos siemens y tengo un pequeño problema. Resulta que no tengo nada conectado a mi pin de ignición (IGT) pero los módulos arrancan de forma automática al alimentarlos.
Mi forma de soldar el molex de 80 pines no es muy buena y quizás he unido algúnos terminales pero el IGT está a 0 voltios seguro. ¿Se puede arrancar el módulo de forma automática al alimentar el módulo sin usar IGT? En realidad yo quería que el módulo arrancara de forma automática pero no me sirve si no sé por qué lo hace. ¿alguna idea?
Hola, he estado viendo en el manual del XT65 que existe una forma de ayudar al GPS cuando se arranca en frío, le llaman Assisted GPS, basicamente la tecnica consiste en guardar en la flash los datos de trabajo del GPS (almanac, data, ephemeris) para luego cargarlos en el arranque.
Estoy creando unas rutinas para hacer este proceso, pero me encuentro con un problema grave al intentar recuperar los datos de ephemeris con el comando AT^SGPSC=1, ya que el resultado supera el límite de 1024 bytes de la variable string de respuesta de ATCommand.send.
¿Alguna idea para evitar este problema? ¿Existe alguna forma de recuperar el ephemeris satélite a satélite en lugar de todos a la vez? ¿Alguna forma de ejecutar comandos con otro objeto que soporte + de 1024 bytes de respuesta?
Muchas gracias por vuestra ayuda.
Un saludo.
Gustavo
Srs alguien sabe si se puede encender en forma remota un terminal GSM?
Alejandro,
evidentemente no se puede sin un elemento externo. ¿Cómo piensas comunicarte con él si está desconectado?
Salu2.
hola
ciertos terminales pueden ser encendido con un golpe al DTR y/o al pinf /IGT de la alimentación.
Comprueba tu manual de hardware del producto
Salu2
Pua
Alejandro,
¿a qué te refieres con encendido remoto? ¿Por ejemplo estando el terminal en una ciudad y tú en otra?
Salu2
exacto blogElectronica, justamente a eso me referia, pero ahora tambien pienso que si este esta desconectado de un hlr no hay forma de “contactarlo” por lo cual no se le puede enviar un comando para encenderlo. no se que les parece a uds.
Buenas. Otra vez te doy la gracias por este blog… esta siendo de muchisima ayuda.
Estoy teniendo problemas al recibir la posicion GPS. El problema es el mismo que comenta Dani en uno de las preguntas de este hilo. Me explico:
Estoy usando el entrenador. El modem es nuevo y no se si tengo que configurar algo con respecto a los GPS y demas… soy muy nuevo yo tambien en esto, jajaja.
Inicio el GPS. Logicamente si le pido la posicion enseguida, me devuelve una hora y posicion erroneas. Espero un poco. Pido la posicion. La hora se ha actualizado, pero la posicion sigue siendo incorrecta. Espero varios minutos pero la posicion es incorrecta. El Status siempre sale 0 y la cobertura que me da el comando (AT+CSQ) es 12,7. No se si es suficiente para que llegue a conectar con el satelite porque tampoco puedo probar en otra ubicacion.
La pregunta es simplemente si existe algun tipo de configuracion necesaria que se me haya pasado, y si la cobertura es suficiente para que se realice la conexion.
Hola Javier,
el comando AT+CSQ no tiene nada que ver con la cobertura GPS, sino con la GSM. ¿Tienes la antena del GPS a cielo descubierto, en un lugar correcto? ¿Estás utilizando la antena adecuada para GSM y para GPS? De hecho, ¿qué módem estás utilizando, el MTX65+G?
Salu2.
Sí, utilizo el MTX65+G de Matrix. Le he conectado la antena que viene y la he sacado a la ventana. Supongo que sera la antena que toca… ¿hay alguna forma de averiguarlo? ¿y como averiguo la cobertura de GPS (si se puede)?
Como ya te he comentado… al rato de iniciar el GPS consigue darme una fecha y hora correctas (universalmente hablando)… pero la localizacion no varia incluso despues de 10 minutos.
Es posible que sea un error de cobertura o algo… por eso queria saber si habia alguna forma de averiguarla.
Acabo de encontrar el modelo de antena.
Es el MTX-Antenna-Adhesive-ESFERA… es una antena tanto GSM como GPS o sea que la antena no debe ser.
Hola Javier,
la antena MTX-Esfera es correcta, de hecho es una de las más utilizadas por flotas actualmente con este dispositivo MTX65+G.
El problema tuyo es cobertura. Desconozco tu ubicación, es decir, sacar por la ventana la antena no es la mejor de las situaciones, problemas de cobertura, de multi-path … dale un vistazo al comando AT^SGPSR en el manual, especialmente con el comando DataType=3.
Salu2
Hola, estoy trabajando con un XT65 y controlo el GPS mediante comandos AT en java. Resulta que he monitorizado las posiciones durante largos periodos de tiempo y en diferentes lugares. Cuando carece de cobertura GPS obtengo de forma esporádica (1 o 2 cada 6 horas) posiciones erróneas muy lejanas (100-150 metros) a la correcta, pese a tener un gpsStatus = 3, es decir, con 3D-FIX. Sé que si utilizara el GPS en modo transparente podría ver el HDOP (Horizontal Dilution of Dispersion) en las sentencia NMEA para ver el error concreto de cada medida, pero no hay ningún comando en JAVA para verlo. ¿Alguién tiene alguna idea para ver el error de cada medida e intentar detectar estas posiciones incorrectas?
Para Javier:
Si quieres revisar el correcto funcionamiento de tu GPS, te recomiendo que descargues la u-center application de UBLOX (una aplicación gratuita del fabricante del GPS del XT65). Pon el GPS en modo transparente (AT^SGPSS=1,1 creo) y luego conecta la u-blox application desde el ordenador. Podrás ver las sentencias NMEA, la posición GPS, la cobertura de los satélites… vamos, todo. Yo si no me va el GPS conecto esta aplicación y reviso el conector hasta que recibo la posición correcta.
Ok.
Muchas gracias a los dos. Acabare mi programita y asi podre probar el modem desde otras ubicaciones para asegurarme que sea el tema de cobertura… y de paso le echare un ojo a la aplicacion esa que me has comentado.
Vamos a seguir con la faena, jajaja.
Un saludo.
hola a todos,
Existe una forma de que el modem TC65 resuelva los dominios de internet automaticamente? Es decir es posible ingresar como direccion de nuestro servidor lo siguiente: http://www.servidor.com? Si no es asi entonces que me sugieren que haga para no tener que estar pagando tanto dinero a la compañia telefonica por su IP fija?
Buenas.
Por fin he conseguido terminar el programa y va perfecto… salvo por algunos detalles, y creo que la pregunta de Pablo y la mia vas a ser parecidas.
Por decirlo de alguna forma simple… ¿cual es el margen de error del MTX-65+G? ¿Hay alguna forma de averiguarlo y tenerlo en cuenta?
Me explico. En mi aplicación, se manda la posición a una pagina que introduce los valores de localización en una base de datos. Con el aparato y la antena en el mismo sitio y en reposo, me devuelve valores bastante dispares. El gpsstatus es 3. Ejemplos:
2008-06-12 12:10:37 39.4700029 N 0.3447819 W
2008-06-12 12:11:37 39.4703521 N 0.3448475 W
2008-06-12 12:12:37 39.4706605 N 0.3448984 W
2008-06-12 12:13:37 39.4705463 N 0.3448864 W
2008-06-12 12:14:37 39.4706409 N 0.3448827 W
Eso cuando lleva funcionando unos minutos… porque al principio es bastante mas caotico… cosa logica.
¿como podemos atinar todo lo posible desde la aplicacion Java?
Hola Javier,
dale un ojo a la clase Location:
http://mobilezoo.biz/jsr/179/javax/microedition/location/Location.html#getQualifiedCoordinates()
en especial a:
http://mobilezoo.biz/jsr/179/javax/microedition/location/QualifiedCoordinates.html
con el XT65 también puedes utilizar la JSR-179.
Salu2.
Voy a explicar mejor mi duda:
resulta que me hice una clase en Java en la que usaba la API JSR179, pero al pasar las horas se me colgaba el programa de forma inexplicable y sin ningún mensaje de error ni excepción, así que decidí utilizar los comandos AT del XT65 y funcionan muy bien además de conseguir la estabilidad deseada. El problema es que el comando AT de lectura de la posición sólo dice el gpsStatus (si es igual a 3 es válido con 3D-FIX) y he comprobado que al pasar las horas en zonas sin cobertura gps (bajo techo) , se equivoca llegando a dar posiciones gpsStatus=3 más de 150 metros alejadas de la posición real y con velocidades de casi 30Km/h, pese a estar el módulo totalmente parado.
¿Hay alguna forma de obtener la calidad de las posiciones sin la API 179?
tengo exacatamente el mismo problema, lo he resuelto poniendo 50 metros de tolerancia, pero no me gusta la idea ya mi aplicacion supone envia las coordenadas cada 7 segundos y no encuentro manera de ssaber cuando esta estaionado.
alguna ayuda disonible?
He intentado volver a utilizar la API JSR179 pero tengo el mismo error por el que me pasé a los comantos AT del XT65, al cabo de un tiempo variable la aplicación de apaga sin dar ningún error aparente en debug. Simplemente se apaga. ¿Alguien ha probado la API JSR179 en el XT65 durante largos periodos de tiempo?
Hola Pablo,
yo he visto alguna cosa rara con la API JSR179 en alguna ocasión, de todas formas nunca he visto que se apague sin sacar nada por consola, ningún mensaje de error. Mi consejo es que utilices los comandos AT, eso nunca he visto fallo alguno. Y si quieres tratar directamente con las tramas NMEA también puedes hacerlo.
Salu2.
Es que con los comandos AT obtengo errores de precisión muy grandes al cabo de horas de funcionamiento (posiciones con gpsStatus=3 que están a 150 m de la posición correcta y dándome velocidades de 30 km/h cuando el dispositivo está quieto). Por eso quería probar con la API. Una última pregunta, ¿has dicho que puedo tratar directamente con las tramas NMEA? ¿Cómo puedo usar las tramas NMEA desde java? ¿Pensaba que si ponía el GPS en modo transparente perdía el control de la aplicación java, no?
Vale, he quitado el locationlistener de mi provider y ya no se cuelga, pero ahora tengo otra duda mucho más fácil. ¿Cómo obtengo la hora del GPS? Lo más parecido que he encontrado es getTimeStamp en la clase Location pero me devuelve la hora interna del dispositivo(XT65). No me creo que no se pueda obtener la hora del dispositivo GPS, pero no encuentro ninguna función para ello pese a tener la documentación de la api delante. ¿Alguien sabe cómo?
Yo tengo el modelo xt65+G.
Consigo trabajar con él vía usb sin ningún problema, pero es imposible acceder vía puerto serie. ¿alguien sabe cómo poder trabajar con el dispositivo vía serie?
Hola Carlos,
¿a qué te refieres con acceder? ¿a enviar comandos AT o a entrar con el MES dentro del módem?
Si es lo primero debes revisar la velocidad y el control de flujo y si es lo segundo debes desactivar el autobauding que viene por defecto (AT+IPR=0) cambiando la velocidad a AT+IPR=115200.
Salu2.
Lo he conseguido solucionar.
El problema era del cable, estaba usando un serie cruzado, y por alguna razón no me dejaba acceder. Lo he cambiado por un nulo, y entonces ha ido bien. Lo del autobanding ya lo habia probado, he probado todo lo que he leido en el foro, antes de preguntar, por supuesto.
gracias por contestar tan rápido.
Tengo un nuevo problema. Pretendo escribir y leer cosas por el serie.
El código es el siguiente. Al ejecutarlo, por el serie aparece: DOS, pero no el TRES, es decir, se queda colgado en el
com = (CommConnection) Connector.open(“comm:com0;baudrate=115600″);
Alguien tiene alguna pista?
try {
System.out.println(“DOS “);
byte[] buffer = null;
CommConnection com = null;
OutputStream com_os = null;
InputStream com_is = null;
buffer = new byte[200];
buffer[0]=(byte)’a';
buffer[1]=(byte)’b';
buffer[2]=(byte)’c';
com = (CommConnection) Connector.open(“comm:com0;baudrate=115600″);
System.out.println(“TRES “);
com_os = com.openOutputStream();
com_is = com.openInputStream();
com_os.write(buffer);
com_os.flush();
System.out.println(“CUATRO “);
com_os.close();
com_is.close();
com.close();
System.out.println(“CINCO “);
}
catch(Exception e2){
System.out.println(“error: ” + e2.getMessage().toString());
}
Fantastico blog, tengo que decir
muchas gracias por la aplicacion para el MTX-65 me esta resultando muy util para mi aplicacion. por desgracia no todo me ha funcionado a la primera, la aplicacion parece funcionar bien pero por algun motivo que desconozco no puedo mandar SMS desde la terminal. El caso es que si que recibe SMS (le mande alguno y se guardaron en la SIM satisfactoriamente) por lo que creo que no puede ser la señal y el comando enviar SMS tambien me da OK.
cualquier consejo es bienvenido!
gracias
Hola Carlos,
Simplemente pon una pausa después de cambiar/abrir/cerrar el puerto serie o la velocidad de este.
Salu2
Pua
Ya consegui enviar SMS!
tanto desde el entrenador de SIEMENS como desde un emulador de hyperterminal. El problema es que no siempre funciona y aun no he conseguido que el programa me responda con las coordenadas GPS.
at^moni
Serving Cell I Dedicated channel
chann rs dBm MCC MNC LAC cell NCC BCC PWR RXLev C1 I chann TS timAdv PWR dBm Q ChMod 794 33 -77 234 33 0566 AEBB 5 7 30 -105 27 I No connection
AT+csq
+CSQ: 20,99
esos son mis valores, uso la antena: GSM 900/1800 MHz, Antenna – Magnetic (6 & 22 cm) – GSM – FME F – RG 174 de momento me va mejor con la de 6cm y no tengo ni idea de porque, alguien podria aconsejarme como conseguir una señal optima o una antena mejor?
atentamente
Armando
Buenos dias BlogElectronica.
Tratando de mejorar el tiempo de arranque del gps del mtx-65+g he decidido implementar en java el a-gps, pero me encuentro con un problema grave que ya menciono Gustavo en otro post, y es que no puedo leer desde java la información de almanac o de ephemerides, hay un comando AT para ello, el AT^sgpsr=1 y AT^SGPSR=2, el problema es que si lanzo el atc.send con estos comandos me devuelve la excepcion de com.siemens.icm.io.ATCommandFailedException: Error sending AT Command, AT command response too long.
Si trato de hacerlo recogiendo la respuesta del comando AT de forma no bloqueante con ATCommandResponseListener, me encuentro con un problema tambien, ya que la respuesta no puede ser mas larga de 1024 bytes. Como en principio no parece que se puedan tomar datos de los satelites de 1 en 1 no encuentro una forma de tomar esos datos para escribirlos en flash.
Alguna idea/sugerencia
Jose Escobar
Hola Jose,
ciertamente ocurre lo que dices, pues no es posible usando la clase ATCommand leer más de 1024 bytes, ya que ésta devolverá una excepción, como dice el manual en:
…
5.8.3 Long Responses
The AT Command API can handle responses of AT commands up to a length of 1024 bytes.
Some AT commands have responses longer than 1024 bytes, for these responses the Java
application will receive an Exception.
…
Al solicitar los datos de las ephemerides o el almanaque mediante la clase ATCommand, se supera dicha longitud y devuelve la excepción que mencionaba antes.
La verdad es que no he conseguido implementar el a-gps desde java y creo que no hay forma de hacerlo, al menos mediante la clase ATCommand.
Por otro lado se que puedes comunicarte directamente con el GPS del XT65 (un módulo GPS de uBlox Antaris v4) sin necesidad de la clase ATCommand. Para ello basta abrir un puerto serie de la forma:
commConn = (CommConnection)Connector.open( “comm:gps0;blocking=on;baudrate=38400″);
Con esto te comunicas directamente con el módulo GPS desde Java y puedes hacerlo con cualquiera de los protocolos que soporte el GPS.
No lo he probado, pero entiendo que de alguna manera será posible leer los datos de las ephemerides y del almanaque sin la restricción de tamaño de los 1024 bytes de datos utilizando esta vía de comunicación.
Salu2
Hola, estoy intentando usar el JSR 179 con un MTX65+G-V3, pero el jar que tengo de la instalacion no lleva este API y no se de donde habria que sacarlo.
¿Alguien sabe de donde lo puedo bajar?
Saludos, Ernesto.
Hola Ernesto,
ya lo hemos comentado por email, pero por si alguien está en la misma situación, aquí lo comento. El problema está en que hay que isntalar la versión adecuada para el SDK, concretamente el MTX65+G v3 lleva un XT65v2.0 en su interior, por lo que el SDK a utilizar debe ser ese.
Salu2.
Buenas, estoy por adquirir un Modulo Siemens XT65 y veo que aqui hay material de sobra, pero antes deseo saber donde puedo descargar las librerias de Siemens (jars) necesarios para la programacion? acaso alguien aqui podria facilitarmelas por favor ?
el distribuidor que me vende el modulo me comenta que no incluye nada mas que un manual. (claro que no estoy muy seguro pues se nota que no sabe mucho del producto jeje)
Saludos, excelente foro
Hola Antraxa,
hay un CD completo de unos 500MB que debe promocionarte el distribuidor. Es su obligación. Aunque es un CD gratuito no puede colgarse públicamente y no puedo enviártelo debido al tamaño del mismo. Insisto, pídeselo a tu distribuidor, tiene que tenerlo por malo que sea.
Salu2.
OK, gracias, ahora que me aseguras que deben de proporcionarmelo, lo exigire.
Saludos
FANTASTICO, te felicito por tu trabajo y desde colombia tengo la siguiente duda:
Aqui el modulo está enviando un SMS con la pocisión que capta el GPS, ¿SE PODRÁ ENVIAR ESTA INFORMACIÓN NO POR SMS SINO POR INTERNET UTILIZANDO EL GPRS A UNA DIRECCIÓN IP ESPECIFICA? SI SE PUEDE ¿PODRIAS EXPLICARNOS?
Gracias amigo.
hola,
Creo que si leed todo este Blog y sus artículos tu pregunta quedará sola resuelta.
Salu2
Pua
Buenas,
Me disculpan si pongo información repetida, pero no vi una respuesta al problema de:
JAVA ERROR: MIDlet initialization failed: java.lang.Error: ClassFormatError: 56
Esto se debe (o por lo menos en mi caso) a usar la versión incorrecta del JDK al compilar. Los JDK 5 y 6 son los que generan este error, yo use el JDK 1.4 y compila sin problema. Sugiero que tengan una copia de eclipse aparte con la configuracion para desarrollos de ME y otro para otros tipos de desarrollo. En el sistema pueden tener las versiones de JDK que quieran, solo recuerden configurar su eclipseME para que compile usando el JDK 1.4 (o 1.5 también debería funcionar). Esta opción se encuentra en el menú de eclipse: Window -> Preferences… -> Java -> Compiler -> Compiler compliance level.
Saludos
Hola German,
gracias por compartir tus resultados.
Salu2.
Hola de nuevo,
Tengo una pregunta respecto al uso de la memoria. Estoy usando la función:
long mem = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory();
para determinar cuanta memoria esta usando los objetos que estoy usando. Lo raro es que un simple clase que tiene, dos boolean y tres String me están usando mas o menos 30kb o 35kb lo cual me parece que es exagerado. Estoy haciendo algo mal al medir el uso de memoria?? Es normal que un objeto use esa cantidad de memoria? Por lo que he leído el uso de memoria debería ser apenas unos bytes, no kb. Gracias por su ayuda.
Hola German,
la propia JVM (máquina virtual de java) consume recursos. Es posible que el sólo hecho de generar unos nuevos objetos consuma memoria de la misma que luego libere, pero no tienes control sobre la memoria RAM que consume la JVM. Es recomendable siempre disponer de 100KB libres por seguridad.
Salu2.
Hola Blog, estoy teniendo un problema con el registro de los modems en la red. Estoy usando modems TC65i, en los cuales estoy desarrollando una aplicacion AVL. Lo que hago es a penas arranca mi aplicacion, enviar el comando (AT+COPS=0) para forzar a que el modem se registre, y tambien detectar la registracion de la sim mediante el URC del commando AT+CREG=1. Cuando este me responde con: “+CREG: 1″, me fijo si tiene ATTACH=1. Cuando se dan estas condiciones, creo un socket TCP con los comandos AT, configurando el Connection Profile y el Service Profile. Una vez que se crea correctamente la conexion y puedo abrir el socket satisfactoriamente, comienzo a escribir y leer paquetes del mismo. Si por algun motivo se cae la conexion, lo primero que hago es cerrar el socket con el comando(AT^SISC=”serviceProfileId”)y volver a buscar que la sim se registre. El problema es que “a veces” no logro que el modem se me vuelva a registrar y queda todo el tiempo buscando red y no se registra nunca. Es como que el modem se queda en un estado “tonto” y no logro que se registre nuevamente a la red. Lo que explique anteriormente esta dentro de un hilo, y se repite siempre. Lo que hago en estos casos es resetear la aplicacion, y el modem se registra perfectamente. Esto me lleva a pensar que puede hacer falta resetear la parte ce RF del modem, pero no se de que forma hacerlo. (Pense en pasarlo a modo AIRPLANE pero no se si es conveniente hacerlo).Necesito solucionar rapidamente este problema y entender que es lo que esta sucediendo. Espero que me puedan ayudar pronto. Desde ya muchas Gracias!! y Felicito a este Blog por que es excelente!.
hola,
comprueba en tu rutina que la tarjeta SIM está disponible antes de seguir esperando por cobertura
at^scks
Salu2
Pua
Gracias por tu respuesta Pua, eso tambien lo estoy haciendo al principio de mi rutina, ese comando me indica si la sim esta insertada cierto? La respuesta de ese comando me da: 0,1. No se cual puede ser mi problema. No hay que enviar algun otro comando??
Hola Ulises,
en ese hilo de comprobación de cobertura no llames a los comandos AT “a toda pastilla”. Pon una pausa de 1 segundo entre comando y comando.
Salu2.
Hola, que tal? Primero, como todos, quisiera felicitar al dueño de este blog, es de inmensa utilidad, por lo menos para mi que estoy empezando con el TC65T.
Quisiera saber si es posible que me indiquen donde puede estar el problema en el siguiente código:
protected void startApp() throws MIDletStateChangeException {
ATCommand commander = null;
System.out.println(“Iniciando…”);
try {
String r = null;
commander = new ATCommand(false);
r = commander.send(“AT^GPIO=1\r”);
Thread.currentThread().sleep(1000);
r = commander.send(“AT^SCPIN=1,8,1,0\r”);
Thread.currentThread().sleep(1000);
r = commander.send(“AT^SSIO=8,1\r”);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (ATCommandFailedException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyDestroyed();
}
Por lo que pude ver, hay una excepción al mandar el primer comando AT, una IllegalStateExcepcion.
Desde ya agradezco mucho la atención y me gustaría seguir participando
Atentamente, Nelson Secchi
Me gustaría agregar que mientras utilizaba el modo Debug, en la ventan del Debug Agent, apareció lo siguiente:
ALL_CLASSES_CMD: couldn’t find classfile object
Si alguien sabe algo respecto de esto, agradecería su ayuda.
También si saben alguna forma de asegurarme que la aplicación corra correctamente, debido a que esta es la primera prueba con el módem.
Desde ya, muchas gracias.
Atentamente, Nelson Secchi
Hola Nelson,
me alegra que te guste mi blog.
El comando AT^GPIO te lo has inventado tú
El comando que creo intentas enviar es: AT^SPIO=1
Salu2.
Guau, tan simple como tonto el error!
Muchas gracias por la corrección, realmente me disculpo por haber molestado con una consulta tan sencilla.
Gracias, sigan así con el blog, realmente es muy útil.
Espero poder compartir mi experiencia en poco tiempo.
Saludos
Atentamente, Nelson Secchi
He estado probando y aparentemente, tampoco se activa la salida cuando programa corre.
Me gustaría comentar que utilicé el Entrenador Siemens y las salidas están funcionando correctamente.
Aunque lo que me llama la atención es el hecho de que cada vez que ejecuto el programa (utilizo el IDE Eclipse), el programa se pasa al módem pero, una vez hecho esto, no puedo volver a tener comunicación con el mismo. Es por algo en particular? O siempre vá a suceder esto? Porque me veo obligado a tener que apagarlo y volver a prenderlo.
También veo que el debugger no es preciso, ya que a veces salta 2 o 3 líneas.
Y último, la salida standard (System.out) donde la puedo ver?
Tal vez son muchas preguntas, pero agradecería su ayuda.
Atentamente, Nelson Secchi
Es probable que me baneen por spam, pero ya descubrí el por qué de los problemas con el debugger. Tenía el archivo viejo cargado en el módem, por eso las nuevas líneas y correcciones no impactaron en el módem (supongo que no reemplaza en caso de ya existir el archivo).
Por lo que veo también, al ejecutar el archivo viejo, el módem quedaba ocupado y no se podía reestablecer la comunicación. Pero al borrar el archivo antiguo y reemplazarlo con la versión que funciona correctamente, esto ya no sucede.
Espero que esto ayude a alguien con el mismo problema.
Atentamente, Nelson Secchi
Se podrían conseguir más entradas digitales aparte de las 10 del gpio para un XT65?¿ Gracias!
Hola Pachis,
con el XT65 directamente no, tendrías que usar algún chip o microcontrolador externo para ello. Seguro que encuentras alguno que puedas controlar desde el XT65 con SPI o I2C.
Salu2
Hola,
sigo teneindo porblemas para controlar en JAVA el SPI con un XT65. Genero la conexion con el comando at^sspi, y de echo me entra en la callback del listener CONNChanged, pero soy incapaz de enviar datos y de cerrar la conexion por lo que me genera errores. Como puedo gestionarlo?? Como se cierra la conexion si no puedo enviar datos. He intentado enviar el caracter “#” que es el que cierra la conexion pero no consigo nada.
Espero que podeis ayudarme porque le llevo dando vueltas desde el articulo del manejo del LCD sobre SPI.
Un saludo
Hola gen,
a ver, escribir en el SPI es fácil. Entiendo que cuando te conectas al menos recibes el resultado CONNECT.
Si es así, para enviar algo usa algo como:
public void escribirSPI(String cadena)
{
OutputStream os;
try
{
//Asociamos el stream de salida al de la clase ATCommand
os = atc.getDataOutputStream();
//Escribimos los datos por SPI
os.write(cadena.getBytes());
}
//Gestión de las exepciones
catch (Exception e) {e.printStackTrace();}
}
Salu2.
P.D. con I2C o SPI no se envían datos con el método send de ATCommand.
Saudações Amigo,
Montei uma placa para o modem Xt65, com entradar dos portes GPIO, comunicação USB, Entradas ADC etc… Posso até postar a placa para todos.
Testando o modem com o programa deste tutorial, tudo funciona perfeitamente. Então resolvi partir minha programacion deste seu exemplo comentado que é muito bom.
Só que quando comecei a mudar ele neste ponto:
//Inicia el proceso de OTAP
void actualizaFirmware ()
{
//Configuramos el OTAP
sendAT(“AT^SJOTAP=\”blogElectronica\”,\”http://www.blogelectronica.com/TEMP/HelloWorld.jad\”, \”a:\”,,,\”gprs\”,\”airtelnet.es\”,\”vodafone\”,\”vodafone\”,\”080.058.000.033\”,”);
//Iniciamos el proceso de OTAP. Se abortará la aplicación tras este comando …
sendAT(“AT^SJOTAP”);
}
Neste ponto eu não entendo bem o que esta sendo feito, se eu comento ele não funciona, então fiquei sem saber o que fazer. Como posso fazer esta parte de forma mais simples e que o programa funcione.?
Muito Obrigado!
Hola a todos:
Tengo un pequeño problemilla con la recepción de SMS cuando tengo una @ en el texto del mensaje.
Una vez recibido el urc, utilizo at+cmgr= para leerlo y obtengo:
+CMGR: “REC UNREAD”,”+34612345678″,,”10/06/07,15:44:51+08″
abc
El problema es que debiera obtener:
+CMGR: “REC UNREAD”,”+34612345678″,,”10/06/07,15:44:51+08″
abc@def
Y cuando el resto del codigo extrae el texto del mensaja e intenta tratarlo se encuentra con que le faltan datos.
Si salgo de la aplicación de java y le introduzco directamente el at+cmgr= obtengo algo como:
+CMGR: “REC READ”,”+34612345678″,,”10/06/07,15:44:51+08″
abcdef
es decir, falta el caracter @.
¿existe algún motivo para que esto ocurra?¿hay alguna manera de evitarlo o estoy obligado a prescindir de @?
Un saludo y muchas gracias por su ayuda
He estado revisando el manual y he visto que con el juego de caracteres GSM la @ da problemas, pero aun no he sido capaz de dar con una solución.
Hola,
Tu mensaje esta en modo texto?
Introduce el caracter @ como caracter de escape 0
Salu2
Pua
Hola,
El set de caracteres GSM no coincide con la codificación ASCCI de esos mismos caracteres y especialmente en los caracteres acentúados , @, etc. Es decir los caracteres que introduces en la cadena de un SMS en modo texto se convierten por su codificación
Los SMS a teléfonos móviles están codificados a 7 bits. Puedes enviar los SMS en modo PDU o en su defecto introducir el codigo del caracter que quieres. Ejemplo:
Caracter Ö secuencia de escape \5C
Caracter @ secuencia de escape 0
Dispones de la tabla de codificación en todos los manuales de comandos AT de productos Cinterion
Salu2
Pua
Gracias por la ayuda.
El mensaje lo envio desde un movil a 7 bits. Lo de la secuencia de escape no lo hago bien o no funciona. Al final he encontrado una forma de cambiar el juego de caracteres de GSM (se agradece la pista) a UCS2 con at+cscs. Ahora tengo que decodificar el numero de telefono de origen, pero cuando leo el mensaje si que me aparece el 0040 de la @ y me apaño. De todas formas sigo intrigado porque probe con otro modem normal (no de estos programables) y el mensaje se lee perfectamente con el juego de caracteres GSM.
Felicidades por el Blog, un gran trabajo.
Tengo una pregunta que a lo mejor se escapa un poco del tema, pero es por si alguien sabe algo.
Ya tengo el xt-65 programado y en la mtx por las gpio conectados sensores de movimiento, alarmas….
Funciona todo correctamente, pero ahora es cuando me encuentro con una duda, el Mtx, sensores, etc en placas de prototipos no es que quede una gran presentación, y aquí va la pregunta:
¿Sabéis de alguna empresa que haga PCB como se los digas?¿Baratos?
¿Y que hagan cajas de plástico como la del MTX pero de otras dimensiones?
He utilizado el Proteus, Eagle, PCB wizard… y en ninguno encuentro ninguna librería para el conector del xt-65. ¿Me podéis pasar una para cualquier programa?.
Garcias y Salu2
Hola Jose,
A qué te refieres, ¿que tire pistas o que fabrique los PCBs?
Respecto a las cajas de plástico, mira en Bopla, a ver si te sirve alguna. Tienen mucha variedad y en España también las distribuye Matrix Electrónica. Piensa que un molde de plástico para hacer una caja a medida cuesta XX.XXX euros, y la primera X no es un “1″.
Salu2
Jeje, ok, entendido lo de las cajas, encontre una empresa, que las hace en china y las importa, solo que el precio del prototipado o primera unidad me parecia un poco elebado, unos 1500 € el diseño que les envie, y eso que era sencillo y pequeño.
Con lo que me has contado será mejor que haga lo que me recomiendas, coger una caja hecha.
Respecto a lo del PCB, me gustaría varias opciones, más que nada es para saber precios, aunque sean orientativos, para saber cuanto me puede costar que me fabriquen el pcb a partir del diseño que les dé o cuanto costaría que diseñaran con pcb con las especificaciones que les diga…
Porque como comente no encuentro ninguna libreria para el molex de 80 patillas que tiene e xt65 para ningún programa , y aunque sepamos las dimensiones es un poco coñazo crearlo, a no ser que no quede otra o sea muy caro que hagan el prototipo en Pcb.
No se porque me da que me va a tocar tirar pistas (autoroute claro, jjeje), crear el molex y hacer el pcb…
Muchas gracias por la pronta respuesta.
Salu2.
Buenas,
Estoy intentando usar un comando AT para borrar todos los SMS’s del modem MTX65, pero me da error cuando intento hacerlo:
AT+CMGD=1,4
AT+CMGD=1,4
ERROR
¿Hay otra forma de borrarlos todos? ¿Hay que borrarlos de uno en uno?
Gracias y Saludos.
Hola Ernesto,
hasta donde yo sé si, debes borrar uno a uno. Si te fijas en el manual de comandos AT el comando AT+CMGD sólo admite 1 parámetro (el ID del SMS) no dos.
Salu2!!!
Hola!
Estoy intentando usar el MTX-65+G-V3 para poder enviar SMSs a través de una aplicación de escritorio hecha en Java.
Se supone que debería bastar abrir un puerto com (ttyACM0 en mi caso, ya que deseo hacerlo en linux) y enviar ahí los comando AT.
Pues bien, me está siendo imposible. El modem no me responde y no se si se tratará de configuración del puerto (baudios,paridad,…….)
Alguna idea para realizar esto?
También se me ocurrió tratar de hacerlo desde el shell de unix, haciendo un simple echo contra el dispositivo, pero nada
Hola Jorge,
¿si conectas un Windows con un hypertérminal el módem te responde a los comandos AT?
Entiendo que estás usando el puerto USB, ¿es así?
¿Tienes una aplicación java corriendo dentro del módem? (Si tienes una aplicación java dentro del módem ejecutándose no vas a poder enviar comandos AT ya que el control del intérprete y puertos serie lo tendría dicha aplicación.
Salu2
Efectivamente, por USB.
El huperterminal en windows no responde, al igual que el minicom en linu, tmapoco lo hace
Cómo puedo saber si tengo una aplicaicón corriendo?
Buenas, otra vez, vengo con pequeños problemas.
El blog, como siempre, fantástico.
Estoy usando un TC65 con el que envio y leo de FTP sin problemas.
Ahora bien, necesito leer un dispositivo que manda un archivo txt plano cuando recibe un pico de tensión en el DTR. Tengo puesto el pin 8 del módulo Cinterión a dicho pin, ya que cuando abro el puerto, dá un pico de 5.60 en dicho pin y activa el dispositivo…..
Hasta ahí bien, pero luego intento leer los datos uniendo el pin de datos del dispositivo con el pin 2 del Cinterión (Rx), para lo que uso las rutinas citadas en los ejemplos de este blog. (com0.open……..).
Bien, pues si los datos los mando con el ordenada al Cinterión ( modo consola ), los lee sin problemas, pero si los leo del dispositivo, nada de nada. Se queda esperando y, si alguna vez lee algo, lo lee mal, como si la velocidad no fuera la adecuada….
Todos los parámetros de baudios, paridad, etccc… los tengo bien, ya que llevo años leyendo esos dispositivos con PDA’s, Portátiles y demás, y nunca he tenido problemas.
Para vuestra información, el Pc lee perfectamente el dispositivo que conecto al Cinterión…
¿ Qué puede ser ?… Me tiene loco……. Urgenteeeee!!!
Muchas gracias.
Hola Cesar,
http://www.blogelectronica.com/rs232-pinout-conexiones-dte-dce/
fíjate que el pin 2 del Cinterion, que es un DCE, aunque se llame RX es de transmisión y el TX es de recepción. ¿No será que donde conectas al pin2 debiera ser el 3?
Salu2
Ampliando lo anterior, ¿ se leeria mejor usando comandos AT? ^SIR???
Gracias…..
Hola de nuevo Cesar,
este comentario #99 tuyo no lo entiendo.
Salu2
Gracias, muchisimas gracias, por tu pronta respuesta.
El comentario 99 es que si no se pudiera hacer por las rutinas java de lectura de puerto, si habría manera de hacerlo por ATC.command.send(xxxxx).
Pero bueno, antes voy a probar lo que me dices y te cuento……
Gracias de nuevo…
Hola de nuevo, pues nada… que no hay manera.
Ni en el pin2, ni en el 3….
El HyperTerminal lee el dispositivo…. y el Cinterión sí lee del Hyperterminal… pero Cinterión no puede leer del dispositivo……..
Estoy…… derrotaooooo……
Por cierto, ayer estuve haciendo pruebas y ¿leia?… es decir, salía del bucle de lectura del puerto serie, pero al grabar los datos en el fichero, solo grababa blancos (ASCII 32), no lo entiendoooo…
Sim embargo, el mismo programa java lee perfectamente del hyperterminal y graba en fichero perfectamente….
Ayuda, por favor…
Gracias de nuevo…
¿ Podrías mandarme algún otro ejemplo de lectura ?
Gracias.
Buenas de nuevo, voy a intentar explicarme un poco mejor…
Tengo el programa Java en el Cinterión…. lo conecto a Hyperterminal y, desde ahí, lanzo la aplicación …. que me comunica mediante Sytem.out….. que el puerto está abierto…
En ese momento, quito el cable del Pc y lo conecto al dispositivo que, efectivamente, me muestra, mediante leds, que está transmitiendo datos….. cuando deja de transmitir… quito el cable y lo pongo en el hyperterminal y … cuando escribo at.. no sale … ya que cinterión aún está a 1200 baudios.. que es la velocidad a la que trabaja el dispositivo… es decir permanece en el bucle de lectura del programa ( 20 bytes…. el dispositivo suelta seguidos casi 1k ).
Si en ese momento pongo el Hyper a 1200 y escribo… el Cinterión sale del bucle y me crea bien el fichero…..
¿ Alguna idea ?, ¿ Será por el AutoBanding…? No creo, ya que Java pone el puerto a 1200….. en fín, no sé….
No sé si me he explicado bien…..
Buenas de nuevo.
Creo que voy concretando el problema….
Tengo un dispositivo que UNICAMENTE tiene 4 hilos.Tx, Vcc, Gnd y DTR.
¿ Como correspondería la conexión física ?.
CINTERION DISPOSITIVO
Tx TX
Gnd Gnd
Pin 8 DTR
Creo que esta debe ser la conexión…. entonces ….. funciona el pulso DTR y el dispositivo empieza a ‘sacar’ datos pero….. Cinterión no lee……… el programa Java se queda en el bucle, en las instrucción comis.Read(Buffer)….
¿ La tensión tiene algo que ver?
Gracias de antemano..
Un saludo.
Hola José, te agradezco de antemano tu ayuda, te comento el problema que tengo a ver si puedes “echarme un cable”.
Tengo un MTX65+G al que pretendo conectarle un display con interface serie (concretamente el “Serial Graphic LCD 128×64″ de Sparkfun – http://www.sparkfun.com/products/9351 -), la conexión la hago a través del cable “Main port – RS232 4-way Serial Cable”, conectando la pata nro 2 del female al RX del display (segun el manual debería de ser la pata 3, pero en la práctica la que es de salida es la 2).
La rutina JavaME para enviar los caracteres es la que adjunto al final del mensaje (la tomé “prestada” del ejemplo tuyo), lo que debería hacer es “limpiar el display”, y posteriormente “correr una demo del display”. El resultado real es la escritura de 4 caracteres “extraños” (ver: http://www.flickr.com/photos/g_riveras/6992596295/). He intentado “dar vuelta los bits -menor peso primero mayor al final-, transmitir con menor velocidad, adicionar caractes de retorno de carro, y no consigo hacerlo funcionar.
¿Puedes darme alguna “pista” para poder resolver el problema?
Muchas gracias.
La rutina en JavaME es:
protected void startApp() throws MIDletStateChangeException {
try
{
byte[] buffer0 = new byte[2];
CommConnection com0 = (CommConnection) Connector.open(“comm:com0;” +
“baudrate=115200;” +
“bitsperchar=8;” +
“stopbits=1;” +
“parity=none;” +
“blocking=on;” +
“autocts=off;” +
“autorts=off”);
OutputStream com_os0 = com0.openOutputStream();
// Limpia pantalla
buffer0[0] = 0x7C;
buffer0[1] = 0×00;
com_os0.write(buffer0);
// Ejecuta demo de funcionamiento
buffer0[0] = 0x7C;
buffer0[1] = 0×04;
com_os0.write(buffer0);
}
catch (Exception e)
{
e.printStackTrace();
}
destroyApp(true);
}
Hola Gustavo,
aunque ya lo solucionamos por otros medios, como no me gusta dejar temas abiertos, sólo comentar para quien lea esto que se solucionó usando un adaptador de niveles de TTL a RS232.
Salu2.
Bueno, ya lo solucioné, el problema era que DTR no se mantenía en el equipo ya que necesitaba 12V. Se puso a través de un transistor y voalá.
Otro problema que me encontré, es que el programa Java no salía del bucle de lectura en Flash ( fichero.txt ) donde se volcaban los datos recibidos.
Lo solucioné poniendo un pequeño retardo (250 msg ) cada vez que grababa en flash.
Espero sirva de ayuda a otros desorrallores.
Un saludo y gracias por este magnífico blog.
Para cualquier consulta, tenéis mi correo.
Xao.
Hola José, reiterarte mi agredicimiento por tu disposición a ayudarnos y felicitarte por tu blog que es de una calidad altísima. Enhorabuena.
Saludos. Gustavo.