GPRS shield: arduino si connette a internet

Vuoi connettere il tuo progetto con arduino a internet? Usa la GPRS shield. Per connettere il tuo progetto alla grande rete hai già letto come utilizzare la WiFi shield o Ethernet Shield

GPRS shield

quando non hai la possibilità di collegarti ad una rete già esistente puoi utilizzare la GPRS shield

Questa shield ti permette di eseguire sia comunicazioni GSM sia connessioni GPRS grazie al modulo SIM900 vero cuore della shield e modem di connessione.

In questo articolo ti mostro come effettuare la connessione GPRS ad un sito Web e scrivere sul monitor seriale la risposta del server.

Montare e configurare la GPRS shield

La GPRS shield è già montata, quindi niente saldature o complessi piani di assemblaggio, l’unica cosa che devi collegare è l’antenna, per farlo la GPRS shield dispone di un connettore SMA ed uno MMCX saldati sulla scheda e a cui puoi collegare l’antenna in dotazione.

Io ho scelto di collegare il cavetto MMCX e l’antenna volante pensando ad un progetto in cui il connettore dell’antenna possa non coincidere con il foro di uscita del case che lo ospita:

GPRS shield

per la configurazione ci sono dei pin su cui inserire i jumper come da schema:

GPRS shield configurare pin TX ed RX

avrai notato che i pin TX ed RX sono configurati rispettivamente come 2 e 3, inoltre devi controllare che il microswitch, evidenziato in giallo, sia posizionato su UART.

Libreria GPRS shield e comandi AT

Il modulo SIM900 è un modem seriale, ossia comunica con arduino attraverso due pin ( 2 e 3 ) in modalità Tx/Rx e si alimenta con i +5v e Gnd direttamente da Arduino.

Come tutti i modem seriali puoi utilizzare i comandi AT, da wikipedia:

La maggior parte dei modem fonici utilizza i comandi AT Hayes, uno specifico insieme di comandi originalmente sviluppato per il modem Hayes Smartmodem da 300 baud. Lastringa di inizializzazione consiste di una serie di comandi che prepara il modem per la comunicazione, impostando caratteristiche come il tipo di connessione, i tempi di attesa, la rilevazione del segnale di occupato eccetera. Nei modelli di modem più recenti l’inizializzazione viene gestita da programmi con una qualche interfaccia grafica, in modo che l’utente non debba digitare questi comandi e neanche conoscerne l’esistenza.

comandi con cui puoi puoi dialogare con il modem impostando modalità di connessione, velocità ecc.. e puoi trovare un utile manuale in questo link.

I comandi AT non sono di certo semplici sopratutto se non conosci i protocolli e non hai chiaro come si esegue una connessione o cosa sia impostare i baud di una connessione GSM/GPRS.

Ti viene in aiuto una libreria davvero ben scritta: GSM GPRS GPS Shield, SIM908 & SIM900, IDE 1.00, Version 3.04 scritta da Marco Martines e Boris Landoni.

Lo sketch di connessione a Google dalla GPRS shield

Tra gli esempi disponibili con la libreria che hai scaricato puoi provare quello denominato “GSM_GPRSLibrary_Client_example” che ti riporto:

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to start a connection as client.

InetGSM inet;
//CallGSM call;
//SMSGSM sms;

char msg[50];
int numdata;
char inSerial[50];
int i=0;
boolean started=false;

void setup()
{
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;
  }
  else Serial.println("\nstatus=IDLE");

  if(started){
    //GPRS attach, put in order APN, username and password.
    //If no needed auth let them blank.
    if (inet.attachGPRS("wap.tim.it", "", ""))
      Serial.println("status=ATTACHED");
    else
      Serial.println("status=ERROR");
    delay(1000);

    //Read IP address.
    gsm.SimpleWriteln("AT+CIFSR");
    delay(5000);
    //Read until serial buffer is empty.
    gsm.WhileSimpleRead();

    //TCP Client GET, send a GET request to the server and
    //save the reply.
    numdata=inet.httpGET("www.google.com", 80, "/", msg, 50);
    //Print the results.
    Serial.println("\nNumber of data received:");
    Serial.println(numdata);
    Serial.println("\nData received:");
    Serial.println(msg);
  }
};

void loop()
{
  //Read for new byte on serial hardware,
  //and write them on NewSoftSerial.
  serialhwread();
  //Read for new byte on NewSoftSerial.
  serialswread();
};

void serialhwread(){
  i=0;
  if (Serial.available() > 0){
    while (Serial.available() > 0) {
      inSerial[i]=(Serial.read());
      delay(10);
      i++;
    }

    inSerial[i]='\0';
    if(!strcmp(inSerial,"/END")){
      Serial.println("_");
      inSerial[0]=0x1a;
      inSerial[1]='\0';
      gsm.SimpleWriteln(inSerial);
    }
    //Send a saved AT command using serial port.
    if(!strcmp(inSerial,"TEST")){
      Serial.println("SIGNAL QUALITY");
      gsm.SimpleWriteln("AT+CSQ");
    }
    //Read last message saved.
    if(!strcmp(inSerial,"MSG")){
      Serial.println(msg);
    }
    else{
      Serial.println(inSerial);
      gsm.SimpleWriteln(inSerial);
    }
    inSerial[0]='\0';
  }
}

void serialswread(){
  gsm.SimpleRead();
}

la compilazione del codice con l’IDE 1.0 di Arduino è avvenuta senza difficoltà e dopo aver caricato lo sketch su Arduino puoi aprire il monitor seriale e vedrai qualcosa di simile a questo:

GPRS Shield serial monitor output

lo sketch non presenta complessi comandi da impostare a quelli pensa la GPRSLibrary, i punti principali sono:

linee 01-05: includi tutte le librerie che occorrono allo aketch di funzionare con la GPRS shield;

linea 32: definisci una connessione a 2400 baud con il modem SIM900;

linea 34: se la comunicazione con il modem avviene correttamente imposta la variabile started a true;

linea 41: imposta l’APN fornito dalla compagnia telefonica, io ho utilizzato l’APN di TIM: “wap.tim.it” avendo inserito una scheda TIM nella GPRS shield, senza username e password;

linea 48: invii al modem uno di quei comandi AT di cui ti parlavo sopra “AT+CIFSR” che richiede al modem l’indirizzo IP ottenuto dal provider, è un ulteriore controllo che la connessione sia avvenuta;

linea 51: leggi il buffer trasmesso dal modem contenente la risposta, in questo caso l’IP richiesto alla linea 48;

linea 55: utilizza il metodo httpGET della libreria GPRS shield per connetterti ad una pagina web, nel caso indicato ti connetti all’indirizzo www.google.com sulla porta 80 ( default HTTP Port ) e la risposta la scrivi nella variabile msg;

linee 57-60: scrivi sul monitor seriale sia il risultato della chiamata eseguita alla linea 55 sia il messaggio, ossia la risposta, ottenuta.

linee 64-71: la funzione loop() in questo esempio continua ad eseguire due funzioni esterne: serialhwread() e serialswread();

linea 73: definisci la funzione serialhwread() la cui funzione è leggere dal monitor seriale l’input che gli invii e interpretarlo per inviare dei comandi AT al modem, in particolare è interessante la parte di TEST che analizzo nel dettaglio:

linea 90: se nella stringa inviata dal monitor seriale compare il testo TEST esegue le linee successive;

linea 91: scrive sul monitor seriale la stringa “SEGNAL QUALITY”;

linea 92: invia al modem il comando AT usando la stringa “AT+CSQ”;

a questo punto la funzione serialhwread() conclude il suo scopo e lo sketch continua sul loop() che invoca la serialswread():

linea 106: definisci la funzione serialswread() richiamata dalla loop() la cui funzione è scrivere sul monitor seriale il valore letto dal modem della GPRS shield;

linea 107: recupera la risposta dal modem SIM900 e la scrivi sul monitor seriale dell’IDE Arduino.

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/gprs-shield-arduino.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.