En este tutorial demostramos cómo conectar un modem FONA 808 de Adafruit con un ARDUINO UNO para poder realizar operaciones en la red de telefonía movil GSM tales como el envío de mensajes SMS o comunicación por internet usando una red 3G.
En esta entrega discutiremos las conexiones de diversos puertos y pines del FONA, así como el envío de comandos AT mediante el monitor serial del IDE de ARDUINO (o cualquier terminal serial conectada al ARDUINO)
Paso 1 – Conexiones entre el FONA 808 y el ARDUINO UNO
FONA 808 ARDUINO UNO GND -----------------> GND VIO <----------------- 5V RX <----------------- 10 (TX) TX -----------------> 11 (RX) RTS -----------------> 12 GPIO KEY -----------------> GND Adicionales: GPS ANT ---< ANTENA GPS GSM ANT ---< ANTENA GSM JST =======< Batería LIPO 3.7V USB =======< Poder USB 5V (carga la batería) LEDs: Amarillo: Se enciende mientras se carga la batería usando suministro eléctrico del puerto USB Azul (PWR): Se enciende al conectar la alimentación a VIO Rojo (NET): Se enciende al comunicarse con la red telefónica Tarjeta SIM Debe estar instalada para que funcione, sin código PIN configurado. El código PIN puede ser deshabilitado desde cualquier celular compatible.
Paso 2 – Sketch de Prueba TX/RX en el ARDUINO UNO
El siguiente sketch se utiliza para enviar datos desde el monitor serial del ARDUINO IDE hasta el FONA 808 y devolver las respuestas del FONA 808 al monitor serial del ARDUINO UNO.
/**
This sketch is public domain stuff
It will allow you to transmit AT commands to the FONA
using a terminal connected to your ARDUINO UNO board.
**/
#define DEBUG_MODE true
#include <SoftwareSerial.h>
SoftwareSerial Serial1 = SoftwareSerial(11 /*RX*/, 10/*TX*/); //TX,RX at FONA
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
delay(1000);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
Serial.println("SETUP COMPLETE!");
Serial.println(" PIN 10 should be connected to RX @ FONA");
Serial.println(" PIN 11 should be connected to TX @ FONA");
Serial.println(" PIN 12 should be connected to RTS @ FONA");
}
void loop() {
String serialData = readSerial();
if (isNotEmpty(serialData)) {
logMessageln("Data Found: |" + serialData + "|");
if (serialData.startsWith("CTRL+Z")) {
Serial1.write(0x1A); //CTRL+Z Caracter (ASCII 26) para salir del modo texto
} else {
Serial1.println(serialData);
}
}
String swSerialData = readSWSerial();
if (isNotEmpty(swSerialData)) {
logMessageln("SData Found: |" + swSerialData + "|");
}
}
boolean isNotEmpty(String data) {
return data != "";
}
String readSWSerial() {
String serialData = "";
if (Serial1.available()) {
//THIS IS INTENDED TO READ LINES WRITTEN BY ANOTHER ARDUINO USING Serial.println() function
//WHICH WILL END COMMUNICAITON WITH \r\n
//https://www.arduino.cc/en/Serial/Println
serialData = Serial1.readStringUntil('\r\n');
}
return serialData;
}
String readSerial() {
String serialData = "";
if (Serial.available()) {
//THIS IS INTENDED TO READ LINES WRITTEN BY ANOTHER ARDUINO USING Serial.println() function
//WHICH WILL END COMMUNICAITON WITH \r\n
//https://www.arduino.cc/en/Serial/Println
serialData = Serial.readStringUntil('\r\n');
}
return serialData;
}
void logMessageln(String message) {
if (DEBUG_MODE) {
String timestamp = String(millis());
Serial.println(timestamp + "-" + message);
}
}
Paso 3 – Probando algunos comandos AT
El FONA808 al igual que muchos modems en la industria funciona mediante un conjunto de comandos denominado «AT»
El sketch que subimos en el paso 2 permite interactuar con el FONA808 usando comandos AT que son enviados desde el monitor serial del ARDUINO IDE.
La siguiente imagen muestra la ejecución del sketch. Hemos abierto el monitor serial del IDE de ARDUINO usando la combinación de teclas
[CTRL]+[SHIFT]+[M]
A su vez nótese que en la parte inferior de la ventana tenemos seleccionado la opción «Both NL CR» y la velocidad de 9600 baud.
Al escribir la palabra «AT» en la caja de entrada superior y hacer clic en el botón [Send] dicho comando es enviado al FONA808 el cual responde con una frase «OK»
Se pueden econtrar referencias al conjunto de comandos AT compatibles en el sitio oficial de ADAFRUIT para el FONA808
Prácticamente todas las operaciones de comunicación con el FONA808 se realizan mediante comandos AT, tanto para inicializar el dispositivo, configurarlo y operarlo.
Vamos a utilizar algunos comandos útiles que se describen en este artículo de y en este otro artículo de Adafruit.
Algunos comandos útiles para probar el envío de SMS ATI Muestra el nombre y revisión del módulo. AT+CCID Muestra el número de identificación del SIM Card. AT+COPS? Muestra los datos de la conexión activa de la red. AT+CSQ Muestra la fuerza de la señal detectada. AT+CBC Retorna el estado de la batería LIPO AT+CMGF=1 Configura el módulo para envío de texto SMS AT+CMGS="nnnnnn" Solicita el envío de un mensaje de texto SMS al número definido por nnnn por ejemplo AT+CMGS="83893042" Mostrará un indicador ">" para escribir el mensaje de texto Envíe la cadena "CTRL+Z" para salir del modo SMS y enviar el mensaje. Recibirá una respuesta de tipo +CMGS y otra de tipo +CMTI como confirmación del envío. Las imágenes a continuación muestran el funcionamiento de esta terminal.
Espero que este artículo les haya sido de utilidad. En próximas entregas estaremos explorando la comunicación HTTP y el uso del GPS.
10,377 total views, 3 views today
Comentarios
Saludos Jose, muchas gracias por tus aportes, te comento que estoy tratando de conectar un Fona3G SIM5320A con Arduino Leonardo, sin embargo no logro hacerlo trabajar, he tratado con todos los sketch que he visto en internet y ninguno me funciona, he revisado los pinout y me parece que todo está bien, ocupo conectarlo para un proyecto en el cual requiero pasa datos a la nube con este servicio de 3G, te agradezco de ante mano toda la ayuda que puedas brindar.
Buen día Rodrigo, en muchas ocasiones me he topado con que el sistema no funciona del todo si no se conecta una batería al Fona. ¿Has verificado esto? Podrías incluso enviarnos un enlace o diagrama de lo que estás haciendo para ayudarte.