Invio SMS con sim800l

Ciao a tutti,
ho comprato una scheda sim800l con la quale volevo inviare dei messaggi da arduino, prima di scrivere un software sto cercando di farla funzionare tramite messaggi AT.
per inviare un sms utilizzo i seguenti messaggi:

AT+CMGF=1
AT+CMGS=+3*********0

testo.....

ma una volta arrivato qui non capisco come dire alla scheda che il messaggio è finito, ho già cercato su internet e ho trovato che il carattere di fine messaggio è ctrl-z o 1A o 0x1A, ma non capisco come inviarlo alla scheda dato che lei li interpreta ovviamente come testo e non come caratteri di fine messaggio.

Sono in alto mare...

Grazie e buona giornata!

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

In merito al tuo problema ...
... devi effettivamente mandare 0x1A seguito da \r\n per concludere ed inviare l'SMS.

Guglielmo

Ti ringrazio infinitamente per la risposta, proverò appena posso! Grazie mille

axel1999:
Ti ringrazio infinitamente per la risposta, proverò appena posso! Grazie mille

SI, ma intanto provvedi a fare quanto ti è stato chiesto nel post #1 ... Grazie.

Guglielmo

Ho fatto più prove ma nonostante tutto viene (il carattere di fine messaggio) interpretato dal modulo gsm come un messaggio di testo da includere nell'sms e non come un carattere di fine messaggio

Scusa la domanda sciocca, ma ... invii il singolo carattere di valore 0x1D vero ? ... non è che invii "0x1D" eh ? ? ?

Guglielmo

lo invio senza virgolette

Non ci siamo capiti ...

char EOT = 0x1D;

e poi devi inviare la variabile EOT ovvero UN carattere che contiene il valore esadecimale 0x1D !!!

Guglielmo

non capisco, devo inviare il carattere di fine messaggio (0x1D) e poi cos'altro? ox1D è l'equivalente di crtl-d giusto?

Inviando qualsiasi cosa tramite terminale il modulo la interpreta come testo e non come comando...
sarò scemo io ma non capisco :frowning:

Non so se l'emulatore di terminale è in grado di trasmettere i caratteri di controllo ... è piuttosto limitato ...

Io parlo sempre di inviarlo da programma, non dal terminale ... ::slight_smile:

Guglielmo

int inLet = 0;
int inLet1 = 0;

void setup() {
  
  Serial.begin(19200);
  
  delay(8000);

  Serial.println("inizio");
  Serial.println("AT+CMGF=1\r\n");
  delay(1000);
  if (Serial.available()){      // per verificare che il modulo risponda con OK-comando valido-
    inLet = Serial.read();
      if (inLet == "O");{
        inLet1 = Serial.read();
        if (inLet == "K");
        Serial.print ("AT+CSMP=17,167,0,16 \r\n");
        delay(1000);
      }
  }
  Serial.println("AT+CMGS=\"+393771491570\" \r\n");
  delay(1000);
  Serial.print("Prova TXT \r\n");
  delay(1000);
  Serial.print(char(26));
  delay(1000);
}

void loop() {

}

questo è il codice che dovrebbe funzionare; ma non funziona... :frowning:

... non mi meraviglia ... 0x1D == 29 in decimale, NON 26 e poi devi comunque farlo seguire da \r\n.

Guglielmo

P.S.: Poi mi spiegherete che gusto c'è a trasformare in decimale i valori hex con ... gli sbagli che ne conseguono. Non è più facile scrivere Serial.write(0x1D); ?

Se vi aggrada ho scritto un Terminale molto tempo fa che permette di comporre testi includendo caratteri speciali non visibile come il CTRLZ per la terminazione degli SMS Lo usavo 10-12 anni fa proprio nello sviluppo e test con modem GSM.
Pterminal, basta cliccare sul file EXE

Grazie icio, io sia su macOS, che su l'unico Win di test che ho, uso CoolTerm, ma scarico sicuramente anche il tuo per provarlo. :wink:

Guglielmo

Non è niente di che, mi serviva e invece di perdere giornate intere per trovarne uno che funzionasse per quello che mi serviva ne ho scritto uno che ho fatto prima