domingo, 16 de marzo de 2014

Módulo GSM/GPRS seeedstudio y BusPirate

Saludos:

Hace unos días adquirí un módulo GSM/GPRS de seeedstudio y me ha dado verdaderos dolores de cabeza.  El módulo en cuestión es el siguiente:

Figura 1.  GSM/GPRS shield disponible aquí.

El módulo funciona de la siguiente manera:

  1. Lo conectas a un arduino
  2. Cargas el ejemplo disponible aquí.
  3. Abres el puerto serial y puedes controlar el módulo mediante comandos AT.
Así de simple, pero a mi no me funcionó.  Bueno, si funcionó, pero no de la manera que especifica el proveedor, es decir, pude hacer una llamada, y enviar un mensaje de texto, pero no podía visualizar los comandos AT en el puerto serial.  Intenté de todo, abrir el puerto serial con Teraterm, hyperterminal, el serialtool que ofrece el fabricante, el monitor serial propio de Arduino, todo sobre Windows 7, Windows XP y Ubuntu... y nada, no podía visualizar los comandos AT en el puerto.

Cuando di todo por perdido y estaba a punto de resignarme a utilizar el módulo "a ciegas", recordé que hace unos meses me regalaron un BusPirate y decidí darle una oportunidad.

El BusPirate es una interfaz de hardware que nos permite "hablar" con otros dispositivos mediante casi cualquier protocolo (UART, I2C, SPI, etc.), así que lo configuré como un conversor serial-usb y pude visualizar los comandos AT.  Para esto se utilizó RealTerm, y el BusPirate configurados de la siguiente manera:

  1. Conectamos los puertos del BusPirate así:  MISO al puerto 7 del módulo GPRS (RX del arduino), y MOSI al puerto 8 del módulo GPRS (TX del arduino).
  2. Conectamos una fuente externa de 3.3V y 5V al módulo GPRS.  Para esto utilicé el arduino como fuente de poder, en circuitos que demanden menos corriente se puede utilizar directamente el BusPirate, pero en este caso no es recomendable.
  3. Conectamos el BusPirate al computador, y abrimos RealTerm.
  4. Configuramos RealTerm para que se comunique con el puerto serial reconocido por el computador para el BusPirate con 115200 8N1.
  5. Configuramos el BusPirate como un conversor serial-usb a 19200 8N1 de la siguiente manera:
HiZ>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. LCD
9. DIO
x. exit(without change)
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value
(1)>6
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE
(1)>1
Stop bits:
1. 1 *default
2. 2
(1)>1
Receive polarity:
1. Idle 1 *default
2. Idle 0
(1)>1
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)
(1)>2
Ready
UART>(3)
UART Bridge
Reset to exit
Are you sure? Y
Y eso es todo, con esta configuración podemos enviar comandos AT al GPRS shield y visualizarlos en la pantalla del RealTerm.  Como un comentario extra, en esta configuración, el RealTerm estará configurado como 115200 8N1 para hablar con el BusPirate, pero el puerto serial del BusPirate estará configurado como 19200 8N1 para hablar con el shield GPRS, por lo tanto estamos utilizando velocidades diferentes, así, en el caso de programar un arduino o un pinguino para que interactúe con el GPRS se requiere configurarlo como 19200 8N1.  En el caso que queramos que tanto el RealTerm como el BusPirate funcionen a la misma velocidad, la configuración es la siguiente:

HiZ>b
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value
(9)>6
Adjust your terminal
Space to continue
Entonces, la conexión utilizada es la siguiente:

Figura 2. Esquema básico de conexión.

Una vez conectado, la respuesta que obtenemos en el Realterm se muestra en la figura 3.  En este caso, enviamos "AT+CADC?" y obtenemos el valor del conversor ADC, en este caso "1,5", además enviamos "AT&V" y obtenemos la configuración del módulo.



Espero que esta información les sea de utilidad.  Hasta una próxima entrega.