Hace unos días puse que crearía un programita Java para el modem Siemens MTX65+G, ya sabéis el módem terminal que dispone de un módulo Siemens XT65 en su interior que a su vez incorpora un GPS.

Bueno, pues hoy os cuelgo una primera parte del programita que he hecho esta tarde-noche. En unos días os cuelgo la segunda parte. En esta primera entrega, los que no sabéis cómo programar nada de este módulo de Siemens, podéis utilizar este programita como una especie de plantilla para otras pequeñas aplicaciones que vosotros hagáis.

java.jpg

Realmente la aplicación que os cuelgo no hace casi nada, pero es la base para la aplicación final que recuerdo consistirá en que enviaremos un SMS con nuestro móvil al módem MTX65+G, éste lo recibirá y procesará, y si es un SMS válido cogerá la posición GPS y se la enviará también por SMS al móvil (típica aplicación de localización GPS). También haremos que podamos enviar un SMS desde el móvil y que el módem MTX65+G active o desactive una salida digital con la que activaremos / desactivaremos un relé, por ejemplo, para activar nuestro PC de forma remota ;-) .
 

Vale ¿pero qué puedo ver realmente esta primera entrega?

Lo mejor que puedes hacer es dar un vistazo al código fuente, lo he comentado todo para que sea muy clarito.

Algunas cositas del programa:

1.- He creado un timer en java para que veáis como se utilizan. El timer lo único que hace es sacar por el puerto serie del módem el valor de un contador cada segundo.

2.- Utilizo las clases ATCommand y ATList  (de Siemens) que son las que utilizaremos para enviar comandos AT al módem y procesar la respuesta (ATCommand) y la que utilizaremos (ATList) para procesar los mensajes URC (ya sabéis, un mensaje inesperado cuando se recibe una llamada entrante, un SMS, …)

3.- He creado el método setConfigInicial.
En este método configuramos el modem para nuestra aplicación. Enviamos el PIN si es necesario, activamos los mensajes URC para cuando entre un SMS, configuramos los SMS salientes como texto (no PDU) y activamos y configuramos un pin GPIO de salida.
 
 
¿Y cómo lo ejecuto?

Coge los archivos de la carpeta deployed ALARMA.jar y ALARMA.jad y cópialos dentro del módem.  Luego desde el hyperterminal ejecuta el comando AT:
AT^SJRA=”a:/ALARMA.jar”
 
 
¿Y qué veré?

Pues verás cómo en la ventana del hypertérminal algo como esto:

java-siemens-1.gif

es decir, aparece una linea de texto cada segundo.  Si puebas enviar un SMS al módem o haces una llamada, verás como aparecen los mensajes URC (en la figura anterior puedes ver como he hecho una llamada al MTX65+G mientras corría el programa).

Casi se me olvida, podéis bajaros el proyecto de aquí:  proyectoAlarma


Bueno, espero que aquellos que estáis un poco desorientados encontréis de interés esta primera entrega. Si tenéis dudas o comentarios ya me diréis ;-)

 

65 Respuestas a “Programando en Java con los modems Siemens. Primera entrega.”

  1. Dani dice:

    Hola,

    Muchísimas gracias, tu programa me ha servido de gran ayuda.

    Me gustaría plantearte una nueva duda. Aquí dices que para ejecutar el programa es necesario el comando at^sjra. Mi duda es ¿cómo hago para que el programa se ejecute nada mas arrancar el TC65T?

    Gracias

    Siento ser tan pesado.

    Salu2

  2. blogElectronica dice:

    Tienes que utilizar los comandos:

    AT^SCFG=”USERWARE”,”AUTOSTART”,”",”1″
    AT^SCFG=”USERWARE”,”AUTOSTART”,”APPNAME”"”,”programa.jar”
    AT^SCFG=”USERWARE”,”AUTOSTART”,”DELAY”,”",”50″

    (lo pongo de memoria, revísalo con el manual).

    Salu2.

  3. Dani dice:

    Hola,

    Muchas gracias por tu anterior respuesta. Si no es mucha molestia me he topado con otro problema. Como te había dicho mi intención es comunicarme con el TC65T via GPRS con un servidor, el TC65T se conectara con el controlador mediante el puerto serie 0. La aplicación se conecta perfectamente el problema surge a la hora de recibir datos. La aplicacion se despierta por un nuevo evento ^SISR leo los datos con un comando at^sisr=,1500 pero no consigo nada. Imprimo el resultado del comeando y no veo los datos. Se ve un ^SISR: , pero nada más. Espero que puedas ayudarme ya que no se que hacer.

    Gracias por todo.

  4. blogElectronica dice:

    Hola Dani,

    ¿estás leyendo los datos con el comando at^sisr por el mismo socket por el que estás recibiendo datos, es decir, por el socket que te indica el evento ^SISR?

    Es decir, si los recibes por el socket ID=1 tienes que leerlo con el comando AT^sisr=1,1500.

    Tal vez lo has visto pero si no lo has visto prueba de seguir el ejemplo (utilizando comandos AT) que se hace en el vídeo siguiente:

    http://www.matrix.es/videos/demoGPRS_Siemens.htm

    Salu2.

  5. Daniel dice:

    Gracias por contestar tan rapido pero no es ese el problema, lo compruebo y se hace sobre el ID correcto el problema esta en q lo que recibo solo se ve ^SISR: 1, pero no me aparece el mensaje.

    Espero conseguirlo pronto.

  6. Dani dice:

    Hola,

    Ya lo he conseguido, bueno en parte sigo teniendo pequeños errores pero funciona en parte.

    Muchas gracias por tu ayuda.

  7. pablo dice:

    que tal, he seguido tus entregas y me gustaria saber cuando publicas la tercera
    gracias ademas me gustaria saber donde puedo comprar el xt65 y por que utilizas el MTX65+G, en lugar de el primero que es mas barato

  8. blogElectronica dice:

    Hola Pablo,

    la publicaré cuando tenga un poquito de tiempo, estoy con muchas cosas a la vez. Supongo que en unos días la publicaré.

    Con respuecto a porqué utilizar el MTX65+G en lugar del XT65, la respuesta es que son dos cosas distintas. El MTX65+G es el XT65 con caja, es decir, listo para ser integrado en un vehículo o en cuelquier otro sitio. El XT65 es únicamente el módulo de Siemens, es decir, necesitas diseñar una placa PCB, una circuitería y meterlo en una caja para poder utilizarlo.

    Es lógico que si el MTX65+G tiene esa circuitería y una caja, es decir, es un producto acabado, sea superior en precio al XT65. Es un poco como decir que por qué no utilizas el motor de un coche en lugar del coche entero, si el motor sólo (sin la carrocería, ruedas, …) es más barato.

    Salu2

  9. Abel dice:

    Hola BlogElectronica…Bueno me meti en esta web en busqueda de un sistema de marketing mediante GPRS que pueda comandar a pantallas publicidades…No se si tendras algo de eso para ofrecerme…Por otro lado me intereso mucho este material y el tema, ya que soy tecnico electronico pero esta rama es una rama pendiente, que me gustaria meterme y poder descubrirla y hacer aplicaciones…Mas aun si lo haces ver facil y no complicado…

    QUeria saber si me podrias decir donde, como o que tengo que leer para poder aplicar el sistema a funcionar…Y que me saques ciertas dudas, como por ejemplo, es un servcio pago?? que tipo de conexiones tecnologicas - servicios hay desde poner un modulo en el auto hasta mandar el SMS desde el celular o de donde sea…

    Bueno muchas gracias, espero me llegue la respuesta a mi mail, saludos…

  10. pablo dice:

    gracias por tu ayuda,y te agradezco haber respondido tan pronto, creo que me decidire por el MTX65+G

  11. blogElectronica dice:

    Hola Abel,

    respecto a si deseas crear un sistema de publicidad con pantallas gestionadas por GPRS pues puedes utilizar un modem Siemens TC65T o MTX65. Para la pantalla seguramente te resulte interesante utilizar GOTs de Axiomtek si las pantallas no tienes que ser excesivamente grandes. Estos GOTs son panel-PC, es decir, una pantalla con PC incorporado. Disponen de conectores convencionales como USB y RS232, con lo que podrás conectar este dispositivo a un modem GPRS para actualizar los contenidos de forma remota.

    Salu2.

  12. Abel dice:

    Blogelectronica te agradezco que me hayas dado una mano, es la 1era vez q me meto en este tema y me resulta interesante lo que comentas y lo que me contestaste a mi.

    Queria saber que pasos me recomendas seguir, para poder llevar a cabo esto, para saber presupuestos, alguna empresa que de estos servicios?? algun lugar donde explique como llevar esto a cabo?que tan dificil es hacerlo solo? bueno esas cosas como para orientarme mas…

    Saludos, gracias!

  13. Leonardo dice:

    blogElectronica,

    Te pasaste… espectacular tu blog…. se agradece que haya gente que comparta sus conocimientos :D

    Nuevamente, gracias.

    Saludos,

    Leonardo

  14. blogElectronica dice:

    Hola Leonardo,

    me alegra que te guste mi blog.

    Para quien le interese acabo de publicar hoy Sábado la tercera y última entrega del proyecto.

    Salu2.

  15. Lorenzo dice:

    Hola blogElectronica, es curioso encontrar gente interesada en los módulos embebidos y que divulguen su KnowHow.
    No se hasta que punto conoces los módulo Java de siemens pero me gustaría saber que AMR (7 o 9) utilizan en su versión XT65 (w/GPS), es importante ya que la máquina virtual se mueve con dificultad en el ARM7 y me estoy decidiendo en el desarrollo de un sistema GPRS+GPS entre el módulo de Wavecom(OpenAt) y su buque estrella el Q2686 (ARM9) o el módulo de Siemens.

    Gracias

  16. blogElectronica dice:

    Hola Lorenzo,

    la verdad es que conozco bastante bien los módulos de Siemens. El XT65 monta un ARM7. Lo que dices que la JVM se mueve con dificultad … hombre …, yo creo que no, que funciona correctamente. Prueba de ello es la aplicación que he colgado en estos últimos posts. La puedes probar, verás que funciona perfectamente.

    No conozco en profundidad los módulos de Wavecom, pero el Q2686 perse a ser un ARM9, a nivel de comunicaciones GPRS es inferior en velocidad, pues es de clase 10, mientras que el XT65 de Siemens es GPRS clase 12.
    El XT65 lleva un chip GPS de Ublox en su interior integrado. Con el módulo de wavecom tienes que ponerselo a parte, con el consiguiente costo en tiempo de diseño y componentes.

    Salu2.

  17. Lorenzo dice:

    En efecto, el XT65 tiene un ARM7 a 54Mhz y el Q2686 un ARM9 a 104Mhz con gestion de velocidad para ahorro de consumo. EL primero corre código interpretado y el segundo código nativo compilado en “C”. EL Q2686 tiene un “plug-in” para poder conectar la parte de radio de un GPS (eRide) con el consecuente ahorro en el silicio (lo mismo con bluetooth y su stack).
    Creo que cada uno tiene su hueco en el mercado, de todas formas gracias por tu info. Por cierto, existe algún foro donde se hable del J2ME de los módulo de Siemes (a aparte del tuyo por supuesto).

    PD: Enhorabuena por tu página!!!

  18. blogElectronica dice:

    Hola Lorenzo,

    pues si, son dos conceptos distintos y posiblemente enfocados a aplicaciones distintas en muchos casos. No discuto que en ocasiones trabajar en código nativo no sea mejor (sobre todo en cuestión de rendimiento) pero creo que la tendencia es otra. Trabajar sobre java, vb.net, c# y lenguajes interpretados (o no codigo nativo) pienso que da mucha portabilidad para cambiar en un momento dado de plataforma, ya sea esta un módem, procesador, o lo que sea.

    Si quieres ver tendencias de módulos + gps Siemens de lo que vendrá dentro de poco, mira el final del tercer párrafo del siguiente link: http://www.3g.co.uk/3GForum/showthread.php?p=340112
    Eso sí, por ahora ese módulo no es programable. Por ahora.

    Respecto a otros foros lo desconozco, desde luego en español creo que no hay.

    Salu2.

  19. Dito dice:

    Una pregunta que seguramente será chorras pero que ahora no se como responder.

    Si configuras un módulo para que lance una aplicación en el arranque, supongo que, al igual que cuando la lanzas con el comando at^sjra, se “apropiará” del puerto serie y no permitirá la introducción de comandos AT. Como podrás pués reconfigurar el módem para evitar que la aplicación se lance de inicio?

    Tendrás que emplear multiplexación en el puerto serie o algo así para poder hacerlo? Como se haría si este fuese el caso?

    Gracias por anticipado y saludos.

  20. blogElectronica dice:

    Hola Dito,

    lo más fácil que puedes hacer es configurar, igual que estableces el parámetro autostart = 1 para arrancar automáticamente una aplicación, establece el parámetro delay= 250. Con eso tendrás 25 segudos desde que arrancas el equipo para cambiar los parámetros que quieras, antes de que arranque la aplicación.

    Salu2.

  21. Dito dice:

    Esa solución ya la había pensado, pero realmente me parece bastante cutre. Es decir, si yo tengo el módem integrado en otro sistema mayor y una aplicación que debe de correr en el módem tan pronto como sea posible nada más alimentar el sistema, como es mi caso, no desearé que esa aplicación tarde 25 segundos, ni 5 segundos en ejecutarse. Lo deseable sería que se pudiese configurar para que la aplicación se lanzase nada más alimentar el módem y que se dispusiese de un mecanismo alternativo para reconfigurar el dispositivo. ¿Debo de entender que no existe ese mecanismo, y que si configuro el módem para autoarranque con delay cero ya no podré nunca más reconfigurarlo ??????

    Saludos.

  22. blogElectronica dice:

    Dito,

    las cosas son como son y a mi no me parece “una solución cutre”. Te puedo decir que en la mayoría de las aplicaciones con este módem se deja un periodo de pocos segundos antes de lanzar el programa. Es así como funciona.

    Si tu quieres poner 0 segundos y luego quieres cambiar la configuración, deberás conectar el módem a una aplicación especial de Siemens por el pueto serie (no recuerdo el nombre, a ver si te lo puedo decir mañana) que permite poder obtener el control por el puerto serie de un modem que tenga una aplicación java con autostart=1 y con delay=0.

    Salu2.

  23. David dice:

    Hola:

    Acabo de comprar un modem como el que estais destripando (tambien en Matrix) y he leido el post de Abel, sobre cómo gestionar publicidad por GPRS en pantallas.

    Nosotros lo que hemos hecho ha sido conectar un Access Server de Bluegiga por cable serie a un panel LED, y le enviamos los mensajes que queremos que muestre, añadiendo un pequeño script al equipo. Se puede ver la solución aquí:

    LEDs

    También les podemos enviar a las pantallas mensajes mediante Bluetooth (jorl) con un teléfono móvil.

    Un saludo.

  24. Juan Francisco dice:

    Hola. Tengo un terminal TC65 y estoy haciendo mis primeras armas en este tema. Mi intención es hacer correr la aplicación de esta primera entrega en mi módulo. Es esta aplicación compatible con el TC65?

    Además, según estuve viendo, en mi módulo la salida por defecto para System.out es ASC1, la cual no se encuentra disponible en este Terminal! Leyendo el manual, encuentro que la salida para System.out es configurable, mediante el comando AT at^scfg. Obviamente, aún no sé trabajar con estos comandos. Alguna ayuda???

    Desde ya, muchas gracias, y felicitaciones por este excelente espacio que han creado!!!

    J.F.

  25. blogElectronica dice:

    Hola Juan,

    si, es compatible con el TC65, poque no sale nada de GPS en esta primera entrega.

    Respecto a cambiar la salida estandard, básicamente consiste en conectarte con el hyperterminal y enviar el comando AT^SCGF? Con el interrogante verás las respuestas del equipo y verás lo que tienes que poner. Tienes que poner la salida estandard como el ASC0. Pero mira el manual, ahí lo tienes todo. Es enviar el comando at^scfg=”Userware/Stdout”,”ASC0″.

    Salu2.

  26. Juan Francisco dice:

    Hola! Gracias por la rápida respuesta! Pues me he llevado una sorpresa: la version de firmware de mi terminal es la 1.041 :(

    Existe alguna manera de cambiar la ’stdout’ en esta versión? El comando que tu mencionas no es válido para la 1.041… Ni siquiera aparece en la lista que arroja el comando AT^SCGF?.
    Sino, como puedo hacer debug visual (reemplazar el metodo System.out.println() ) a través de ASC0 ?
    Realmente, esta sorpresa no ha sido grata…:(

    Agradezco sugerencias de posibles soluciones, excluyendo romper en mil pedazos mi 1.041 y adquirir alegremente un 2.0! Es la más atrayente, pero la menos económica… ~:)

    Desde ya, muchas gracias a blogElectronica, y también a todos los que han leido estos comentarios!

    Saludos!!!

    J.F.

  27. blogElectronica dice:

    Hola Juan Francisco,

    no hay nada que hacer, con la versión 1.04 no se puede cambiar la salida estandard. Tampoco puedes hacer un upgrade a la v2.0 porque cambia un poquito el HW. Lo siento.

    Sólo te queda abrir el modem y sacar fuera el puerto serie1, pero deberás añadir lógica externa MAX232 … otra opción es eliminar las pistas que van al TX y RX del puerto serie 0 y cambiarlos al 1, pero corres serio riesgo de cargarte el módem si no lo haces bien.

    Salu2.

  28. Felipe dice:

    Hola de nuevo,

    Una vez más felicitarte por esta gran labor que estás realizando y con la que nos ayudas en gran medida.

    Te escribo para pedirte ayuda una vez más:

    He probado esta primera aplicación java en mi MTX-65, y va de lujo, sin embargo me ocurre el siguiente problema:

    abro el proyecto con el eclipse, y no me da ningún problema, todo perfecto, sin embargo, creo los archivos ALARMA.jar y ALARMA.jad, y la aplicación no funciona:

    Me he roto la cabeza buscando que es lo que no funciona, y no tengo ni idea de que puede ser, pues tengo configurado el entorno eclipse tal y como muestra el manual de siemens, etc…

    Desde el hyperterminal le envio al modem el comando AT, y me responde OK, posteriormente le envio AT^SJRA=”a:/ALARMA.jar”, y me devuelve lo siguiente:

    OK
    JAVA ERROR: MIDlet initialization failed: java.lang.Error: ClassFormatError: 56

    Sabes a que puede ser debido esto??

    Muchas gracias por adelantado

  29. Feje dice:

    Hola blogElectronica,

    Ayer escribí aquí un mensaje pero debió de haber algún problema con mi ordenador que no aparece… Te lo dejo hoy de nuevo:

    Tengo un MTX-65, modem similar al que utilizas para las entregas java que has hecho, pero sin GPS, por lo que en principio, esta primera entrega debería funcionar en mi terminal.

    Y en efecto, si copio los archivos .jar y .jad de la carpeta deployed en mi terminar, y le envio el comando para ejecutar, este lo ejecuta correctamente, y me van apareciendo los diferentes mensajes en el hyperterminal, sin problema alguno. (después de cambiar la salida del puerto ASC1 al ASC0).

    Mi problema viene cuando intento “compilar” dicha aplicación para generar los ficheros .jar y .jad por mi cuenta: he revisado de nuevo toda la instalación del eclipse, y demás, y todo está correcto, según como pone en el manual de siemens, y que muestras en un post anterior.

    Eclipse “compila” correctamente, y me genera mis archivos .jar y .jad, pero cuando los introduzco en el terminal, no se ejecuta la aplicación, de da un error, que ahora mismo no te sabria decir exactamente lo que muestra, pero algo similar a lo siguiente:

    OK
    Java Error: MIDlet error ……. ClassError: 56

    he revisado todo, y la verdad es que no he cambiado nada de los archivos que has colgado en el post, excepto el pin en el fichero .jad, lo demás es idéntico. ¿Sabes a que puede ser debido?

    No se si te servirá de algo, pero mi fichero .jar ejecutable ocupa 4.30k frente a los 4.32 del tuyo, con lo cual, hay algo que falla.

    ¿Podrias echarme una mano?

    Saludos, y gracias

    PD: Siento no poder escribirte todo el mensaje del error, pero es que estoy fuera de casa, y en unos dias no volvere…
    PD: Como se pararía la aplicación una vez que está funcionando el contador?? se podría parar desde el hyperterminal?? Yo no lo he conseguido

  30. blogElectronica dice:

    Hola Feje,

    ¿Estás utilizando el SMKT adecuado? ¿No estarás usando el SDK del TC65 con el XT65 o viceversa? ¿Qué plugin has utilizado durante la instalación del entorno de desarrollo, la 1.2.3 o la 1.5? ¿Has utilizado exactamente las mismas versiones de TODO que indica en el Java User Guide del modelo de módem que estás utilizando?

    Salu2

  31. Feje dice:

    Hola de nuevo,

    Pues parece que al final si que te llegó el primer mensaje ;) (Me llamo Felipe, pero me llaman Feje)

    Te cuento como lo hice:

    primero instalé la maquina java, la que me proporcionó Matrix Electr.

    Luego instalé el eclipse 3.1.2., bueno, copie la carpeta en el escritorio.

    Luego instalé el plugin 1.2.3 según pone el manual

    Y por último, instalé el IDE de Siemens para el TC65, el que me proporcionaron también en Matrix Electrónica, siguiendo todos los pasos, poniendo la carpeta donde estaba el eclipse.

    Reinicié el ordenador, y copie en el workspace que eclipse pone por defecto, la aplicación java que nos has proporcionado en esta primera entrega, excepto el contenido de la carpeta “deployed”.

    Abrí el eclipse, abrí el proyecto, abrí el fichero .jad y cambié el pin de la tarjeta sim, y di a “Build All”.

    Por último, en la ventana “Package Explorer”, click con el botón derecho en “ALARMA”, y en la opción “J2ME”, click en “Create Package”, y listo, en la carpeta deployed aparecen los dos ficheros: “ALARMA.jar” y “ALARMA.jad”.

    Los copio en el módulo, y… sorpresa no funciona. Exactamente, como te puse en el primer mensaje, aparece por pantalla en el hyperterminal:

    OK
    JAVA ERROR: MIDlet initialization failed: java.lang.Error: ClassFormatError: 56

    ¿Alguna idea? ¿Estoy haciendo algo mal?

    Y MUCHISIMAS GRACIAS DE ANTEMANO

    Un saludo

  32. blogElectronica dice:

    Hola Feje,

    aparentemente lo estás haciendo bien, pues lo detallas todo muy bien. ¿qué versión de firmware tienes de TC65 (comando ATI)? Si quieres envíame a jose @ blogelectronica.com los compilados y los pruebo en el mío. ¿Puedes probar con la aplicación ejemplo del Hello world que aparece en el Java User Guide a ver si la ejecuta correctamente?

    Salu2.

  33. Gustavo dice:

    Hola, ante todo enhorabuena por el artículo y tus comentarios blogElectronica.

    Recientemente he adquirido un MTX65+G (SIEMENS XT65 REVISION 01.001), he instalado todas las herramientas tal como indica el manual de Siemens, he generado los paquetes para el ejemplo “HelloWorld” y para tu programa “ALARMA”, en ambos casos el sistema descarga los programas en el terminal y los ejecuta, pero no muestra salida en pantalla (ni en la consola de Eclipse ni en el HyperTerminal). ¿Puedes darme por favor alguna pista de lo que puede estar ocurriendo?

    Muchas gracias.

    Un saludo.

  34. Gustavo dice:

    Hola nuevamente, ya tengo resuelto una parte el problema que acabo de plantear, con el comando at^scfg=”Userware/Stdout”,”USB” se redirige la salida al puerto USB. Ahora desde el HyperTerminal puedo ver el resultado, la pregunta es ¿Cómo puedo verlo desde Eclipse? ¿En la consola? ¿En modo debug?

    Cuando ejecuto el debug el sistema me responde en la consola:

    ====================
    Starting XT75 emulator for debugging application. Please wait …
    ====================

    COM port used for “emulator session”: COM15

    Configure USB port..
    >>> Starting Download of Jar and Jad file…

  35. blogElectronica dice:

    Hola Gustavo,

    efectivamente es necesario cambiar la salida estandard a ASC0. Respecto a cómo ver la salida estandard en el eclipse, yo no fui capaz en su día de que se muestre dentro del IDE. Siempre la obtengo en el hyperterminal (o el procom en mi caso).

    Salu2.

  36. Yo dice:

    Hola!
    Tengo un problema con un TC65 que salta un SHUTDOWN cada 20 seg , sin ni siquiera ejecutar el programa java(solamente conectando el hiperterminal). Me comentaron que la solucion es reinstalar el firmware, la versión que tengo del modulo es la 2.0 . Cuales son los pasos a seguir para reinstalar el firmware?, podria llegar a tener algún problema por este motivo?.
    Tengo otros modulos TC65 que funcionan perfectametne ocn el el programa embebido de java.

  37. blogElectronica dice:

    Hola,

    puedes probar reinstalar el firmware a la nueva versión 2.8 ó 3.0. Tu distribuidor te puede proporcionar las herramientas para ello. No estoy seguro, pero no se si se puede reinstalar la versión 2.0 sobre la misma 2.0

    Salu2.

  38. Pua dice:

    hola,

    El hardware de la versión 2.0 soporta tambien la 2.8 y la 3.0

    Pero si instalas las 2.8 ó la 3.0 no podrás volver a la 2.0

    Particularmente me gusta la 3,0 pues incorpora wacth-dog, classes desde Java para los GPIO’s y Jammig(ESto no lo uso)

    Habla con tu suministrador para obtner la versión, documentación y SDK de esa versión

    Saludos

  39. Pua dice:

    Por cierto te dice algo mas aparte de Shutdown?

    que te pone antes y después en el puerto serie?

    No habrás configurado el ^SCFG=”Autoexect” para que te apage el módulo cada cierto tiempo?

    Saludos

  40. Feje dice:

    Hola de nuevo,

    una vez más, ¡¡necesito ayuda!!.

    En primer lugar, agradecer una vez más estas entregas de java, que nos resultan muy útiles para los que estamos empezando en este campo de la electrónica.

    En segundo lugar, mi cuestión: imaginemos que tengo ejecutando en mi TC65 esta aplicación java, pero que necesito enviarle ocasionalmente información a la aplicación. Vease:
    - Modifico la aplicación para que cuando yo envíe por el puerto serie la secuencia “SMS” la aplicación envie un sms a un número predeterminado.
    - Si envio la secuencia “CALL”, el modem haga una llamada al número predeterminado.
    - … etc…

    En principio, todo lo que sea sacar cosas por el puerto serie es muy sencillo, simplemente utilizando:
    System.out.println(”texto”); o bien
    System.out.print(”texto”);

    Pero, ¿Y para leer datos del puerto serie?
    He intentado probar con System.in.read() pero el Eclipse me da error: “System.in cannot be resolved”
    (NOTA: he hecho el import java.io.*;)

    ¿Alguna idea de como leer datos por el puerto serie?

    Gracias de antemano

    Un saludo

  41. blogElectronica dice:

    Hola Feje,
    pues por ejemplo utiliza algo como:

    CommConnection com = null;
    buffer = new byte[200];

    com = (CommConnection) Connector.open(”comm:com0;baudrate=115200″);

    com_os = com.openOutputStream();
    com_is = com.openInputStream();

    //Si hay datos …
    if (com_is.available() > 0)
    {
    //Leemos los datos del puerto serie …
    len = com_is.read(buffer);
    }

    Salu2.

  42. Feje dice:

    Hola de nuevo,

    He colocado en la aplicación, justo despues de las declaraciones de las variables lo siguiente:

    byte[] buffer = null;

    CommConnection com = null;
    OutputStream com_os = null;
    InputStream com_is = null;

    buffer = new byte[200];

    com = (CommConnection) Connector.open(”comm:com0;baudrate=2400″);

    com_os = com.openOutputStream();
    com_is = com.openInputStream();

    Y dentro del timer:

    //Si hay datos …
    if (com_is.available() > 0)
    {
    //Leemos los datos del puerto serie …
    com_is.read(buffer);
    }
    System.out.println(buffer);

    Y Eclipse me da dos errores, concretamente, me pone lo siguiente:

    Syntax error on token “;”, { expected after this token (line 32)
    Syntax error, inset } to complete Block (line 40)

    Pues bien, la línea 32 es la línea que contiene “InputStream com_is = null;”, y la línea 40 es “com_is = com.openInputStream();”.

    Y llegados a este punto, no se que hacer…

    ¿Alguna idea?

    Saludos

    PD: Te dejo un enlace que he encontrado por internet, no se si te servirá de algo…
    http://forum.java.sun.com/thread.jspa?threadID=5176145&messageID=9680887

  43. blogElectronica dice:

    Feje,

    es muy complicado ver por qué te falla, puesto que el programa no está completo. Por las descripción del error ¿No te faltará cerrar alguna llave {} o faltará algún ; en algún punto del programa? A veces los compiladores fallan a la hora de decirte en qué línea está el fallo …

    Salu2

  44. Feje dice:

    Hola de nuevo,

    Ya he resuelto el problema. Resulta que las líneas:

    com = (CommConnection) Connector.open(”comm:com0;baudrate=2400″);

    com_os = com.openOutputStream();
    com_is = com.openInputStream();

    hay que colocarlas dentro de un “try”…

    Una cosa más, hay algún método para convertir lo almacenado en la variable buffer (que es de tipo byte[]) a tipo String??

    Un saludo

    PD: Ya se que es un blog personal, pero ya que todos compartimos aquí nuestros conocimientos, y yo hasta ahora no he aportado nada, me gustaría aportar mi granito de arena. ¿Que te parece si te paso esta “versión” de la primera entrega de Java, en la que se recogen datos por el puerto serie, y pones un enlace para que se pueda descargar? Creo que sería interesante que alguien más pueda acceder a ella, ya que es un poco engorroso lo de leer datos por el puerto serie, y si con ello le puedo ahorrar a alguien que esté empezando, como yo, unos cuantos minutos de buscar información…

  45. blogElectronica dice:

    Hola Feje,
    mándamelo a jose @ blogelectronica.com y lo cuelgo.

    Salu2.

  46. Isaac dice:

    Como cargo programas JAVA si mi terminal no tiene puerto USB?

  47. blogElectronica dice:

    Hola Isaac,

    por el puerto serie. Si haces click con el botón derecho del ratón en el icono azul del MES en propiedades, puedes especificar el puerto serie por donde subir los programas.

    Salu2.

  48. blogElectronica dice:

    Hola Feje,

    cuelgo aquí tu programa:

    http://www.blogelectronica.com/TEMP/PuertoSerieTC65.zip

    y tus comentarios del email que me escribiste, para que la gente lo entieda los cambios.

    Pues bien, aquí te paso el programa que dejaste en la primera entrega de Java un tanto retocado:

    - El timer, en vez de ser de 1 segundo, es de 5 segundos, y el contador lo incrementamos en 5 unidades.
    - Durante los 5 segundos entre mensajes por pantalla del timer, tenemos tiempo suficiente para introducir texto.
    - Si cuando se activa el timer hay datos disponibles, hacemos eco con ellos, es decir, los volvemos a mostrar por pantalla.
    - Si los datos recibidos son “exit”, se termina la aplicación y se apaga el módulo (at^smso).
    - Si el módulo recibe un sms, responde con otro sms con texto predeterminado a un número predeterminado.
    - Si el módulo recibe una llamada, responde con un sms con otro texto predeterminado al mismo número predeterminado.
    (los mensajes y el número se guardan en el fichero ALARMA.jad bajo los identificadores mensaje1, mensaje2 y num respectivamente. Igual que el pin)
    IMPORTANTE: Para la comunicación, el baudrate es de 2400. (cada uno que lo modifique a lo que quiera, o añadir unas líneas de código para obtener el baudrate y luego asignarlo…)

    Por lo demás, creo que no hay nada nuevo.

    gracias Feje por tu aportación,

    Salu2.

  49. berni dice:

    Buenas, el caso es que los tutoriales están de miedo. Muchas gracias, blogelectronica.

    Lo que pasa es que estaba siguiéndolos, y me topé con el error de Feje/Felipe: JAVA ERROR: MIDlet initialization failed: java.lang.Error: ClassFormatError: 56

    Él parece que lo solventó pero no sé cómo, ¿podríais explicarlo?

    Muchas thankyous

  50. Feje dice:

    Hola berni,

    El error que me apareció, y que comentas, me apareció después de instalar en mi portatil (tal como viene en el manual) todo el software necesario para programar en java el TC65.

    La verdad es que no tenía ni idea del porqué del error, y sigo sin tenerla, pero quizás pueda ayudarte:

    El error es debido a una mala compilación del programa que quieres introducir en el modem, o alguna cosa similar, pues el archivo .jar generado de esta forma ocupa un poco menos que el generado correctamente.

    Después de desinstalar y reinstalar varias veces el software, se me ocurrió probar con el ordenador de sobremesa que tengo en casa, y ¡¡¡funcionó!!!

    Todavía no se porqué sigue sin funcionarme en el portatil, aunque supongo que será por una máquina virtual de java que tuve instalada hace bastante tiempo…

    Como ves, no puedo ayudarte mucho, solo te cuento lo que me ocurrió a mi.

    Saludos

  51. berni dice:

    Gracias feje, yo también he estado probando y probando, y probando hasta que conseguí hacerlo funcionar. creo que tenía que ver con el .jar y el .jad concrétamente que no había añadido al .jad el midlet con la clase correspondiente.
    Eso sí, una vez que ves cómo hacerlo es sencillote. Si “blogelectrónica” me lo permite, voy a referenciar un blog donde también esplican paso por paso cómo instalar eclipse (lo único que en vez de la wtk de siemens instalan la de sun, pero vamos, sabiendo que nosotros tenemos que instalar la de siemens, todo sería igual) y hacer un primer proyecto. El blog en cuestión es: http://dani.profesionalvirtual.es/?p=3

    Espero que os sirva de ayuda.

    Un saludo

  52. Kriyeng dice:

    Buenas,

    Estoy intentando generar mi primera aplicación con el TC65. Tengo el mismo modem que muestras tu en el video de como conectarlo al pc para empezar a trabajar con eclipse, pero sin el USB.

    Tengo una duda. En tu ejemplo, cuando ejecutas un System.out.println, recibes por el hiperterminal los datos. ¿Estos datos te vienen por el puerto serie o por el USB?

    En mi caso necesito crear un servicio socket mediante java i deseo que los datos que van llegando me salgan por el puerto serie. ¿Es eso posible?

    Ahora simplemente he programado esta prueba:

    public class Prueba{

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(”Prueba Salida Datos”);
    }

    }

    La ejecuto desde el hyperterminal con “at^sjra=”a:/mijar.jar” y simplemente me contesta OK, pero no me muestra “Prueba Salida Datos”
    ¿Es un problema de que estoy haciendo algo mal o es que los datos estan saliendo por otro puerto?

    Muchas gracias por adelantado!
    Saludos,

  53. blogElectronica dice:

    Hola Kriyeng,

    ejecuta un AT^SCFG?

    verás al final el parámetro:
    ^SCFG: “Userware/Stdout”,”ASC1″

    Stdout es la salida estandard. Especifica ASC0, ASC1 ó USB en función de por dónde quieres que te salgan los datos que envíes por printf.

    Salu2.

  54. Francesc dice:

    Hola saludos y felicidades por tus articulos.

    Tengo un problema, no consigo que mi aplicacion.jar se autoejecute al arrancar el modem.

    Le mando los comandos:
    AT^SCFG=”Userware/Autostart”,”1″
    AT^SCFG=”Userware/Autostart/AppName”,”aplicacion.jar”
    AT^SCFG=”Userware/Autostart/Delay”,”50″

    Siempre me da ERROR.
    No tendra que ver que ejecute el programa Switch Autostart off?
    Para que sirve este programa.

    Saludos y gracias.

  55. blogElectronica dice:

    Hola Francesc,

    creo que la línea correcta es:
    AT^SCFG=”Userware/Autostart/AppName”,”A:/aplicacion.jar”

    ( te falta el A:/ )

    El programa Switch Autostart off te sirve para quitar el autorstar=1, es decir, configura el módem con autostart=0. Lo encontrarías muy útil si en el Delay en vez de poner 50 hubieses puesto 0, es decir, que la aplicación java arranque inmediatamente después de alimentar el módem. Pues sin desactivar el autostart (con la aplicación java running vamos) no puedes subir nuevos archivos jad y jar al módem.

    Salu2.

  56. Francesc dice:

    Hola saludos de nuevo.
    No consigo configurar el autostart ni incluso usando la orden:

    AT^SCFG=”Userware/Autostart/AppName”,”A:/aplicacion.jar”

    En todas me da Error.

    Que puedo estar haciendo mal???

    Gracias.

  57. blogElectronica dice:

    Francesc,

    disculpame, hoy estoy muy liado y he ido muy deprisa y no me he fijado que había dos fallos.

    AT^SCFG=”Userware/Autostart/AppName”,”",”A:/aplicacion.jar”

    faltaban las comillas de enmedio (el password)

    Salu2.

  58. Francesc dice:

    Gracias por tu rapida respuesta.

    Agradecido ya funciona en autostart.

    Un saludo.

  59. pablois dice:

    hola:

    intento que mi apicacion envie un mensaje cuando se active un gpio, pero quiero escribir el numero y el mensaje a enviaren el .jad para que sea configurable.¿ alguna ayuda que me puedan brindar sobre como leer los parametros del .jad?

  60. blogElectronica dice:

    Hola Pablo,

    puedes utilizar algo como esto:

    //Método para leer una variable del fichero JAD
    public String leerVariableJad(String variable)
    {
    String valor=”";
    try
    {
    valor=getAppProperty(variable);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    valor=null;
    }
    return valor;
    }

    Salu2.

  61. LuisFer dice:

    Hola,

    He instalado todo el SW necesario. He desarrolado con eclipse una aplicación muy sencilla. Cuando intento copiar los .jad y .jar en el modem TC65 no me deja. Los intento copiar en Module (el dispositivo que se crea en MiPC al instalar el SMTK). Cuando pincho con el botón derecho del ratón en propiedades me dicen que las propiedades del archivo no están disponibles.
    Sabéis que puede estar mal? Estoy intentando conectar con el puerto serie para ejecutar at^srja=a:\Ejemplo.jar pero no hace nada

    Muchas gracias, un saludo

  62. blogElectronica dice:

    Hola Luis Fer,

    ¿Has probado conectar con el USB? ¿Si conectas con hiperterminal por puerto serie, te responde a los comandos AT? ¿Qué velocidad de puerto estás utilizando, no lo tendrás en autobauding (AT+IPR=0)? si es así cámbialo a AT+IPR=115200.

    Y por otro lado es at^srja=a:/Ejemplo.jar , con / no \

    Salu2.

  63. LuisFer dice:

    Muchas gracias por su ayuda,

    Sí me contesta a los comandos AT conectándome por puerto serie con el hyperterminal. Perno no consigo copiar los archivos .jar y .jad.
    Lo he intentado hacer como dice el paso 5 del manual, context menu de Ejemplo.java y seleccionando Emulated J2ME Midlet del Item run as. (conexión a través del puerto serie).
    El puerto USB no me lo detecta pese haber instalado los drivers….
    ¿De la manera anterior puedo copiar y ejecutar sin usar el puerto USB?
    El error que me dice No Ras device installed, y me dice la consola del eclipse que arranque el SMTK de nuevo y repare la instalación…

  64. LuisFer dice:

    Ya he conseguido copiar los .jad y .jar
    Parece que en el PC del trabajo no se instalaba bien el MES-SMTK por cuestiones de seguridad, no sé. En mi portátil no he tenido ningún problema.
    Cuando ejecuto at^srja=a:/Ejemplo.jar con el hyperterminal conectado al puerto COM a que está conectado al modem GPRS, me dice OK. Pero no imprime el hola mundo.
    Sabes a qué puede ser debido?

    Muchas gracias de nuevo. Y enhorabuena por el blog. Estoy consultando las entregas y me vienen muy bien.

    Un saludo

  65. LuisFer dice:

    Buenos días.

    Ya sé porqué no me estaba escribiendo en el hyperterminal, hay que redirigir la salida estándar al puerto al que tienes conectado el dispositivo GPRS:
    at^scfg=”Userware/Stdout”,”ASC0″
    (En mi caso el primer puerto serie)

    Muchas gracias.

    Espero que os sirva de ayuda. Enhorabuena otra vez por el blog. Esta página ya está en mis favoritas

Deja una Respuesta