[Risolto] Non riesco ad inviare SMS con modulo modulo SIM808

quindi riassumendo:
con l'ultimo programma tu riesci a mandare gli SMS dal PC usando arduino come ponte
invece dando gli stessi comandi da arduino invece che da PC, con gli stessi collegamenti non ti riesce
ho capito giusto?
a parte che prima usavi 2 e 3, ma va bene, non cambiare più la configurazione, questa va e questa teniamo
aspetta che penso un poco...

si hai capito bene quello che mi succede

Porta pazienza, ma devo fare alcune domande
esattamente, ma esattamente esattamente, cosa spedisci dal PC, col programma che va?
descrivimi la sequenza delle cose che fai
ah, una domanda
ma perchè non trasmetti il CTRL-Z finale? non c'è nel tuo listato

quando uso il terminale seriale invio:
AT+CMGF = 1
AT+CMGS="+39il mio numero"
il testo del messaggio
e poi ctrl-Z

sì, ma intendevo quando tenti di scriverlo da Arduino, li non ho trovato traccia del CTRL-Z, metti un CTRL-[

si l'ho messo mySerial.write((char)0x1D);

0x1D?
io ricordavo 0x1A
comunque il debug è semplice, basta che fai mandare al PC, via seriale, tutto quello che ti risponde il modulo
come hai fatto per il programma che funziona,
così sai dove si impianta........

provo a fare come mi hai detto

OK, io tra poco vado a nanna
fammi sapere

ho provato ma non funziona ancora l'unica cosa che ho notato è che quando digito io direttamente i comandi la scheda risponde con ok quando lo fa il sw non risponde e non manda nulla comunque ora stacco anche io vado a nanna

kchessa:
ho provato ma non funziona ancora l'unica cosa che ho notato è che quando digito io direttamente i comandi la scheda risponde

metti qui il programma che vediamo

ecco il codice

#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);

  

 }

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ù

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

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

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.

Finalmente sono riuscito ho riscritto tutto e d ora funziona sbagliavo in molto punti.
Allego il codice

#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()
{

}

Bravo
in pratica hai fatto più o meno come ti avevo detto
tempo per i comandi e Ox1A
è tuo il mio sessantottesimo Karma?

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.