[RISOLTO] Modulo GSM SIM900 non comunica.

E cosi sono arrivato al mio primo post nella comunità ita arduino.

Mi è arrivato questo modulo che devo collegare a un sistema di controllo per due pompe sommerse per pozzetti di raccolta acque.

il sistema prevede degli allarmi e l'invio di SMS in caso di guasti.

ho provato a collegarlo ad arduino ma non riesco ancora a farlo funzionare.

  • ho collegato tx e rx rispettivamente a rx e tx, pin 0 e 1 (una eventuale inversione danneggia qualcosa?)

  • il sync led lampeggia una volta ogni 3 secondi (sembra quindi agganciato alla rete)

  • e infatti il modulo risponde alle chiamate entranti

  • ho provato a uplodare un codice per invio sms, ma non va.
    il monitor dopo un po comincia cercare la comunicazione cominciando dal bit rate piu basso e salendo arrivato al massimo da errore, dice che "il modulo non risponde", e dice "status IDLE"

  • inoltre non esiste un manuale che spieghi a cosa servono quei tre jumpers

non riesco a trovare informazioni che non riguardino gli shields, ma questo non è uno shield.

se qualcuno riesce a darmi qualche indicazione... non vorrei aver buttato 20 euri. :o

vagus

sembra un problema di assegnazione dei pin di comunicazione. Infatti ho provato qualche codice e , poichè ho dei relè collegati su altri pin, questi scattano. E' possibile che queste library utilizzino pin diversi dall' 1 e lo 0?

è probabile che si usa una seriale emulata via software per non usare i pin 0 e 1. Questo é facilmente controllabile perché viene inclusa la libreria per la seriale software.

Ciao Uwe

uwefed:
è probabile che si usa una seriale emulata via software per non usare i pin 0 e 1. Questo é facilmente controllabile perché viene inclusa la libreria per la seriale software.

Ciao Uwe

viene inclusa? dove? io sto provando codice e librerie presi qua e la’…

incluso nello sketch di esempio.
Ciao Uwe

  • inoltre non esiste un manuale che spieghi a cosa servono quei tre jumpers

I tre jumper del connettore P2 sono indicati sullo schema elettrico: in pratica collegano i due segnali TX ed RX del processore SIM900 al resto del circuito e sono per solo scopo di debug.

Lo schema presenta altre parti che non sono presenti sulla tua scheda, ad esempio un connettore DB9 per il collegamento in RS232 con il PC ed il relativo adattatore TTL/RS232, un sezione di alimentazione da 12V 2A a 5V ed altro.

Per di più i commenti sono in giapponese!

Per fortuna il modulo comunica in TTL usando lo standard AT usato da altri moduli che usano il SIM900.

Ti ricordo che l'alimentazione del modulo richiede parecchia corrente (almeno 1A meglio 2A) a 5V, quindi è da scartare l'utilizzo dei 5V di Arduino e devi usare un alimentatore esterno.

@uwefed

il problema è che io ho liberi a disposizione solo i pin 0123, il resto sono tutti occupati da hardware vario di controllo, anche gli ingressi analog.

quale file dovrei modificare? poi ho notato che i file *.cpp se vado in edit molti non hanno il CR a fine riga per cui è tutto un continuum quasi illeggibile. E' normale sta roba?

@cyberhs

grazie per i jumpers, avevo dato un'occhiata veloce e mi era sfuggito. (cmq i commenti sono in cinese :stuck_out_tongue: )

per l'alimentazione parto con un 12V switching da 5A (ho esagerato ma al momento ho solo quello) che entra in arduino, poi "spillo" i 5V con uno SD converter regolato a 5V 3A alimento separatamente il modulo GSM.

Ma il problema è farlo comunicare attraverso i PIN GIUSTI, secondo voi puo' essere utile questo

se io partissi dal codice precaricato tipo

quali librerie dovrei modificare per i pin di comunicazione? GSM.cpp o sms.cpp o sim900.cpp...

...

Dovresti adoperare una libreria per SIM900, poiché la shield ufficiale usa un M10.

http://www.gsmlib.org/

dr_vagus:
@uwefed

il problema è che io ho liberi a disposizione solo i pin 1234, il resto sono tutti occupati da hardware vario di controllo, anche gli ingressi analog.

quale file dovrei modificare? poi ho notato che i file *.cpp se vado in edit molti non hanno il CR a fine riga per cui è tutto un continuum quasi illeggibile. E’ normale sta roba?

Usa un altro editore come per esempio notepad++
Non so cosa stai facendo se non vedo lo sketch.

Ciao Uwe

il problema è che non ho uno sketch perchè non so esattamente da quale partire. Ne ho provati un paio al volo per il SIM900 ma appunto non funzionano. :smiley:
Poi tutti parlano di shields, e il mio nn è tale. L'ho scelto apposta...

riprovo a partire dalla lib indicata da cyberhs (che già avevo scaricato). Vediamo che dice poi ci sentiamo.

Allora prendi uno degli esempi e parti da qullo per arrivare ad un esempio funzionante.
Condividi lo sketch e lo schema elettrico e poi vediamo se possiamo aiutarti.
Ciao Uwe

allora. Prima prova
ho installato questa lib

e ho caricato questo example GSM-GPRSLibrary_SMS

codice

#include "SIM900.h"
#include <SoftwareSerial.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"

//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;

//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 send and receive SMS.

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

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) {
          //Enable this two lines if you want to send an SMS.
          //if (sms.SendSMS("3471234567", "Arduino SMS"))
          //Serial.println("\nSMS sent OK");
     }

};

void loop()
{
     if(started) {
          //Read if there are messages on SIM card and print them.
          if(gsm.readSMS(smsbuffer, 160, n, 20)) {
               Serial.println(n);
               Serial.println(smsbuffer);
          }
          delay(1000);
     }
};

il modulo si aggancia , carico il codice
messaggio errore

Arduino: 1.6.4 (Windows 7), Board: "Arduino Uno"

Sketch uses 9,636 bytes (29%) of program storage space. Maximum is 32,256 bytes.

Global variables use 927 bytes (45%) of dynamic memory, leaving 1,121 bytes for local variables. Maximum is 2,048 bytes.

avrdude: stk500_loadaddr(): (a) protocol error, expect=0x14, resp=0x00

avrdude: stk500_paged_load(): (a) protocol error, expect=0x14, resp=0x00

avrdude: stk500_cmd(): programmer is out of sync

Problem uploading to board.  See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.

un disastro. meglio un altra libreria che avevo scaricato (nel prossimo post)

seconda prova
scarico altra lib da qui
http://educ8s.com/Arduino/SMS/

(da questo video di questo simpatico signore: Arduino Tutorial: GSM/GPRS SHIELD (SIM900) SMS Send and Receive Tutorial on Arduino Uno - YouTube)

installo libreria (mi pare la stessa identica all’altra)

carico il codice indicato dal tizio, che poi è quello che mi serve: inviare SMS di allarme.

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

char sms_position;
char phone_number[20];
char sms_text[100];
int i;

void setup()
{
    Serial.begin(9600);
    
    if (gsm.begin(9600)) 
    {
        Serial.println("\nstatus=READY");
        started=true;
    } 
    else 
        Serial.println("\nstatus=IDLE");

    if(started) 
    {
        if (sms.SendSMS("+300000000000", "Arduino SMS"))
        {
          Serial.println("\nSMS sent OK.");
        }
        else
        {
          Serial.println("\nError sending SMS.");
        }      
    }
};

void loop()
{
    if(started) 
    {
        sms_position=sms.IsSMSPresent(SMS_UNREAD);
        if (sms_position) 
        {
            Serial.print("SMS postion:");
            Serial.println(sms_position,DEC);
            sms.GetSMS(sms_position, phone_number, sms_text, 100);
            Serial.println(phone_number);
            Serial.println(sms_text);
        }      
        delay(2000);
    }
};

mi da errore

Sketch uses 10,258 bytes (31%) of program storage space. Maximum is 32,256 bytes.
Global variables use 913 bytes (44%) of dynamic memory, leaving 1,135 bytes for local variables. Maximum is 2,048 bytes.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

apro il monitor e leggo


GSM Shield testing.
DB:NO RESP
DB:NO RESP
DB:NO RESP
Trying to force the baud-rate to 9600

1200
2400
4800
9600
19200
38400
57600
115200
ERROR: SIM900 doesn’t answer. Check power and serial pins in GSM.cpp

status=IDLE


e finisce cosi.

vediamo sto “GSM.cpp”… con l’editor giusto…

tuttavia a che serve entrare in GSM.cpp se il codice non ne fa l'include?

Se ti da questi:

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

Vuol dire che NON ha caricato il programma su Arduino.
Inutile vedere il serial monitor, stai vedendo l'ultimo sketch caricato, non questo. :o

Nessuno di quegli errori delle due librerie è un problema di compilazione. Tutte e due le librerie te le COMPILA. Quello che non riesce a fare il PC è a caricare il programma su Arduino perchè secondo me hai collegato qualcosa su RX/TX.

dr_vagus:
tuttavia a che serve entrare in GSM.cpp se il codice non ne fa l'include?

Sbagli affermazione. Hai aperto SIM9000.h ? Quello a sua volta chiama gsm.h e quindi gsm.cpp

si sulla 0 e 1 ho collegato TX e RX del modulo, e quindi va in conflitto con l'USB, giusto?

il problema che ho tutti gli altri pin occupati, tranne il 2 e 3.

entrambi gli sketch usano il serialsoftware... dunque dovrei editare questo per scegliere i due pin di comunicazione?

FUN-ZIO-NA!

ehm vabbe alla fine era una scemenza, non sapevo che i pin 1 e 0 fossero usati anche per USB...

in questo caso mi sono rimasti i pin 2 e 3 (prima ho scritto per errore 3 e 4 )

La libreria da modificare in caso è proprio la GSM.cpp, ove sono fissati per default i PIN 2/3 che vanno collegati a TX e RX sul modulo (come indicato nel file, senza inversioni).

Mi rimane il dubbio sull'utilizzo corretto dei pin 0 e 1, se sono usati per la USB potrebbero creare problemi ...

Grazie per le risposte mi sono state tutte utili.