# SIM800 Reset hardware

**URL:** <https://forum.arduino.cc/t/sim800-reset-hardware/1389264>\
**Category:** Generale\
**Created:** [June 16, 2025, 3:16pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264 "2025-06-16T15:16:36Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![marco508286](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco508286/32/1128454_2.png) [@marco508286](https://forum.arduino.cc/u/marco508286)\
**Post date:** [June 16, 2025, 3:16pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/1 "2025-06-16T15:16:36Z")

</div>

Ho realizzato il progetto e il codice sotto riportato per l’invio e la ricezione di SMS, utilizzando:

SIM800L (blu), alimentata con 5V 4a;

Arduino Nano, alimentato con 5V 2a al pin +5V;

alimentazioni separate, con massa in comune.

Sia l’invio, sia la ricezione di SMS funzionano perfettamente se Arduino è collegato al serial monitor.

Se invece Arduino no è collegato al serial monitor, funziona unicamente l’invio.

La ricezione funziona solo se, dopo l’accensione del sistema, eseguo il reset hardware con il tastino. Così facendo, continua a funzionare regolarmente, fino allo spegnimento.

Al Nano ho messo il bootloader dell’Arduino Uno.

Ho provato anche ad inserire un condensatore elettrolitico tra reset e gnd e, in effetti, sembra faccia un reset all’accensione, ma il risultato non cambia.

Pensavo di usare watchdog per il reset, ma non ho ancora capito come fare a farlo una sola volta all’accensione.

```arduino
[code]
#include <SoftwareSerial.h>

#define CTRL_Z 26

#define intervallo 180000//Intervallo di tempo tra due letture(millisecondi)= 3 min
long previousMillis = 0; //Memorizza l'ultima volta che la sonda è stata letta

SoftwareSerial SIM800(2, 3); //SIM800L Tx & Rx is connected to Arduino #2 & #3

void setup() {
  pinMode(13, OUTPUT);
  pinMode(4, INPUT);
  Serial.begin(9600);
  SIM800.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  SIM800.println("AT");
  updateSerial();
  SIM800.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  SIM800.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  SIM800.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  SIM800.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  updateSerial();
}

int n = 0;
String ret = "";
bool LOOP = true;
int bt, prevbt;

void loop() {
  if (SIM800.available()) {
    char c = SIM800.read();
    if (c == '\n') {
      Serial.println("RX:" + ret + "#");
      if (ret == "Led on") {
        digitalWrite(13, HIGH);
        Serial.println("on");
      } else if (ret == "Led off") {
        digitalWrite(13, LOW);
        Serial.println("off");
      }
      ret = "";
    } else if (c == '\r') {
    } else {
      ret += c;
    }
  }
    if (millis() - previousMillis > intervallo)
  {
    bt = digitalRead(4);

    if (!prevbt && bt)
    {
      sendSMS();
      Serial.println("NO Energia Elettrica");
    }
 // prevbt = bt;
    delay(100);
    if (prevbt && !bt)
    {
      sendSMSok();
      Serial.println("Energia Elettrica OK");
    }
    delay(100);
    prevbt = bt;
    previousMillis = millis();
  }
}

void sendSMS()
{
  // AT command to set SIM800 to SMS mode
  SIM800.print("AT+CMGF=1\r");
  delay(100);
  updateSerial();
  SIM800.println("AT+CMGS=\"+39XXXXXXXXXX\"");
  delay(100);
  updateSerial();
  SIM800.println("NO Energia Elettrica");
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM800.println((char)26);
  delay(100);
  SIM800.println();
  // Give module time to send SMS
  delay(5000);
}

void sendSMSok()
{
  // AT command to set SIM800 to SMS mode
  SIM800.print("AT+CMGF=1\r");
  delay(100);

  SIM800.println("AT+CMGS=\"+39XXXXXXXXXX\"");
  delay(100);

  SIM800.println("Energia Elettrica OK");
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM800.println((char)26);
  delay(100);
  SIM800.println();
  // Give module time to send SMS
  delay(5000);
}
void updateSerial()
{
  delay(500);
  while (Serial.available())
  {
    SIM800.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (SIM800.available())
  {
    Serial.write(SIM800.read());//Forward what Software Serial received to Serial Port
  }
}
[/code]

```

Si accettano consigli, critiche e suggerimenti.

Grazie

Marco

---

<div class="post-metadata">

**Author:** ![UKHeliBob](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/ukhelibob/32/215663_2.png) [@UKHeliBob](https://forum.arduino.cc/u/UKHeliBob)\
**Post date:** [June 16, 2025, 3:17pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/2 "2025-06-16T15:17:12Z")

</div>

⚠  
Ti segnalo che, nella sezione in lingua **Inglese** , si può scrivere **SOLO** in **Inglese**... quindi, per favore, la prossima volta **presta più attenzione** in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella [sezione di lingua Italiana](https://forum.arduino.cc/c/international/italiano/50) ... la prossima volta potrebbe venire direttamente eliminato.  
Grazie.

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [June 16, 2025, 3:43pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/3 "2025-06-16T15:43:24Z")

</div>

@marco508286:

A quanto detto da **UKHeliBob** aggiungo ...

... so che sei un vecchio utente del forum, ma ... Non riesco a trovare il tuo post di "presentazione", per cui ... cortesemente, come prima cosa, leggi attentamente il [REGOLAMENTO](https://forum.arduino.cc/t/regolamento-come-usare-questo-forum/145566) della sezione **Italiana** del forum, (_... e, per evitare future possibili discussioni/incomprensioni, prestando sempre molta attenzione al punto 15_), dopo di che, come da suddetto regolamento (_punto 16.7_), fai la tua presentazione [NELL'APPOSITA DISCUSSIONE](https://forum.arduino.cc/t/re-presentazioni-nuovi-iscritti-fatevi-conoscere-da-tutti-part-2/) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

_P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. 😉_

---

<div class="post-metadata">

**Author:** ![marco508286](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco508286/32/1128454_2.png) [@marco508286](https://forum.arduino.cc/u/marco508286)\
**Post date:** [June 16, 2025, 5:13pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/4 "2025-06-16T17:13:23Z")

</div>

Sono Marco, ho 74 anni e ho da “sempre” la passione per l’elettronica. Una curiosità : mi sono diplomato in Elettronica industriale nel 1969 e all’esame di maturità c’erano le valvole!!!  
Poi ho fatto tutt’altro nella vita lavorativa, dopo una laurea in Economia e Commercio.  
Da quando sono in pensione mi sono appassionato al mondo Arduino e ho realizzato alcuni progetti di home automation.  
Prediligo la parte manuale, tipo progettazione e realizzazione pcb, ma ovviamente ho dovuto imparare le basi di programmazione. Comunque, vado molto di “copia e incolla” sfruttando quanto disponibile in Internet.

---

<div class="post-metadata">

**Author:** ![marco508286](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco508286/32/1128454_2.png) [@marco508286](https://forum.arduino.cc/u/marco508286)\
**Post date:** [June 18, 2025, 12:32pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/5 "2025-06-18T12:32:53Z")

</div>

Ho risolto il mio problema.

Era una banalità, forse, ma la riporto ugualmente nel caso possa essere di aiuto a qualcun altro dilettante come me.

Verificato che il tutto funzionava resettando Arduino con il pulsantino o aprendo il serial monitor, in pratica quindi rifacendo il setup a sistema alimentato, ho semplicemente inserito un delay nel setup del codice.

Adesso funziona sia in trasmissione, sia in ricezione SMS.

Il nuovo setup :

```arduino
[code]
#include <SoftwareSerial.h>

#define CTRL_Z 26

#define intervallo 180000//Intervallo di tempo tra due letture(millisecondi)= 3 min
long previousMillis = 0; //Memorizza l'ultima volta che la sonda è stata letta

SoftwareSerial SIM800(2, 3); //SIM800L Tx & Rx is connected to Arduino #2 & #3

void setup() {
  pinMode(13, OUTPUT);
  pinMode(4, INPUT);

  delay(7000);
  
  Serial.begin(9600);
  SIM800.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  SIM800.println("AT");
  updateSerial();
  SIM800.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  SIM800.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  SIM800.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  SIM800.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  updateSerial();
}

int n = 0;
String ret = "";
bool LOOP = true;
int bt, prevbt;

void loop() {

}
[/code]

```

Scusate se ho fatto perder tempo, ma ci sono arrivato dopo un numero considerevole di prove.  
Saluti a tutti  
Marco

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [December 15, 2025, 12:33pm UTC](https://forum.arduino.cc/t/sim800-reset-hardware/1389264/6 "2025-12-15T12:33:25Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
