M590 – modulo GSM/GPRS – Esperimenti

Sto realizzando un circuito di controllo di un server tramite SMS e, come al solito, prima di mettermi a scrivere il programma in C per il microcontrollore, faccio dei test con un hardware “minimalista” collegato al notebook. Per scrivere i programmi di test in ambiente Windows, uso spesso il FreeBasic con il supporto dell’IDE FireFly (vedi Links utili); entrambi i programmi sono freeware ed hanno potenzialità notevoli.

Dato che costruirò pochi esemplari di questo circuito di controllo, ho cercato un modulo GSM/GPRS che fosse facile da saldare su un PCB realizzato da me. Per questi progettini non sofisticati, sviluppo da solo il disegno del PCB e poi invio il file Gerber ad una ditta cinese scoperta su “un noto negozio on-line” e quindi ricevo i miei bellissimi circuiti stampati, con tanto di “verde” e di serigrafia, in meno di due settimane, ad un prezzo conveniente. La qualità, per chi avesse dei dubbi, è decisamente buona.

Tra i moduli “facili da saldare” ed economici ho trovato lo M590 della Neoway. Le piazzole di saldatura sono col passo 2.54mm e la documentazione si trova facilmente su Internet, sia quella relativa all’hardware elettronico, sia quella relativa ai vari comandi AT implementati nel software. Un ulteriore punto a favore di questa scelta è che sul “noto negozio on-line” si trovano dei “kit” di montaggio che comprendono il modulo stesso, un PCB e i vari materiali accessori. Ovviamente, tutti (o quasi) i componenti del kit sono in SMD, quindi difficoltosi da saldare per un principiante, ma io ho cominciato a 12 anni ed ora ne ho 60, quindi…

Quindi ho comprato tre di questi kit, da tre venditori diversi (diversificare, diversificare) ed ho atteso pazientemente. Appena è arrivato il primo “kit” mi sono messo all’opera. Per prima cosa ho letto approfonditamente il documento PDF trovato on-line dal titolo: Neoway M590 Hardware Design Manual V1.1.pdf e vi ho trovato molti consigli utili a sviluppare un circuito “come si deve”. Ho allora abbozzato uno schema a blocchi di come avrei realizzato il mio hardware di test.

block-diag-ss

Lo schema a blocchi dell’hardware di test

La cosa su cui più insiste il manuale dell’hardware è l’alimentazione del modulo. Quindi ho deciso che nel circuito di prova avrei usato una batteria ricaricabile al litio, una cella da 3.7V di formato AA (14500, la classica stilo). Il vantaggio di usare una batteria così è che questa è in grado di fornire senza problemi i picchi da 2A che il modulo richiede durante la trasmissione. Una batteria al litio “decente” è in grado di fornire una corrente di 5C, dove C è la capacità nominale, quindi con una cella da 1200mA posso chiedere spunti di 6A e così per l’alimentazione sono a posto. Per ricaricare la batteria, quando questa si scarica, ho costruito un piccolo circuito utilizzando un modulino che si trova on-line “a due lire” ed ho modificato la resistenza di programmazione per avere una corrente di ricarica di 350mA circa.

charger

Il carica-batteria per una cella da 3.7V tipo AA (14500)

Sistemata la sezione di alimentazione, ho visto che il manuale parlava di come uscire da situazioni di blocco software del modulo. Una parte della procedura si può tentare da comandi AT, ma in casi di emergenza, il costruttore consiglia di togliere alimentazione al modulo e ripartire da zero. Allora ho deciso di costruire uno switch controllabile da una linea del convertitore USB-TTL che userò come porta seriale dal PC al modulo. Ho usato un doppio mosfet P-N in single chip, anch’esso comprato on-line. Regge tranquillamente la corrente richiesta e viene attivato o disattivato dalla linea DTR che è controllabile tramite il mio software. Se non si necessita di tale “sofisticazione”, basta usare uno switch “a mano”.

Lo schema elettrico dello switch ON/OFF per l’alimentazione del modulo

Ora, l’ultima cosa rimasta è l’interfaccia seriale. Il convertitore USB-TTL che ho usato (sì, anche questo comprato on-line) è basato sul chip CP2102 ed ha, oltre ai soliti TXd e RXd anche i vari segnali di controllo, tra i quali le uscite DTR e RTS. L’uscita DTR l’ho usata per lo switch, mentre la RTS è inutilizzata, però nel programma di controllo (vedi sotto) c’è un checkbox per controllarne lo stato via software. Il modulo ha tutto il proprio I/O alimentato a 2.85V e il manuale avvisa chiaramente che superando i 3.3V si rompe. Oltre a questo, dallo schema interno si vede che i diodi di protezione portano un eventuale positivo presente su un pin fino in cima alla catena di alimentazione, mantenendo il modulo “parzialmente alimentato” anche in mancanza di Vbat, in una condizione in cui potrebbe “resettarsi male”. Per questa ragione ho usato il circuito consigliato (diodo e resistenza di pull-up verso VccIO) per la linea di ricezione dati. Infatti, se si spegne il modulo, la linea di TX del convertitore USB-TTL continua ad “iniettare” 3.3V sull’uscita. Se avessi solo messo una resistenza, questa tensione sarebbe entrata nel modulo andando ad alimentare (parzialmente) il circuito. Così, invece, il diodo non la lascia passare. Ho usato un BAT43, uno Schottky, perché a 2mA ha un drop di circa 300mV, abbastanza basso. La linea VccIO del modulo tira fuori 2.85V, ma con una corrente max di 3mA. La pull-up di 4K7 è abbondantemente “a specifiche”. L’unica cosa un po’ critica, in questa configurazione, è che i fronti di salita del segnale seriale sono un po’ lenti, dato che dipendono dalla capacità del pin di input e dalla resistenza di pull-up. Il modulo “nasce” con una velocità di trasmissione di 115200 BPS, che significa che ogni bit è “largo” circa 8.7 microsecondi ; un fronte di salita lento potrebbe, randomicamente, provocare un errore nei dati. La soluzione è quella di fornire al modulo il comando per abbassare questa velocità e salvare la nuova impostazione nella configurazione interna. Io uso quasi sempre i 19200 BPS, perché per applicazioni tipo SMS vanno più che bene e le possibilità di errori dovuti a fronti lenti si riducono enormemente.
Per la parte di trasmissione del modulo, ho messo come interfaccia solo una resistenza di protezione da 470 Ohm. E’ da notare che il convertitore USB-TTL che ho usato ha una strana serigrafia: il pin dove c’è scritto TXD non è quello di trasmissione, ma quello di ricezione ! Lo stesso vale per il pin RXD. In pratica, l’allegro ingegnere che ha progettato il circuito ha inteso dire: “questo Pin lo devi collegare a TXD” e non: “questo Pin è TXD”. Una filosofia strana, ma si sa come son fatti gli ingegneri… Fate attenzione, quindi, a non scambiare i Pin, altrimenti non funzionerà. Comunque, un piccolo dispositivo facile-facile per testare il pin di uscita (TXD) è composto da un led rosso e una resistenza da 470 Ohm in serie. Mettete il catodo del led sul pin da testare (TXD) e la resistenza su 3.3V. Con un programma di terminale (o con il mio presente più sotto) inviate un comando; se il led si illumina, il pin TXD è l’uscita, altrimenti provate spostando il catodo del Led sul pin RXD. Quello che fa illuminare il led è il segnale di uscita.
Ora, veniamo al kit. Ho montato il circuito stampato che è arrivato insieme al modulo M590, ma ho apportato qualche modifica, come in figura:

Il kit montato; lato connettore sim

Il kit montato; lato connettore sim

Sullo stampato sono evidenziate le piccole modifiche: ho innanzitutto saldato tra i pin Vbat e Gnd due condensatori (SMD), uno da 100nF e l’altro da 22pF. Servono per filtrare un po’ i disturbi ad alta frequenza sull’alimentazione. Ho poi saldato una resistenza da 4K7 tra il pin RXD (7) e VccIO (6). Questa è la resistenza di pull-up a cui si collegherà l’anodo del diodo BAT34. Il diodo l’ho montato sull’altro circuito (a sinistra) dove ci sono anche lo “switch” e il convertitore USB-TTL. Ho infine cambiato i led, usandone due in package 1206 (uno rosso e uno verde) ed ho cambiato le relative resistenze. Per il led rosso ho usato una resistenza da 1K e per il verde una da 470 Ohm. Con un biadesivo ho poi fissato il portapile per la batteria da 3.7V, in modo da tenere tutto vicino. Il circuito millefori dove c’è il resto del circuito è collegato tramite i soliti cavetti tipo Dupont. Dall’altra parte del CS c’è il modulo M590 e il connettore con i vari segnali. Ho eliminato il condensatore elettrolitico da 470uF e al posto del diodo ho messo un ponticello. In questo modo, il circuito funzionerà con la tensione di batteria.

Il kit montato; lato modulo M590

Il kit montato; lato modulo M590

E’ da notare che le celle ricaricabili al litio da 3.7V, una volta a piena carica forniscono una tensione di 4.2V e arrivano a 3.7V solo quando è rimasta una carica residua di circa il 10%. Una batteria non deve MAI scendere sotto i 2.85V, pena la perdita della proprietà di ricaricarsi. In ogni caso, alimentando il modulo con la batteria, vi accorgerete subito di quando questa si sta scaricando, perché dalla seriale comincerete a ricevere, ogni 3/4 secondi, il prompt MODEM:STARTUP, che indica che c’è stato un reset automatico. Quando la tensione scende sotto i 3.3V, c’è il reset automatico; poi il modulo prova a ripartire e appena va in trasmissione la tensione cade perché c’è un alto assorbimento e così si resetta tutto e ricomincia. Quando arrivate a questa situazione, prendetevi una pausa, mettete la batteria a ricaricare e andate a fare una passeggiata.

Arriviamo, infine, al programma di test. Questo è praticamente uguale a quello presentato per le prove del modulo WiFi ESP-01 (vedi http://ficara.altervista.org/?p=3158), ma ha pre-registrati altri comandi utili per il modulo M590, più i controlli per le linee DTR e RTS. Questi controlli, ovviamente, funzionano solo quando la porta COM è stata aperta con il comando Open. I moduli M590 comprati on-line, si vede chiaramente, sono dissaldati da uno stampato. Io credo che qualcuno abbia comprato uno stock di vecchie schede (migliaia di vecchie schede) ed abbia smontato i modulini, poi abbia fatto fare dei PCB “base” trovando così il modo di vendere la “roba vecchia” sul mercato (vastissimo, ormai) degli appassionati. Però, siccome il modulo è stato dissaldato (i miei tre, sebbene di diversi fornitori, sono tutti così) non è detto che risponda ai comandi con il settaggio “di default” a 115200 BPS. Nel mio caso, il primo che ho provato era “settato” a 38400 BPS. Io, nel mio programma, ho fissato come default 19200 BPS, perché ho già spiegato che è quello che uso più spesso. In ogni caso, fate diverse prove con velocità standard e aspettate di leggere sulla finestra dei messaggi il fatidico: MODEM:STARTUP. Ecco la schermata del programma in funzione:

Lo screenshot del programma in funzione

Lo screenshot del programma in funzione

Nell’esempio mostrato, usando i primi 4 comandi di fila, si è inviato uno SMS. Eccolo come è apparso, immediatamente, sul telefono a cui era destinato:

SMS ricevuto !

SMS ricevuto !

Il programma AT-M590 è un eseguibile puro, non ha bisogno di installazione. Per le istruzioni leggere l’articolo precedente (http://ficara.altervista.org/?p=3158), è tutto uguale. I checkbox DTR e RTS, una volta cliccati (con la COM PORT aperta) provocano il cambio di stato delle relative linee, e sulla finestra dei messaggi compare lo stato logico della linea (3.3V o Gnd). Il file zippato può essere scaricato da questo link. Per scompattare lo zip verrà richiesta una password; questa è: eficara.

Una volta scaricato il file, prima di scompattarlo, verificate che il suo hash MD5 sia: 978903344C7E65C33963E8F9983EE0A1 (vedi Links utili: Hashtab). Questo vi darà la certezza di aver scaricato il file originale, senza errori.

Buona sperimentazione !

AT-commands tool

Aggiornamento – 23 Lug 2016:
– modificato segnalatore inizio commento da // a ;; (per comandi includenti http:// ecc.)
– migliorata fase apertura/chiusura porta seriale
– eliminato invio automatico “AT” e attesa ricezione “OK” all’apertura porta COM
Il nuovo file eseguibile zippato è disponibile a questo link..
La password per scompattare lo zip è: eficara.
Il checksum MD5 è: F98FA8CBBD03F3D9A4E2C222306A111E

Ho deciso di modificare il programma scritto per fare delle prove con il modulo ESP-01, già descritto in un precedente post, perché mi sono trovato ad utilizzare dei modulini low-cost GSM-GPRS per l’invio di SMS. Entrambi i moduli M590 e SIM800 hanno, come di consueto, una serie di comandi AT, così come l’ESP8266. Ho quindi fatto delle aggiunte che dovrebbero rendere lo strumento più comodo ed efficace. Qui sotto potete vedere uno screenshot del programma in funzione.

Atool-ssPer prima cosa ho modificato il nome del programma, cambiandolo da Tool_ESP8266 a ATool, anche perché ho visto che di programmi chiamati “Tool_ESP8266” ce ne sono in giro davvero tanti ! Poi, ho fatto le seguenti modifiche e aggiunte:

Variazioni e aggiunte:

  • modificata default speed da 115200 a 9600 BPS
  • Aggiunti al file save / load anche i valori di COM e SPEED. Il comando load chiude anche la porta seriale, se era aperta; si dovrà quindi eseguire di nuovo un “open”.
  • Aggiunte altre 3 linee di comando, così passano da 9 a 12
  • Modificato il funzionamento dei “send”. Non mandano più un CR-LF a fine stringa
  • Aggiunta possibilità di costruire caratteri di controllo tramite il segno ^. Il carattere successivo a ^ viene calcolato con & 0x1F, permettendo quindi di inserire nella riga programmata vari tipi di caratteri di controllo. Per esempio, ^M verrà trasmesso come 0x0D (CR) e ^J come 0x0A (LF). Con questo sistema si potrà decidere come terminare le stringhe da inviare sulla seriale ed inserire altri caratteri di controllo necessari, ad esempio, nella trasmissione di SMS.
  • Aggiunto un box che indica la lunghezza della stringa nella riga che si sta modificando. La lunghezza non tiene conto dell’eventuale commento // e conta i caratteri di controllo (ad es. ^M) come un singolo byte. Questo è molto utile quando ci sono dei comandi in cui va inserita la lunghezza del pacchetto da trasmettere.
  • Modificato il funzionamento della finestra dei messaggi per la visualizzazione di messaggi da parte del dispositivo collegato anche se la stringa in arrivo non è terminata da CR o LF.

Il programma è stato scritto in FreeBasic, con l’IDE Firefly for FreeBasic. Entrambi i programmi sono disponibili gratuitamente presso i rispettivi siti (vedi colonna a destra della pagina Home, Links utili). Nell’immagine del programma in funzione è possibile vedere come si è ricevuto il testo di una pagina internet, inviando (dopo aver effettuato le fasi preliminari) i comandi AT-CIPSTART= e successivamente AT+CIPSEND= e quindi la stringa GET / . Il file scaricabile liberamente ATool.zip contiene l’eseguibile puro, non c’è bisogno di installazione. Scompattate lo zip in una directory (ad esempio: /downloads/tools) e potrete utilizzarlo immediatamente. Per scompattare lo zip serve una password che è: eficara. Per eseguire il comando “save” è necessario disporre dei permessi di scrittura nella cartella dove risiede l’eseguibile. Se avete scompattato l’eseguibile in una cartella in cui l’utente ha i diritti di scrittura, non c’è problema, altrimenti dovrete eseguire il programma come amministratore. Prima di scompattare lo zip, però, verificatene l’hash MD5: C1BC15FF6CF4A0E77B7661A08DCAD1F0. Se non corrisponde, non scompattate il file, potrebbe essere corrotto o non essere quello originale. Per il calcolo dell’hash MD5 io uso il programma freeware HashTab che può essere scaricato dal sito del produttore (vedi Links utili) e si integra nella Shell di Windows. In pratica, dopo averlo installato, quando cliccherete col destro su un file, tra le “proprietà” ci sarà anche lo strumento per calcolare l’Hash. Questo programma è molto comodo anche per verificare che i files copiati su supporti rimovibili siano esattamente uguali a quelli di origine. Vedrete così quanti errori ci possono essere nelle copie eseguite su memorie di massa USB di basso costo !

Per il momento è tutto. Buona sperimentazione !