SIM800L EVB + Arduino UNO

Salve a tutti, lavoro con Arduino da un anno , solo da una settimana sto provando il modulo SIM800L EVB alimentato a 5V con alimentatore stabilizzato con disponibilità fino a 5 ampere e collegato correttamente ad Arduino Uno con i pin 10 e 11 come seriale ed i GND in comune, e provato il seguente sketch:

#include <SoftwareSerial.h>
SoftwareSerial sim(10, 11);
int _timeout;

String _buffer;

String number = "+39xxxxxxxxxx"; //-> change with your number

void setup() {
  delay(2000); 
  Serial.begin(115200);
  _buffer.reserve(50);
  Serial.println("Sistem Started...");
  sim.begin(9600);
  delay(1000);
  Serial.println("Type s to send an SMS, r to receive an SMS, and c to make a call");
}

void loop() {
  if (Serial.available() > 0)
    switch (Serial.read())
    {
      case 's':
        SendMessage();
        break;
      case 'r':
        RecieveMessage();
        break;
      case 'c':
        callNumber();
        break;
    }
  if (sim.available() > 0)
    Serial.write(sim.read());
}

void SendMessage()
{
  //Serial.println ("Sending Message");
  sim.println("AT+CMGF=1");			                //Sets the GSM Module in Text Mode
  delay(200);
  //Serial.println ("Set SMS Number");
  sim.println("AT+CMGS=\"" + number + "\"\r");  //Mobile phone number to send message
  delay(200);
  String SMS = "ciao da Arduino SIM800L";
  sim.println(SMS);
  delay(100);
  sim.println((char)26);		// ASCII code of CTRL+Z
  delay(200);
  _buffer = _readSerial();
}

void RecieveMessage()
{
  Serial.println ("SIM800L Read an SMS");
  sim.println("AT+CMGF=1");
  delay (200);
  sim.println("AT+CNMI=1,2,0,0,0");       // AT Command to receive a live SMS
  delay(200);
  Serial.write ("Unread Message done");
}
String _readSerial() {
  _timeout = 0;
  while  (!sim.available() && _timeout < 12000  )
  {
    delay(13);
    _timeout++;
  }
  if (sim.available()) {
    return sim.readString();
  }
}

void callNumber() {
  sim.print (F("ATD"));
  sim.print (number);
  sim.print (F(";\r\n"));
  _buffer = _readSerial();
  Serial.println(_buffer);
}

il tutto ha funzionato per qualche giorno, il modulo si connetteva alla rete correttamente con SIM Iliad (lampeggio del led NET ogni 3 secondi) riuscendo ad inviare gli SMS.
Ora non si registra più sulla rete ed il led di stato mi lampeggia una volta al secondo, inoltre provando uno sketch per inviare i comandi AT dal serial monitor pare non riesca più a colloquiare con il modulo GSM, da premettere che la SIM funziona perfettamente.

Qualcuno mi sa dire se la comunicazione seriale tra Arduino e il modulo GSM può comunque avvenire anche se il modulo non si registra sulla rete (lampeggio LED ogni secondo) ?

Grazie in anticipo per i vostri consigli

Buongiorno e benvenuto :slight_smile: ,

essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

... poi, in conformità al suddetto regolamento, punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE). Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

Non conosco il modulo specifico, ma ho utilizzato altri moduli basati su SIM800 e ... la risposta è SI.

Solo una cosa però ... io ricordavo che quei moduli volessero al massimo una tensione di 4.4V ... c'è sulla schedina che usi un regolatore?

Guglielmo

il modulo che uso è questo nelle foto :
sim 800L 02


ha già integrato un regolatore di tensione per cui può essere alimentato direttamente a 5V.

Quindi anche se il modulo non si connette alla rete dovrebbe rispondere ai comandi AT ?, proverò rivedere e rifare i collegamenti sulla breadboard ancora una volta anche se li ho ricontrollato più volte.

Grazie comunque per la tua risposta,

nel frattempo ho ordinato un secondo modulo per capire se questo si fosse guastato.

Magari è una considerazione banale, ma con breadboard cinesi mi è capitato che lo stesso modulo (nel mio caso HC12 ma credo che il ragionamento valga per tutti) funzionasse a volte sì e a volte no, senza toccare nulla. Probabilmente i contatti erano ballerini...

... no, no, non lo è affatto :+1:, io quei moduli NON sono mai riuscito a farli funzionare sulla breadboard perché, nel momento in cui si collegano alla rete, assorbono anche oltre 1.5A e ... con la breadboard non mi andavano!

Guglielmo

grazie,
terrò presente l'osservazione , proverò a collegare con i cavetti direttamente alla scheda arduino senza la breadboard appena possibile

Oggi ho provato a collegare il modulo direttamente con dei cavetti escludendo la breadboard ma ottengo lo stesso risultato, niente aggancio della rete e nessuna comunicazione seriale. Intanto mi è arrivato un nuovo modulo l'ho provato sostituendolo al precedente e tutto funziona perfettamente, prende la connessione e risponde ai comandi AT.
Il modulo precedente deve essere guasto, provo a renderlo al venditore.
Volevo inoltre sapere se qualcuno ha provato questo modulo accoppiato all'ESP32.