Conectando Arduino con un USB Tri-band GPRS Modem / Cell Phone Radio (GSM 900/1800/1900Mhz)


Este articulo trata sobre el uso estándar GSM comandos AT,mediante  un programa que se ejecuta en Arduino puede realizar y recibir llamadas, enviar y recibir SMS,  disparar fotos o  acceder a Internet mientras que se optimo tanto  el nivel de la batería la intensidad de la señal y el estado de conexión. Para muchas de estas tareas cualquier teléfono antiguo funciona bastante bien, sin embargo, hay veces  se necesita una pieza especializada de hardware especial :en este caso  la placa Arduino Shield usando USB Host.

Tri-banda USB Modem GPRS de DealExtreme es un teléfono celular GSM ordinario menos teclado, la pantalla, la batería y el micrófono incorporado / altavoz. Lo que queda hace caro (~ $ 25), ligero (25 gramos) y compacto (véase el cuadro del título) GSM / GPRS módulo para su uso en proyectos de bricolaje. Es compatible con un subconjunto de comandos estándar GSM, así como algunos otros propietarios. El módem está construido alrededor de BenQ M23 GSM / GPRS módulo inalámbrico y utiliza Prolific PL-2303 USB-to-serial converter. Como se explica en esta página, el PL-2303 en el módem utiliza no predeterminado PID USB, asegúrese de descargar la última versión de la biblioteca, que de forma transparente admite PIDs.

Para explorar la funcionalidad de este dispositivo se puede escribir un sencillo programa que se base en el terminal Xbee. El programa inicializa el PL-2303 y espera la entrada del usuario que pasa pulsaciones de teclas para el módem y la visualización de las respuestas a la pantalla. Vamos a correr y ver lo que este pequeño módem es capaz de hacer.

Durante el funcionamiento normal, el sistema puede ser alimentado por USB, dependiendo de tu placa Arduino puede que tenga que desconectar el modem durante la programación. Todas las interacciones se producen a través del emulador de terminal se ejecuta en un PC – . El uso de serie del monitor integrado en Arduino IDE no es recomendable. El módem necesita tarjeta SIM para activar la función, uso SIM de prepago de T-Mobile y también utilizado con éxito con AT & T.

Si todo está conectado correctamente croquis te mostrará el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Start
PL Init
Addr:1
NC:1
0000: 09 02 27 00 01 01 00 A0 FA 09 04 00 00 03 FF 00
0010: 00 00 07 05 81 03 0A 00 01 07 05 02 02 40 00 00
0020: 07 05 83 02 40 00 00 Conf.Val: 01
Iface Num: 00
Alt.Set: 00
Endpoint descriptor:
Length:         07
Type:           05
Address:        81
Attributes:     03
MaxPktSize:     000A
Poll Intrv:     01
Conf.Val: 01
Iface Num: 00
Alt.Set: 00
Endpoint descriptor:
Length:         07
Type:           05
Address:        02
Attributes:     02
MaxPktSize:     0040
Poll Intrv:     00
Conf.Val: 01
Iface Num: 00
Alt.Set: 00
Endpoint descriptor:
Length:         07
Type:           05
Address:        83
Attributes:     02
MaxPktSize:     0040
Poll Intrv:     00
Conf:1
PL configured

 

El último mensaje (línea 38) muestra que la PL-2303 ha sido reconocido y configurado con éxito. Tipo en el teclado y pulse Enter. Si aparece OK en la línea siguiente, el módem está vivo y contestador.

...
Conf:1
PL configured
at
OK

Ahora vamos a ver si el módem está conectado a una red. Tipo de creg +? y pulse Intro:

at+creg? +CREG: 0, 1   OK

El segundo número de respuesta indica el estado de la inscripción. Mi salida (1) significa que el módem está felizmente registrado en la red doméstica. Otros números que se pueden ver son «0» – no hay servicio «, 2» – la búsqueda de operador «3» – rehusadas para su registro. Si el módem está registrada, es posible determinar el operador celular: at+cops? +COPS: 0,0,»T-Mobile 260″ OK Cuando el módem está en línea, podemos hacer algo útil. Ya he enviado varios mensajes de texto a este número, vamos a echar un vistazo a ellos mediante el uso de comandos CMGL:

at+cmgl=1 +CMGL: 1,1,,50 07912160130320F8040B919127163673F500001101814190044A23F3F61C6496BFDBA0F3FB7D6697152D503BACAFCBDF76C0B91D4EB35DE3771B +CMGL: 2,1,,57 07912160130320F5040B919127163673F500001101814124244A2B66F9BB0D3ABFDF677619447F83885850FB4D2EB7152D503BACAFCBDF76C0B91D4EB35DE3771B +CMGL: 3,1,,53 07912160130320F8000B919127163673F500001101817184554A26F4F29C0E9A81CCF2771B747EBFCFECB2A2056A87F575F9DB0E38B7C369B66BFC6E03 +CMGL: 4,1,,53 07912160130320F8040B919127163673F500001101817145154A26F4F29C0EA281CCF2771B747EBFCFECB2A2056A87F575F9DB0E38B7C369B66BFC6E03 OK

Lo que se ve es la salida en el llamado formato PDU. Muchos dispositivos GSM tienen el formato convertido en el momento del encendido. Está bien para ordenadores, pero no es tan fácil para los seres humanos. Por suerte para nosotros, este módem también soporta el modo de texto SMS, que se puede activar mediante las teclas + CMGF comando:

at+cmgf=1 OK at+cmgl=»ALL» +CMGL: 1,»REC READ»,»19725555555″,,»11/10/18,14:09:40-36″,145,35 sms from google – m…[email protected] +CMGL: 2,»REC READ»,»19725555555″,,»11/10/18,14:42:42-36″,145,43 from google to DX modem – m…[email protected] +CMGL: 3,»REC READ»,»19725555555″,,»11/10/18,17:48:55-36″,145,38 test 3 from google – m…[email protected] +CMGL: 4,»REC READ»,»19725555555″,,»11/10/18,17:54:51-36″,145,38 test 4 from google – m…[email protected] OK

El envío de mensajes es también fácil. Esto se hace usando el comando + CMGS. El comando tiene el número de teléfono del destinatario como un parámetro y envía un mensaje donde se puede introducir un mensaje. Fin del mensaje se indica pulsando Ctrl + z, asegúrese de que su programa de terminal pasa este código sin cambios al módem (masilla funciona correctamente aquí). Aquí está un ejemplo:

at+cmgs=»19725555555″
> test from T-Mobile to google
>
+CMGS: 34

OK

Hay mucho más que se puede hacer con este módem (o en cualquier teléfono GSM para el caso). Algunas cosas, como hacer o recibir llamadas, es bastante fácil de hacer, mientras que otros, como acceso a internet, requeriría algo de programación adicional.

Enlace original aqui

Conectando Arduino con un telefono móvil


  • Una de las principales motivaciones para la adición de código asincrónico apoyo del CDC para rev.2.0 de la Biblioteca Host USB iba a ser capaz de utilizar teléfonos celulares en los proyectos de Arduino – establecer un intercambio de datos simple a través de SMS, tomar fotos o conectarse a Internet. Los teléfonos de segunda mano son baratas pero muy capaz. Además, M2M (máquina a máquina) tarjetas SIM comienzan en $ 4 – $ 6/mes, algunos incluso permiten gratis SMS entrantes. Todo lo que hace que un teléfono celular es una opción atractiva para los proyectos de comunicación aficionados. En este post, voy a estar hablando de fundamentos de la telefonía celular con puerto de datos y comandos AT. También voy a presentar un bosquejo simple emulador de terminal – para usar el código que se necesita una placa Arduino, USB Host Shield, así como USB Host Shield 2.0 biblioteca.
    Modernos (<10 años) teléfonos han interface estándar de chips GSM implementado y accesible a través de la llamada «puerto de datos». La más antigua de teléfonos implementar nivel TTL interfaz serie asíncrono por medio de la «costumbre» cable de datos USB, que es sólo conector propietario en un extremo, un conector estándar USB en el otro extremo, y USB-to-serial chip convertidor (casi siempre Prolific PL2303) entre ellos. Entrada más reciente teléfonos celulares tienen USB a serie convertidor integrado. Motorola teléfonos por lo general terminará puerto de datos estándar mini-USB, otros, como Samsung y Sony Ericsson, utilice cable de propiedad. El convertidor de USB a serie en estos teléfonos es casi siempre de tipo estándar CDC ACM.Muchas de las funciones del teléfono que se puede acceder por los comandos AT, similares a los comandos usados ​​para controlar módems Hayes teléfono. Comandos estándar GSM están definidos en 3GPP TS 07.07 (busque la última versión, que es 7.8.0). Fabricantes de teléfonos celulares también definir sus propios comandos AT. En la documentación de los comandos AT generalmente se presentan en mayúsculas, sin embargo, la mayoría de los teléfonos aceptar minúsculas igual de bien. Un comando irá seguida de CR, LF (generalmente la tecla Enter). Si un comando es aceptado, bien sea devuelto, junto con la respuesta. Si el comando no es reconocido, se devuelve un error. Algunas órdenes serán aceptadas en ciertos estados teléfono y rechazado en otros.

Hay varias variantes de la invocación de cada comando:

Ejecute Esta variante se utiliza para los comandos que no requieren parámetros. El formato es ATcommand. Por ejemplo, el comando siguiente devuelve fuente de energía y el nivel de carga de la batería:

AT + CBC
+ CBC: 2,66

Aceptar

La respuesta significa que un teléfono se alimenta de la fuente de alimentación externa (2) y el nivel de la batería es 66 por ciento.

Prueba Esta variante se utiliza para parámetros de consulta y sus valores para el comando. El formato es ATcommand =?.

AT + CIND =?
+ CIND: («Voice
Aceptar

Este comando muestra todos los indicadores disponibles en la pantalla del teléfono, y sus posibles valores.

Obtenga Esta variante se utiliza para consultar la configuración actual para el comando. El formato es ATcommand?.

AT + CIND?
+ CIND: 0,1,0,0,4,0,0
Aceptar

En comparación con la producción de la anterior «Test» variante de la misma orden, podemos ver que el «Servicio» indicador en la pantalla del teléfono está encendido y «señal» se encuentra en el nivel 4.

Set Esta variante se utiliza para cambiar la configuración para el comando. El formato es ATcommand = param param ….

AT + CKPD = «1»
Aceptar

Este comando simula pulsar una tecla en el teclado del teléfono. La tecla pulsada es el número «1».
Respuesta no solicitada es la salida de algún otro evento de resultado del comando. El formato es COMANDO +: resultado. Es el mismo que sans comando de respuesta propio comando. Echa un vistazo al siguiente ejemplo:
Un comando + CMER activa o desactiva el envío de códigos de resultado no solicitados en el caso de piezas prensadas clave, cambios de pantalla, y los cambios indicador de estado. Los parámetros para este comando son los siguientes:

AT + CMER =?
CMER +: (0,3), (0,1,2), (0), (0,1,2), (0)
Aceptar

El primer parámetro establece el modo de salida, tres parámetros siguientes activar la salida o encender el teclado, la pantalla y los indicadores. Último parámetro controla el almacenamiento en búfer. El Motorola RAZR, el estado por defecto de este comando es la siguiente:

AT + CMER?
+ CMER: 0,0,0,0,0
Aceptar

lo que significa que todas las respuestas apagado. Ahora bien, si nos volvemos informar y establecer teclado para el:

AT + CMER = 3,1,0,0,0
Aceptar

y empezar a presionar botones en el teléfono, vamos a ver lo siguiente:

+ CKEV: «E», 1
+ CKEV: «E», 0
+ CKEV: «1», 1
+ CKEV: «1», 0
+ CKEV: «2», 1
+ CKEV: «2», 0
+ CKEV: «3», 1
+ CKEV: «3», 0
+ CKEV: «E», 1
+ CKEV: «E», 0

Aquí, «E» significa «rojo» botón (el que se utiliza para encender teléfono encendido / apagado, terminar una llamada, cancelar una acción y muchas otras cosas), «1», «2» y «3» son botones numéricos, y el número después de la coma significa «prensa» si 1 y «liberación» si 0. Ahora es evidente que por primera vez pulsado «Red» para encender la pantalla, entonces pulsa «123» y luego presionar «Red» de nuevo para borrar los dígitos.

El siguiente esquema es un programa de terminal simple. Sólo bucle principal se muestra el texto completo está disponible en el directorio examples en Github. Compilar, De carga, conecte el teléfono al escudo de host USB y abra la ventana de terminal. Si un teléfono es detectado correctamente, croquis salidas descriptor de configuración y espera a la entrada del teclado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void loop()
{
    Usb.Task();

    if( Usb.getUsbTaskState() == USB_STATE_RUNNING )
    {
       uint8_t rcode;

       /* reading the keyboard */
       if(Serial.available()) {
         uint8_t data= Serial.read();
         /* sending to the phone */
         rcode = Acm.SndData(1, &data);
         if (rcode)
            ErrorMessage<uint8_t>(PSTR("SndData"), rcode);
       }//if(Serial.available()...

       delay(50);

        /* reading the phone */
        /* buffer size must be equal to max.packet size */
        uint8_t buf[32];
        uint16_t rcvd = 32;
        rcode = Acm.RcvData(&rcvd, buf);
         if (rcode && rcode != hrNAK)
            ErrorMessage<uint8_t>(PSTR("Ret"), rcode);

            if( rcvd ) { //more than zero bytes received
              for(uint16_t i=0; i < rcvd; i++ ) {
                Serial.print(buf[i]); //printing on the screen
              }
            }
        delay(10);
    }//if( Usb.getUsbTaskState() == USB_STATE_RUNNING..
}

 

Líneas 10-16 contienen el envío de parte de la terminal. Búfer del teclado y se comprueba si no está vacío, un carácter se lee y envía al teléfono (línea 13, Acm.SndData ()). El resto del bucle () está leyendo el teléfono y es un poco más complicada.

Cuando un host USB envía en la solicitud de transferencia en el teléfono, no sabe cuánto se reciben los datos. Podría ser un byte o podría ser un paquete grande. Es por eso que el búfer asignado en la línea 22 debe ser igual a la cantidad máxima posible de datos, tamaño de punto final, es decir de Max.packet. La mayoría de los teléfonos tienen Max.packet tamaño de 32 bytes, una notable excepción de Samsung (64 bytes). Si usted ve símbolos extraños y ocasional restablece Arduino mientras se emite grandes cantidades de datos, compruebe Max.packet tamaños de puntos finales a granel y aumentar el tamaño del búfer en consecuencia.

La solicitud se envía en línea 24. Una propiedad importante de Acm.RcvData () es que devuelve el número real de bytes recibidos del punto final. El bucle en líneas 28-32 usos rcvd como un contador de bucle, de esta manera, sólo una parte de la memoria intermedia llena durante la transferencia será impreso.

Ahora vamos a empezar nuestro terminal. Una vez que una sesión de terminal está abierto, los comandos se pueden introducir desde el teclado. Para comprobar si la conexión es de tipo directo, en y pulse Intro. Si el teléfono está vivo, usted debe ver que responder con OK. El comando siguiente para intentar es AT + CLAC. Este comando muestra todos los comandos admitidos. Otros comandos pueden ser juzgados «a mano»; también, es posible obtener códigos de clave con AT + CMER, como se ha descrito anteriormente.

Tan fresco como puede parecer, la introducción de comandos desde el teclado no es muy útil para la automatización. Es deseable contar con funciones para llamar a números, enviar y recibir mensajes SMS y navegar por Internet. Por suerte para nosotros, este software ya se están desarrollando. Hay varios escudos GSM en el mercado, y GSM / GPRS módulos de estos escudos se basan en son casi idénticos a los teléfonos GSM. Por ejemplo, yo era capaz de seguir la mayor parte de este tutorial utilizando teléfono Motorola RAZR. Algunos comandos son diferentes, pero la mayoría del trabajo. Muchos de los comandos descritos en esta página también funcionan. Finalmente, está muy bien escrita GSM Zona de juegos Arduino Library, que puede ser fácilmente modificado para utilizar métodos USB para enviar / recibir datos al teléfono. Estoy pensando en buscar en él después de la finalización de la nueva biblioteca de host USB.

Por último, quiero hablar un poco acerca de la compatibilidad. Revisé este boceto con Motorola RAZR, Motorola y Samsung V220 A-777. Teléfonos Motorola trabajar fuera de la caja, Samsung necesita cambiar el tamaño buffer. También traté de Sony Ericsson TM-506 y TM 717– el descriptor de configuración en estos teléfonos es muy complejo y el método Init () no les inicializar correctamente. Este problema se solucionará en el futuro. También tengo curiosidad acerca de otros teléfonos – por favor, hágamelo saber si su teléfono trabajado con este sketch.

fuente original : https://www.circuitsathome.com/mcu/programming/interfacing-arduino-to-a-cellular-phone