Scan de redes GSM

En este ejemplo se imprime el número IMEI del módem, a continuación, se comprueba si está conectado a una portadora e imprime la fuerza de la señal. También explora todas las redes cercanas.

Hardware nesesitado

Placa Arduino o Genuino
Escudo GSM/GPRS  Telefonica + Arduino
Tarjeta SIM habilitada para datos

Circuito



Código
En primer lugar, importar la biblioteca de GSM

#define PINNUMBER ""
 
Inicializar instancias de las clases que va a utilizar. Va a necesitar GSM, GSMScaner, y la clase GSMmodem.

GSM gsmAccess;
GSMScanner scannerNetworks;
GSMModem modemTest;

Crear una variable para contener el número de IMEI, y unos mensajes de estado para enviar al monitor de serie:

String IMEI = "";
String errortext = "ERROR";


En setup, abra una conexión serie al ordenador. Después de abrir la conexión, enviar un mensaje al monitor serie que indica que el programase ha iniciado. Llamada a @ scannerNetworks.begin () @@ para restablecer el módem.

void setup(){
   Serial.begin(9600);
   Serial.println("GSM networks scanner");
   scannerNetworks.begin();
  
Crear una variable local para realizar un seguimiento del estado de la conexión. Vamos a usar esto para mantener el programa funcionando hasta que la tarjeta SIM esté conectada a la red:

boolean notConnected = true;

Conectarse a la red llamando a gsmAccess.begin (). Se necesita el PIN de la tarjeta SIM como argumento. Al colocar esto dentro de un bucle while (), se puede comprobar continuamente el estado de la conexión. Cuando el módem se conecte, gsmAccess () devolverá GSM_READY. Use esto como una bandera para establecer la variable notConnected a true o false. Una vez conectado, se ejecutará el resto de la configuración.

while(notConnected)
   {
     if(gsmAccess.begin(PINNUMBER)==GSM_READY)
       notConnected = false;
     else
     {
       Serial.println("Not connected");
       delay(1000);
     }
   }

Obtener el IMEI del módem con  modemTest.get IMEI () e imprimirlo en el monitor serie.
  

Serial.print("IMEI del Modem : ");
   IMEI = modemTest.getIMEI();
   IMEI.replace("\n","");
   if(IMEI != NULL)
     Serial.println(IMEI);

En loop (), escanear e imprimir todas las redes disponibles. Esto puede tomar algo de tiempo

Serial.println("Escaneando redes disponibles. Puede tardar algunos segundos.");
   Serial.println(scannerNetworks.readNetworks());
 
Imprimir la actual portadora conectada, y la fuerza de la señal. La intensidad de la señal está en una escala de 0-31, donde 0 es el más bajo, y el 31 es el más alto. Cerrar loop ().

Serial.print("Portadora actual: ");
   Serial.println(scannerNetworks.getCurrentCarrier());

   Serial.print("Fuerza de la señal: ");
   Serial.print(scannerNetworks.getSignalStrength());
   Serial.println(" [0-31]");
 
Una vez que se carga el código, abrir el monitor serie para ver el estado de la conexión.

El programa completo se muestra a continuación.


// Escaneado de Redes GSM 

// En este ejemplo se imprime el número IMEI del módem, a continuación, se comprueba 
// para ver si está conectado a una portadora. Si es así, se imprime el número de 
// teléfono asociado a la tarjeta. A continuación, se analiza en busca de redes 
// cercanas e imprime sus intensidades de señal. 

// Circuito: 
// * Escudo GSM 
// * Tarjeta SIM 

// Creado 8 Marzo de 2012 por Tom Igoe, ejecutado por Javier Carazo Modificación 
// el 4 Febrero de 2013 por Scott Fitzgerald 

// http://www.arduino.cc/en/Tutorial/GSMToolsGsmScanNetworks 

// Este ejemplo de código es de dominio público * /

// bibliotecas
#include <GSM.h>

// Numero de PIN 
#define PINNUMBER ""

// inicializa la instancia biblioteca
GSM gsmAccess;     // incluye un parámetro "verdadero" para habilitar la depuración
GSMScanner scannerNetworks;
GSMModem modemTest;

// Almacena los datos en variables
String IMEI = "";

// resultado de error por el monitor serie
String errortext = "ERROR";

void setup() {
  // inicializa las comunicaciones serie y espera a que se abra el puerto:
  Serial.begin(9600);
  while (!Serial) {
    ; // espera a que el puerto serie este conectado. Necesario para Leonardo solamente
  }

  Serial.println("Escaner de redes GSM");
  scannerNetworks.begin();

  // connection state
  boolean notConnected = true;

  // Inicia el escudo GSM 
  // Si su SIM tiene PIN, pasarlo como un parámetro de begin () entre comillas
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("No conectado");
      delay(1000);
    }
  }

  // obtiene los parametros del modem
  // IMEI, ientificador unico del modem
  Serial.print("IMEI del Modem: ");
  IMEI = modemTest.getIMEI();
  IMEI.replace("\n", "");
  if (IMEI != NULL) {
    Serial.println(IMEI);
  }
}

void loop() {
  // busca las redes existentes, muestra una lista de las redes
  Serial.println("Escaneando redes disponibles. Puede tardar algunos segundos.");
  Serial.println(scannerNetworks.readNetworks());

  // portadora conectada actualmente
  Serial.print("Portadora actual: ");
  Serial.println(scannerNetworks.getCurrentCarrier());

  // Devuelve la fuerza y la BER 
  // señal de fuerza enescala 0-31 . 31 significa potencia > 51 dBm 
  // BER es la tasa de error.  Escala  de 0-7. 99 = no detectable
  Serial.print("Fuerza de la señal: ");
  Serial.print(scannerNetworks.getSignalStrength());
  Serial.println(" [0-31]");

}

No hay comentarios:

Publicar un comentario