venerdì , 19 Luglio 2019
iten
Home » Elettronica » Come usare la GSM/GPRS shield di Seed Studio

Come usare la GSM/GPRS shield di Seed Studio

Ho avuto bisogno di acquistare questa shield per esigenze lavorative. Devo sviluppare un prodotto che sfrutta gli SMS per interagire con l'utente, ed oggi sicuramente Arduino rappresenta una delle piattaforme primarie per questo genere di applicazioni.

Ho scelto la shield di Seed Studio per vari motivi. Innanzitutto, è quella con il miglior rapporto qualità prezzo sul mercato. La shield ufficiale di Arduino costa onestamente un po' troppo, e poi è basata su un modem di cui in giro si sa troppo poco. La shield di Seed Studio, invece, sfrutta il modem SIM900 di SIMcom, largamente diffuso nel mondo open hardware e per cui esistono librerie e documentazione a iosa.

In questo tutorial vi darò una serie di suggerimenti per essere immediatamente produttivi con questa shield. Infatti, ho dovuto un po' faticare prima di vederla funzionare al 100%. Inoltre, Seed Studio non ha rilasciato una libreria ufficiale per usare questa shield. Occorrerebbe armarsi di tanta pazienza, leggersi tanta documentazione relativa ai comandi AT supportati dal modem SIM900, e fare prove. Io, invece, vi mostrerò come adattare una libreria esistente e sviluppata per altre shield a questo prodotto, in modo da disporre di una libreria di alto livello che vi permette in pochi minuti di essere produttivi.

Caratteristiche

Dopo una serie di revisioni hardware, questa shield ha raggiunto una release 2.0 che fissa problemi tecnici che erano emersi nelle precedenti versioni. Anche se in giro si trovano a buon mercato le versioni precedenti (nello specifico la release 1.4), io vi suggerisco di comprare questa, che si trova intorno ai €55 IVA compresa. Le caratteristiche principali sono:

  • È pienamente compatibile con Arduino UNO e Mega
  • Dà la possibilità di scegliere, tramite appositi jumper, se adoperare la seriale hardware di Arduino o simularla via software con la libreria SoftwareSerial.
  • Il modem SIM900 supporta ben 4 bande di comunicazione (850/900/1800/1900MHz). Attenzione: il modem SIM900 non è un modem UMTS (3G) e per tanto non è utilizzabile con schede Tre (H3G).
  • Supporta i protocolli TCP/UDP per connettersi ad Internet.
  • Fornisce un jack per cuffie per le chiamate voce.
  • Integra un alloggio per SIM card e una batteria tampone per l'orologio interno del modulo SIM900.
  • Ha un connettore micro-SMA per antenne esterne, a cui è collegata una PCB antenna esterna.
  • Viene fornita di un pratico "schermo" di plexiglass per proteggere l'elettronica della shield.

La caratteristica fondamentale di questi moduli GSM come il SIM900 è quella di interagire con il microcontrollore tramite un'interfaccia UART, per mezzo di comandi AT. Come detto sopra, la scheda permette di adoperare o la seriale Hardware di Arduino (PIN D0 e D1) o simularla tramite i PIN D7 (RX) e D8 (TX). Se siete possessori di Arduino Mega, potete tranquillamente adoperare una delle tre seriali Hardware. Potete fare la stessa cosa anche con Arduino UNO, tuttavia perderete l'uso della console seriale di Arduino, e dovrete anche fare attenzione in fase di programmazione rimuovendo la shield (o i relativi jumper). Certo è che la libreria SoftwareSerial porta via di suo circa il 15% della memoria codice, quindi dovrete valutare bene a seconda della vostra applicazione. Va da se, comunque, che a meno di applicazioni estremamente complesse l'uso della SoftwareSerial va più che bene.

Alimentare la shield

Un capitolo a parte merita il discorso sull'alimentazione. In fase di "start" il modem SIM900 richiede una corrente iniziale di circa 1A a 5VDC. Questo significa che questa shield richiede un'alimentazione esterna obbligatoria, con un buon alimentatore switching. Io stesso, infatti, ho notato strani fenomeni se la shield non è alimentata esternamente in fase di accensione. Dopo l'avvio, è possibile anche staccare l'alimentazione aggiuntiva.

accendere-sim900

Per accendere la shield occorre premere l'apposito switch, come mostrato in figura. Se la SIM è stata inserita correttamente (ed il segnale è buono)  si accenderà il LED rosso per segnalare l'accensione del modulo GSM, e il LED verde affianco comincerà a lampeggiare. Non appena il modem termina la sua registrazione sulla rete GSM, il LED verde comincerà a lampeggiare con una frequenza inferiore, ogni 3 secondi circa. Ricordatevi di rimuovere il PIN dalla SIM se ne è fornito.

Sull'alimentazione di questa shield è importante aggiungere anche un ulteriore dettaglio. Una delle caratteristiche che differenziano questa versione della shield dalle precedenti è l'aggiunta di un circuito dedicato di "soft start". Come detto in precedenza, il modulo SIM900 richiede in fase di accensione fino a 1A di corrente. Nelle versioni precedenti di questa shield, questo provocava che la tensione del pin +5V si abbassava fino a poco più di 1V, provocando il RESET del micro. Il circuito di soft start serve proprio ad impedire che questo accada. Perciò vi suggerisco di acquistare l'ultima versione della shield.

Configurazione iniziale

Vi anticipo da subito un aspetto che mi ha fatto perdere non poco tempo nei miei primi test di questo prodotto. L'interfaccia UART del modulo SIM900 viene configurata da Seed Studio per operare a 19200 BAUD. Dai test che ho fatto, ho notato che la velocità di connessione è troppo alta, e spesso accade che i messaggi scambiati tra Arduino e il modulo SIM900 si corrompono. In particolar modo ho avuto problemi nel recupero degli SMS: il contenuto di questi mi appariva spesso e volentieri corrotto. Riducendo questa velocità a 9600 BAUD non ho più avuto problemi. Molto probabilmente, questo comportamento si deve all'uso della SoftwareSerial. Andrebbe indagato approfonditamente con un analizzatore di stati logici, ma non essendo questo punto critico per la mia applicazione, ho preferito risolvere abbassando la velocità.

Ma come fare questa operazione? L' "Hello World" di questa shield è rappresentato senza ombra di dubbio da questo codice.

Lo sketch di cui sopra fa un'operazione semplicissima. Per ogni byte trasmesso sulla seriale simulata (ossia i dati trasmessi dal modem SIM900), questi vengono rigirati sulla seriale hardware di Arduino, che è collegata tramite porta USB al nostro PC, e viceversa. In pratica, questo script ci permette di interagire con il modem SIM900 direttamente dal PC, passando per Arduino. Questo bridge tra le due seriali ci permette di poter interagire direttamente con modem SIM900 e configurarlo.

Per configurare il modem vi consiglio di adoperare il tool AT Command Tester, una comodissima applet Java che fornisce tutte le facilities per interagire con i modem SIM900. Per configurarlo procediamo nel seguente modo:

  • Compiliamo e carichiamo su Arduino lo sketch di sopra.
  • Andiamo sul sito web di AT Command Tester con un browser che supporti Java (consiglio Firefox o Safari).
  • Clicchiamo su "Find Ports". Tra le porte seriali listate troveremo quella di Arduino (e la stessa che abbiamo usato per caricare lo sketch su Arduino).
  • Scegliamo come BAUD rate 19200.
  • Clicchiamo su "Connect". Dopo qualche istante l'applet ci comunicherà di essere collegati col modem.

Schermata 2013-11-03 alle 11.22.13

Per configurare la velocità della porta UART del modulo SIM900, dirigiamoci su "Command Mode" ed inviamo al modem il comando "AT+IPR=9600", come mostrato nella schermata seguente.

Schermata 2013-11-03 alle 11.26.22

A questo punto avrete sicuramente notato che non riuscite più ad inviare comandi al modem. Perché succede questo? Niente panico 🙂

Semplicemente abbiamo modificato il baudrate della porta del modem, ma lo sketch caricato su Arduino assume ancora la vecchia velocità di 19200 bps. A questo punto, torniamo nell'IDE di Arduino, modifichiamo la riga 10 dello scketch nel seguente modo:

Ricompilate, caricate lo sketch ed il gioco e fatto 🙂

Quale libreria adoperare?

Come detto all'inizio di questo tutorial, questa shield non ha una libreria ufficialmente supportata da Seed Studio per poter velocemente sviluppare la nostra applicazione M2M. Senza una libreria di "alto livello", siamo costretti a dover interagire con il modem tramite comandi AT. Se non si ha esperienza a riguardo, vi assicuro che non è cosa affatto facile farlo.

Tuttavia la soluzione è a portata di mano. Esiste, infatti, una libreria sviluppata dal gruppo gsmlib.org. La libreria non supporta ufficialmente questa shield, ma con pochissimo sforzo è possibile modificarla in base alle proprie esigenze. Vediamo come.

Innanzitutto, occorre scaricare l'ultima versione della libreria da qui: al momento in cui vi scrivo, siamo alla 3.05. Scaricato il file zip, occorre scompattarlo e inserirlo nella directory delle librerie utente di Arduino (per questo vi rimando alla documentazione ufficiale). Come detto, la libreria non funziona con la shield di Seed Studio. Però, è possibile modificare il file GSM.cpp come riportato nel seguente listato.

Le righe che ci interessano sono rispettivamente la 27 e 28. In queste due righe vengono impostati i PIN della seriale simulata. La nostra shield adopera rispettivamente i PIN 7 e 8, come riportato nel listato. In questo modo sarà perfettamente possibile adoperare questa libreria. Fine. Non c'è null'altro da fare.

Vediamo un semplice esempio per inviare SMS.

Come  vedete, grazie a questa libreria ci possiamo concentrare unicamente sulla nostra applicazione, senza preoccuparci di dettagli di utilizzo del modem SIM900. La libreria offre molte funzionalità, per cui vi rimando al codice sorgente.

Conclusioni

Come visto, con semplici passi, questa shield può essere immediatamente resa produttiva e sfruttata per la nostra applicazione.  Certo, non è proprio un prodotto perfetto. Ad esempio, a me l'antenna esterna appesa in questo modo non piace. Una semplice PCB antenna integrata sulla shield sarebbe stata più che sufficiente. Forse, quelli di Seed Studio non l'hanno fatto per mancanza di spazio sul PCB. Inoltre, un minimo di supporto per la parte software da parte loro sarebbe utile. Comunque, avete visto che con semplici pochi passaggi è possibile adattare altre librerie a questa shield.


Check Also

Compilare micropython per una scheda STM32Nucleo-F4

Chi mi conosce sa che il mio linguaggio di programmazione preferito è Python. Ho scritto …

10 comments

  1. Ciao,
    Si può accendere la shield senza pulsante? Se si come?
    Perché per il mio progetto avrò dei cicli di on ed off di arduino.

    Grazie

  2. GRAZIE del tuo articolo!!!

  3. ho cambiato i pin di tx e ric aprendo il file arduino.cpp come file txt ma non invia sms...il messaggio che restituisce è :
    GSM Shield testing.
    Trying to force the baud-rate to 9600

    ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp

    status=IDLE

    come mai? grazie

  4. ho provato aq configurare il mio gsm gprs shild con at comand tester,e non funziona ho provato a copiare le librerie di qui sopra e soltanto una funziona.invece le altre mi da errore i compilazione come mai.io uso la versione di arduino 1.6.0 potete aiutarmi
    vorrei che il mio gsm si funzionasse e mannderebbe il messaggio

    • Carmine Noviello

      Il primo esempio (quello del paragrafo "Configurazione iniziale") si riesce a compilare? Senza quel codice a bordo di Arduino, ATCommandTester non può funzionare.
      Che errori di compilazione ti dà l'IDE 1.6?

  5. Complimenti!!! UNa guida utilissima!

  6. Ciao,
    complimenti è davvero molto utile questo post,
    Mi piacerebbe molto sapere come effettuare telefonate dalla shield potresti aiutarmi con un esempio semplice e chiaro come questo? grazie

  7. Salve Sig. Carmine. sono un tecnico in impianti di sicurezza di Genova ed il mio sviluppatore mi sta facendo una versione aggiornata du alcune funzione che dal PI2 e le deve portare sul PI3 .
    Ci siamo un pò arenati perchè nella versione 2 uso un classico Modem per leggere i comandi AT e di conseguanza fare delle azioni .
    La versione 3 si basa principalmente di stare collegato al nostro portale per leggere le informazioni .
    Il problema nasce dalle gestione contemporanea dei due servizi ( visto che volevo continuare ad usare anche gli sms ) utilizzando o le classiche chiavette Huawei o il modem 800 /900.
    Mi chiedevo se può darci una mano indicandoci i prodotti più funzionali e se la contemporanetà dei duè servizi è possibile ( fermo restando che il 3g non sia troppo lento ) . Grazie , 3355359389 Marco

  8. Salve tramite gprs sheild arduino uno posso far fare degl impulsi a 4 rele tramite 4 cellullari diversi?

Rispondi a mitch Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

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