FONA808 + ARDUINO UNO – FASE 1: Conexión, Comandos AT y Mensajes SMS

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.

786 total views, 3 views today

13Shares

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.