Go Down

Topic: [Risolto] Non riesco ad inviare SMS con modulo modulo SIM808 (Read 864 times) previous topic - next topic

kchessa

ecco il codice
Code: [Select]
#include <SoftwareSerial.h>
SoftwareSerial mySerial (10, 11);


void setup()
{
 
Serial.begin(9600);
mySerial.begin(9600);
Serial.print("Please enter AT command:");
//delay(100);
}
void loop(){




 
  mySerial.print("AT+CMGF=1\r\n");    //Sending the SMS in text mode);
  if (Serial.available()>0)
 mySerial.write(Serial.read());
 if (mySerial.available()>0)
 Serial.write(mySerial.read());


  mySerial.print("AT+CMGS=\"+393355608213\"\r\n");//The target phone number
   if (Serial.available()>0)
  mySerial.write(Serial.read());
  if (mySerial.available()>0)
  Serial.write(mySerial.read());
 
  mySerial.print("Prova TXT\r\n");
  if (Serial.available()>0)
 mySerial.write(Serial.read());
 if (mySerial.available()>0)
 Serial.write(mySerial.read());

 mySerial.write((char)0x1D);
   mySerial.write("\r\n");
 if (Serial.available()>0)
 mySerial.write(Serial.read());
 if (mySerial.available()>0)
 Serial.write(mySerial.read());
  delay(100);

 

 }   

Standardoil

così non andrà mai
non tratti correttamente i dati in arrivo dal modulo
non tieni una tempistica, spari tutti i dati senza attendere che il modulo risponda (anche se forse non serve, non so non ho quel modulo)
continui a non trasmettere il CTRL-Z, e non te lo dico più
Prima legge di Nelson (che sono io): fai le stesse cose sempre alla stessa maniera, quegli errori li hai già corretti

Non bado a studenti, che vadano a copiare da un'altra parte

Se io ti domando e tu non mi rispondi vuol dire che non ti serve più

Standardoil

Guarda, ti do un consiglio
c'è qui sul forum uno che ha fatto un allarme con un PIR e un modulo GSM
https://forum.arduino.cc/index.php?topic=613577.msg4158791#msg4158791
prova a vedere come fa lui, vedrai che ha una gestione delle seriali differente dalla tua, cerca di capire in cosa
Prima legge di Nelson (che sono io): fai le stesse cose sempre alla stessa maniera, quegli errori li hai già corretti

Non bado a studenti, che vadano a copiare da un'altra parte

Se io ti domando e tu non mi rispondi vuol dire che non ti serve più

kchessa

sto provando un comando alla volta e sono riuscito a ottenere l'ok dalla scheda ora stacco e vado a dormire

Moce993

#34
May 03, 2019, 11:33 am Last Edit: May 03, 2019, 12:51 pm by Moce993
Ciao,

ho utilizzato per un progetto il modulo sim800c che è molto simile e ho avuto anche io alcune difficoltà con la seriale.

Ma perché non usi una libreria dedicata ? tipo la TinyGSM che supporta anche il modulo che utilizzi te.

Come baudrate io ho trovato problemi con 9600 ed ho utilizzato 57600.

Poi ho visto che alimenti il modulo a 12V, quindi presumo che sulla scheda ci sia un regolatore di tensione che abbassa la tensione, perché se leggi sul datasheet la tensione di alimentazione va da 3,4V a 4,4V e loro consigliano di alimentarlo a 4V in realtà dalle prove che ho fatto già a 3,6V-3,7V la comunicazione con la seriale faceva quello che voleva.

Infine non sapendo come è fatta la scheda del modulo sim808 fai attenzione a come colleghi i pin della porta seriale, perché la seriale non è tollerante alla tensione di 5V ma al massimo 2,8V, sempre sul datasheet trovi anche svariati esempi di come collegare la seriale con MCU esterni.

P.S. mi è venuto pure in mente che volendo con quella libreria hai anche l'opzione di autobaud.

kchessa

Finalmente sono riuscito ho riscritto tutto e d ora funziona sbagliavo in molto punti.
Allego il codice
Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

void setup()
{
mySerial.begin(9600);  //inizializzazione porta seriale
mySerial.print("\r");
delay(1000);                    //aspetto che il modem risponda "OK"
mySerial.print("AT+CMGF=1\r");    //configuro per inviare SMS in formato testo
delay(1000);

mySerial.print("AT+CMGS=\"+39XXXXXXXXX\"\r");    //imposto il numero di telefono del destinatario
//Replace this number with the target mobile number.
delay(1000);
mySerial.print("Test!\r");   //il testo del messaggio
delay(1000);
mySerial.write(0x1A);  // Ctrl+Z finale
}

void loop()
{

}

Standardoil

Bravo
in pratica hai fatto più o meno come ti avevo detto
tempo per i comandi e Ox1A
è tuo il mio sessantottesimo Karma?
Prima legge di Nelson (che sono io): fai le stesse cose sempre alla stessa maniera, quegli errori li hai già corretti

Non bado a studenti, che vadano a copiare da un'altra parte

Se io ti domando e tu non mi rispondi vuol dire che non ti serve più

zoomx

Se vuoi migliorare il programma dovresti attendere l'OK che il modulo ti dovrebbe restituire per alcuni comandi e prima della trasmissione del messaggio controllare, con gli appositi comandi AT, che il modem sia ancora connesso alla rete.

Go Up