officinasottocasa › Elettronica
Guida completa modulo GSM SIM800L
La guida in italiano al modulo GSM SIM800L: come alimentarlo davvero, il punto dove quasi tutti si arenano; i pin, lo schema dei collegamenti con Arduino UNO ed ESP32, cosa vuol dire il LED, i cinque comandi AT per controllarlo, l’invio di un SMS e lo sleep. Con i problemi più comuni e come risolverli, e se il 2G in Italia si può ancora usare.
di Alessandro Grassi · · aggiornato il · 21 minuti di lettura
In breve
- Che cos’è: un modulo GSM/GPRS di SIMCom, quad-band (850, 900, 1800 e 1900 MHz). Invia e riceve SMS, fa chiamate e trasmette dati, comandato con i comandi AT su una porta seriale.
- Alimentazione: da 3,4 a 4,4 V, con picchi fino a 2 A. Mai dal pin 5 V o 3,3 V di Arduino: noi usiamo uno step-down LM2596 regolato a 4,2 V.
- Livelli logici: 3,3 V. Con Arduino UNO, che lavora a 5 V, sul pin RXD del modulo serve un partitore (10 kΩ e 20 kΩ).
- Rete: solo 2G. In Italia il 2G è ancora acceso e nessun operatore ha fissato una data definitiva per spegnerlo (ottobre 2026).
- SIM: va bene anche una SIM venduta come 4G o 5G, se l’operatore ha ancora il 2G nella vostra zona; con il PIN disattivato.
- LED: un lampeggio al secondo vuol dire che cerca la rete, uno ogni 3 secondi che si è registrato.
Cosa fa il modulo SIM800L
- comunica in rete GSM/GPRS (chiamate voce, SMS, dati) tramite una normale SIM card;
- dialoga con un microcontrollore, per esempio un Arduino UNO, via seriale, con un semplice set di comandi AT testuali;
- entra in una modalità a basso consumo (sleep) e ne esce su comando, utile nei progetti alimentati a batteria;
- segnala con un LED integrato lo stato della connessione alla rete, senza bisogno di leggere la seriale.
Confessiamo che non è il primo dispositivo che progettiamo con questo modulo: in passato ci eravamo sempre arenati senza riuscire a farlo funzionare. Stavolta abbiamo passato molte ore a studiare e a fare prove, fino al risultato sperato. Nei forum abbiamo visto che in molti hanno avuto i nostri stessi problemi, e in italiano si trova poco: per questo abbiamo raccolto qui tutto quello che abbiamo imparato. Lo usiamo nell’allarme GSM per batteria scarica e nel monitor dei blackout via SMS.
Il 2G in Italia: si può ancora usare?
Sì. Il SIM800L usa solo la rete 2G (GSM e GPRS): non sa usare né il 4G né il 5G, e nemmeno il 3G. In Italia il 3G è già stato spento (Vodafone nel 2021, TIM nel 2022, WindTre alla fine del 2025), mentre il 2G è ancora acceso: gli operatori lo tengono per le chiamate dove manca il 4G e per i tanti dispositivi che lo usano, come allarmi, contatori, POS e ascensori.
A ottobre 2026 nessun operatore italiano ha fissato una data definitiva e vincolante per lo spegnimento del 2G; se ne parla per la fine del decennio (tlcworld.it). All’estero in molti paesi il 2G è già spento o lo sarà presto: se il vostro progetto deve funzionare fuori dall’Italia, controllate prima.
Tre conseguenze pratiche:
- la SIM: il tipo di SIM non conta, anche se è venduta come 4G o 5G. Conta che l’operatore (o quello su cui si appoggia, per gli operatori virtuali) abbia il 2G nella zona in cui userete il modulo;
- la copertura: dove il 2G è debole, il modulo fatica a registrarsi. Il comando
AT+CSQ(più avanti) dice quanto è forte il segnale; - il futuro: per un progetto nuovo che deve durare molti anni conviene valutare un modulo 4G (come quelli delle serie A7670 o SIM7600), che sa usare anche il 2G dove c’è. Non li abbiamo ancora provati: rifare il monitor dei blackout con un modulo 4G è tra i nostri prossimi progetti.
I pin del modulo
La scheda del SIM800L più diffusa (quella piccola, rossa o blu, con l’antenna a spirale) ha 12 pin, sei per lato:
| Pin | A cosa serve | Note |
|---|---|---|
| NET | Antenna | Per l’antenna a spirale; molte schede hanno anche il connettore per un’antenna esterna |
| VCC | Alimentazione | Da 3,4 a 4,4 V, con picchi fino a 2 A: vedi Alimentazione |
| RST | Reset | Portato a massa per un attimo, riavvia il modulo; di solito resta scollegato |
| RXD | Ricezione seriale | Riceve i comandi dal microcontrollore; livello 3,3 V: con Arduino UNO serve il partitore |
| TXD | Trasmissione seriale | Manda le risposte al microcontrollore |
| GND | Massa | In comune con il microcontrollore e con l’alimentatore |
| RING | Avviso di chiamata o SMS | Va basso per un momento quando arriva una chiamata o un SMS: può svegliare il microcontrollore |
| DTR | Controllo dello sleep | Con AT+CSCLK=2 manda in sleep e risveglia il modulo: vedi Sleep & wake-up |
| MIC+ e MIC− | Microfono | Solo per le chiamate voce |
| SPK+ e SPK− | Altoparlante | Solo per le chiamate voce |
Per i dettagli elettrici di ogni pin fate riferimento al datasheet, nella sezione Documentazione.
Quanto consuma il modulo
L’assorbimento del modulo cambia molto a seconda di cosa sta facendo:
| Modalità | Frequenza | Assorbimento |
|---|---|---|
| Power down | 60 µA | |
| Sleep mode | 1 mA | |
| Stand by | 18 mA | |
| Chiamata | GSM850 | 199 mA |
| Chiamata | EGSM900 | 216 mA |
| Chiamata | DCS1800 | 146 mA |
| Chiamata | PCS1900 | 131 mA |
| GPRS | 453 mA | |
| Burst di trasmissione | 2 A |
Tabella degli assorbimenti per modalità di funzionamento (fonte: datasheet SIM800L).
Alimentazione: il punto dove ci si arena quasi sempre
L’intervallo di tensione per l’alimentazione di questo modulo va dai 3,4V ai 4,4V circa. Nel nostro primo progetto con questo modulo (l’allarme GSM per batteria scarica) avevamo pensato di alimentarlo con un semplice partitore di tensione in uscita da un integrato LM7805.
Guardando la tabella dei consumi qui sopra, però, appare evidente che — contrariamente a quanto pensavamo, e a quanto avevamo letto in qualche articolo in rete — non è assolutamente possibile alimentare il modulo in questo modo. Tanto meno utilizzando direttamente la porta 5V di Arduino: nei picchi di trasmissione il modulo può assorbire fino a 2A, molto più di quanto la porta 5V di Arduino sia in grado di erogare.
| Come lo alimentate | Funziona? | Perché |
|---|---|---|
| Pin 5 V di Arduino | No | 5 V è sopra il massimo di 4,4 V, e il pin non regge i picchi di 2 A |
| Pin 3,3 V di Arduino o di un NodeMCU | No | È sotto il minimo di 3,4 V e dà troppa poca corrente: nelle nostre prove, e in quelle di un lettore, il modulo non prende la linea |
| Partitore di tensione dopo un LM7805 | No | Un partitore non regge correnti di questo tipo: è il nostro primo tentativo, fallito |
| Step-down DC-DC (LM2596) regolato a 4,2 V | Sì | È la nostra soluzione, provata: regge i picchi e la tensione si regola con il trimmer |
| Batteria LiPo da 3,7 V con un BMS | Sì | Provata: è come lo alimentiamo nel monitor dei blackout, sempre acceso, con un modulo BMS TC4056A che ricarica e protegge la batteria e il condensatore da 2200 µF vicino ai pin del modulo |
Abbiamo preferito la soluzione dello step-down DC-DC, che si presta bene sia al banco prova che al progetto originario da cui nasce l’esigenza di questo modulo. Visto che torna utile spesso, ci siamo costruiti (su una basetta millefori) un mini modulo di alimentazione permanente, composto da un banale LM7805 — un regolatore lineare con uscita fissa a 5V — per alimentare qualunque scheda Arduino, e uno step-down DC-DC con uscita regolabile (nel nostro caso impostata a 4,2V) per il SIM800L. Tenete corti i cavi tra lo step-down e il modulo: nei picchi di corrente anche pochi centimetri di filo sottile fanno scendere la tensione.
Tra il VCC del modulo e la massa conviene mettere anche un condensatore elettrolitico da 2200 µF (il + sul VCC), come nello schema più avanti: fa da piccola riserva e aiuta a reggere i picchi di corrente del SIM800L. Non è indispensabile, ma previene eventuali problemi. Montatelo il più vicino possibile ai pin VCC e GND del modulo, con collegamenti corti: se è lontano, il filo in mezzo fa calare la tensione proprio durante i picchi, e il condensatore serve a poco.

In buona sostanza, è la realizzazione dello schema di questo articolo: lastminuteengineers.com/sim800l-gsm-module-arduino-tutorial
L’hardware necessario
In qualità di Affiliati Amazon riceviamo un guadagno dagli acquisti idonei.
| # | Componente | Specifiche | Qtà | Note | Link |
|---|---|---|---|---|---|
| 1 | Scheda di controllo | Arduino UNO R3 (o clone con interfaccia CH340) | 1 | Gestisce l’interfaccia con il PC e il dialogo seriale col modulo | Link Amazon Marketplace |
| 2 | Step-down DC-DC | Con integrato LM2596, uscita regolabile | 1 | Indispensabile per alimentare correttamente il SIM800L — vedi sezione “Alimentazione” | Link Amazon Marketplace |
| 3 | Modulo GSM | SIM800L | 1 | Link Amazon Marketplace | |
| 4 | SIM card | Attiva, dati e/o SMS a seconda dell’uso | 1 | Verificatene il funzionamento in un telefono prima di montarla nel circuito | Link Amazon Marketplace |
| 5 | Resistenza | 10 kΩ | 1 | Partitore di tensione per il livello logico del pin Rx | |
| 6 | Resistenza | 20 kΩ | 1 | Partitore di tensione per il livello logico del pin Rx (vedi nota sotto) | |
| 7 | Basetta millefori | — | 1 | Usata per il modulo di alimentazione permanente | Link Amazon Marketplace |
| 8 | Condensatore elettrolitico | 2200 µF | 1 | Tra VCC e GND del modulo: aiuta con i picchi di corrente, consigliato ma non indispensabile | |
| 9 | Cavetteria/jumper | — | q.b. |
Nota sui condensatori: nella foto della nostra scheda di alimentazione (qui sopra) si vedono alcuni condensatori. Non sono collegati al circuito: sono un residuo del riutilizzo di una vecchia basetta e non sono necessari al funzionamento del modulo. Un’altra cosa è il condensatore da 2200 µF dello schema, sul VCC del modulo: quello è utile. Li lasciamo visibili in foto solo per trasparenza — potete ignorarli.
Nota sulla resistenza da 20 kΩ: in una versione precedente di questo articolo questo valore era riportato in due punti diversi (20 kΩ e 22 kΩ). Il valore corretto, coerente con lo schema di riferimento citato più avanti, è 20 kΩ.

Collegamento con Arduino UNO
I collegamenti, pin per pin
| Pin SIM800L | Collegato a | Funzione in questo progetto |
|---|---|---|
| VCC | Uscita dello step-down DC-DC (~3,8-4,2V) | Alimentazione — mai al 5V diretto di Arduino |
| VCC | Condensatore elettrolitico da 2200 µF verso GND (+ sul VCC) | Aiuta a reggere i picchi di corrente: non indispensabile, ma consigliato; il più vicino possibile ai pin del modulo |
| GND | GND comune con Arduino e alimentatore | Massa |
| TX | Pin digitale D5 di Arduino (SIM_TX_PIN) | Trasmissione dati dal modulo verso Arduino |
| RX | Pin digitale D6 di Arduino (SIM_RX_PIN), tramite partitore 10 kΩ/20 kΩ | Ricezione dati da Arduino — richiede l’adattamento di livello logico 5V→3,3V |
| DTR | Pin digitale D4 di Arduino (DTR_PIN), impostato HIGH | Controllo sleep/wake-up del modulo (vedi sezione dedicata) |
Una piccola nota sulla scheda Elegoo UNO R3, clone della Arduino UNO R3 originale: monta lo stesso integrato ATMEGA328P dell’originale, ma il convertitore USB-Seriale utilizza il chip CH340G, i cui driver non sono compresi nell’installazione standard dell’IDE Arduino. Vanno quindi installati separatamente — trovate istruzioni e link in questo articolo: makerslab.it/installare-i-driver-per-il-modulo-ftdi-ch340g-per-i-cloni-di-arduino
Livelli logici: perché serve un partitore di tensione
Non possiamo collegare il pin RXD del modulo direttamente al pin digitale di Arduino, perché Arduino UNO lavora a livello logico 5V mentre il modulo SIM800L lavora a livello logico 3,3V.
Per abbassare il segnale da 5V a 3,3V usiamo il nostro (ormai caro e inseparabile) partitore di tensione: una resistenza da 10 kΩ tra il pin RXD del SIM800L e il pin digitale di Arduino, e una da 20 kΩ tra il pin RXD e GND. Il conto: 5 V × 20 / (10 + 20) ≈ 3,3 V. Esistono anche dei convertitori di livello logico 5V-3,3V dedicati.
Nell’altro verso, nel nostro circuito, il TXD del modulo è collegato direttamente a D5 e Arduino lo legge senza problemi.
Collegamento con ESP32 e NodeMCU
ESP32 e NodeMCU (ESP8266) lavorano già a 3,3 V, come il modulo: il partitore sul RXD non serve, e TXD e RXD si collegano direttamente, incrociati (TXD del modulo sul pin che riceve, RXD sul pin che trasmette).
Non cambia invece l’alimentazione: anche qui il SIM800L va alimentato a parte, con lo step-down, e non dal pin 3,3 V della scheda, con la massa in comune. Un lettore ci ha scritto che con un NodeMCU alimentato così il modulo rispondeva ai comandi ma non prendeva la linea: è lo stesso problema che avevamo avuto noi.
Con un ESP32 conviene usare una delle sue porte seriali hardware al posto di SoftwareSerial, per esempio Serial2.begin(57600, SERIAL_8N1, 16, 17); (riceve sul pin 16, trasmette sul 17) e poi Serial2 al posto di serialSIM800 nello sketch. Non l’abbiamo ancora provato con il nostro modulo: se lo fate, scriveteci com’è andata.
Lo sketch per dialogare con il modulo
Prima di vedere come inviare un SMS o leggere lo stato del modulo, dobbiamo caricare uno sketch che ci permetta di colloquiare con il SIM800L e fare i nostri esperimenti.
Abbiamo utilizzato un semplice sketch che invia al modulo GSM quello che scriviamo sul monitor seriale, e visualizza sul monitor seriale quello che il modulo GSM invia alla scheda.
Configurazione e inizializzazione
//Includiamo la libreria per la comunicazione seriale tra l'Arduino e il SIM800L
#include "SoftwareSerial.h"
//Definiamo il pin dell'Arduino a cui è collegato il pin TX del Sim800L, in questo caso D5
#define SIM_TX_PIN 5
//Definiamo il pin dell'Arduino a cui è collegato il pin RX del Sim800L, in questo caso D6 (occhio al partitore!)
#define SIM_RX_PIN 6
//Definiamo il pin dell'Arduino a cui è collegato il pin DTR del Sim800L, in questo caso D4 (serve per lo sleep)
#define DTR_PIN 4
//Definiamo una seriale software sui TX e RX del SIM800L
SoftwareSerial serialSIM800(SIM_TX_PIN, SIM_RX_PIN);
void setup() {
//Inizializziamo la seriale tra Arduino e il PC
Serial.begin(57600);
//Inizializziamo la seriale virtuale lato SIM800L
serialSIM800.begin(57600);
//DTR a HIGH: serve per mandare il modulo in sleep e risvegliarlo
pinMode(DTR_PIN, OUTPUT);
digitalWrite(DTR_PIN, HIGH);
delay(500);
}
(Corretto rispetto alla versione precedente: il commento sopra SIM_RX_PIN riportava ancora “pin TX” per un evidente copia-incolla.)
Loop di dialogo bidirezionale
void loop() {
//Scrivi sulla seriale Arduino-PC quello che leggi dal pin TX del SIM800L
if (serialSIM800.available()) {
Serial.write(serialSIM800.read());
}
//Scrivi al SIM800L quello che digitiamo sul monitor seriale (i comandi AT)
if (Serial.available()) {
serialSIM800.write(Serial.read());
}
}
Cosa vuol dire il LED
Una volta collegato e alimentato il modulo, inserite la SIM e guardate il LED sulla scheda:
| Il LED | Vuol dire | Cosa fare |
|---|---|---|
| Spento | Il modulo non è acceso | Controllate alimentazione e collegamenti di VCC e GND |
| Un lampeggio al secondo | Acceso, ma non ancora registrato sulla rete | Aspettate qualche secondo; se continua, vedete Problemi e soluzioni |
| Un lampeggio ogni 3 secondi | Registrato sulla rete | È pronto: potete inviare SMS e fare chiamate |
| Lampeggi veloci, circa 3 al secondo | Connessione dati GPRS attiva | Niente: succede solo se avete aperto una connessione dati |
| Qualche lampeggio, poi si spegne e riparte | Il modulo si riavvia | Quasi sempre è l’alimentazione, che non regge i picchi: vedete Alimentazione |
I tempi dei lampeggi sono quelli del datasheet. Per avere maggiori dettagli sul funzionamento dobbiamo inviare qualche comando AT e analizzare le risposte.
Controllare il modulo in 5 comandi AT
Con lo sketch qui sopra caricato, aprite il monitor seriale dell’IDE Arduino (57600 baud, con “Entrambi NL e CR” come fine riga) e scrivete questi comandi, uno alla volta e in quest’ordine: ognuno controlla una cosa, e se uno va male sapete dove cercare. Il manuale completo dei comandi è nella documentazione.
| # | Comando | Controlla | Risposta buona |
|---|---|---|---|
| 1 | AT | che Arduino e il modulo si parlino | OK |
| 2 | AT+CSQ | il segnale | il primo numero tra 2 e 30 (meglio sopra 10) |
| 3 | AT+CCID | che il modulo legga la SIM | il numero della SIM, 19 o 20 cifre |
| 4 | AT+CREG? | la registrazione sulla rete | +CREG: 0,1 o +CREG: 0,5 |
| 5 | AT+COPS? | l’operatore | il nome dell’operatore |
AT — verifica del dialogo seriale
10:40:20.795 -> AT 10:40:20.796 -> OK
Primo comando da lanciare per verificare il dialogo tra Arduino e il SIM800L. Se non ricevete in risposta la stringa “OK”, c’è un problema nei collegamenti tra i pin RX e TX del SIM800L e i pin di Arduino.
AT+CSQ — qualità del segnale
10:40:25.735 -> AT+CSQ 10:40:35.980 -> +CSQ: 16,0
Serve per verificare la qualità del segnale. Il primo numero (16 nel nostro caso) dovrebbe trovarsi tra 2 e 30, che equivale a un segnale tra -110 e -54 dBm.
AT+CCID — lettura della SIM
10:40:35.983 -> AT+CCID 10:40:42.373 -> 8944502206206365147
È l’identificativo della SIM. Lo usiamo per verificare che il modulo legga correttamente i dati della SIM inserita.
AT+CREG? — stato di registrazione alla rete
10:40:46.745 -> AT+CREG 10:40:50.949 -> +CREG: 0,5
Nel nostro registro il comando è scritto senza il punto di domanda; la forma del manuale per leggere lo stato è AT+CREG?. Verifichiamo se il modulo si è correttamente registrato sulla rete. Nella nostra prova il secondo numero (5) indica “registrato in roaming”: con una SIM che opera come MVNO in appoggio a un altro operatore è un risultato normale. Se invece avete una SIM “diretta” dell’operatore e ottenete comunque 5 invece di 1 (registrato in rete domestica), vale la pena verificarlo con il vostro gestore.
AT+COPS? — operatore di rete
10:40:50.949 -> AT+COPS? 10:40:57.062 -> +COPS: 0,0,"Wind Telecom SpA" 10:40:57.065 -> 10:40:57.065 -> OK
Verifichiamo anche l’operatore a cui siamo connessi, ed effettivamente troviamo conferma di quanto sopra.
Inviare un SMS
Per inviare un SMS possiamo usare lo sketch di interfaccia seriale, scrivendo i comandi direttamente nel monitor seriale, oppure scrivere uno sketch dedicato che invia l’SMS in autonomia.
Abbiamo utilizzato la prima soluzione per i test. Una volta accertato che tutto funziona correttamente, abbiamo inserito le righe di comando per l’invio del messaggio nel programma di monitoraggio e allarme del livello di carica della batteria della moto: lo trovate nell’articolo sull’allarme GSM per batteria scarica.
11:26:23.833 -> at+cmgf=1 11:26:30.783 -> OK 11:26:30.783 -> at+cmgs="+39xxxxxxxxxx" 11:26:46.372 -> > testo di prova 11:26:53.794 -> > 11:27:12.950 -> OK
Sleep & wake-up
Abbiamo creato due funzioni dedicate, rispettivamente per mandare il modulo in sleep mode e per “svegliarlo”. Il prerequisito è sempre che il pin DTR del SIM800L sia connesso a un pin output di Arduino impostato al valore HIGH.
sim800sleepmode() — mandare il modulo in sleep
void sim800sleepmode(){
serialSIM800.println("AT+CSCLK=2");
}
Per mandarlo in sleep mode è sufficiente un comando AT (AT+CSCLK=2) con pin DTR impostato ad HIGH. Il problema è che, una volta entrato in sleep mode, il modulo chiude le comunicazioni sulla seriale.
sim800wakeup() — risvegliare il modulo
void sim800wakeup(){
digitalWrite(DTR_PIN, LOW);
delay(200);
digitalWrite(DTR_PIN, HIGH);
serialSIM800.println("AT");
serialSIM800.println("AT+CSCLK=0");
}
Per svegliarlo dalla modalità sleep è necessario portare il pin DTR al valore LOW (noi teniamo 200 millisecondi) e, a quel punto, inviare un comando AT qualsiasi. Solo dopo queste operazioni si può inviare il comando AT+CSCLK=0 per ripristinare la normale funzionalità, cioè disabilitare lo sleep controllato da DTR.
(Corretto rispetto alla versione precedente: il testo indicava AT+CSCLK=1, che non corrisponde al codice qui sopra.)
Problemi e soluzioni
I problemi che abbiamo incontrato noi, quelli che ci hanno raccontato i lettori nei commenti e quello che dice il datasheet, dal sintomo alla prova da fare.
Il modulo non risponde ai comandi AT
Scrivete AT e non torna niente. Controllate, in quest’ordine:
- i collegamenti della seriale: TXD del modulo sul pin che riceve di Arduino (D5 nel nostro sketch), RXD del modulo, attraverso il partitore, sul pin che trasmette (D6). Se sono invertiti, il modulo non risponde;
- la massa: il GND del modulo deve essere in comune con quello di Arduino;
- il LED: se è spento il modulo non è alimentato, se si spegne e riparte l’alimentazione non regge;
- il monitor seriale: la velocità deve essere quella dello sketch, e il fine riga “Entrambi NL e CR”.
Sulla seriale arrivano caratteri incomprensibili
Le cause più comuni sono due. La velocità della seriale: quella dello sketch (serialSIM800.begin) deve essere la stessa del modulo. E l’alimentazione: nelle nostre prove, senza una sorgente in grado di dare un paio di ampere a circa 3,8–4,2 V, il modulo rispondeva con messaggi incomprensibili.
Il modulo non si registra alla rete
Il LED continua a lampeggiare una volta al secondo e AT+CREG? risponde con un secondo numero diverso da 1 e da 5. Il numero dice cosa succede:
| Risposta | Vuol dire |
|---|---|
+CREG: 0,0 | non registrato, e non sta cercando una rete |
+CREG: 0,1 | registrato sulla rete del suo operatore |
+CREG: 0,2 | non registrato, sta cercando una rete |
+CREG: 0,3 | registrazione rifiutata dalla rete |
+CREG: 0,5 | registrato in roaming (normale con molte SIM per IoT e operatori virtuali) |
Cosa controllare:
- l’alimentazione: per registrarsi il modulo assorbe i picchi più alti, e se la tensione crolla non ce la fa. È la causa più frequente, per noi e per i lettori;
- la SIM: provatela in un telefono. Deve funzionare, avere credito e il PIN disattivato (con il PIN attivo il modulo non si registra finché non lo riceve con il comando
AT+CPIN); - il 2G: l’operatore deve avere il 2G nella vostra zona (vedi Il 2G in Italia). Con una registrazione rifiutata (
0,3) il problema è quasi sempre la SIM o l’operatore; - il segnale e l’antenna: con
AT+CSQsotto 10 il segnale è debole; controllate che l’antenna sia saldata o collegata.
Come si inserisce la SIM
Il modulo vuole una micro-SIM, la misura intermedia: una nano-SIM, quella degli smartphone recenti, richiede un adattatore, mentre la SIM grande non entra. Lo slot è sul bordo della scheda dove si trova il connettore dell’antenna, e la SIM si infila di lato, lasciando fuori solo il bordo.

- Togliete l’alimentazione prima di inserire o togliere la SIM, per non rovinare né la SIM né il modulo.
- Controllate il verso: la SIM entra in un solo modo: con i contatti dorati verso l’alto, dalla parte del chip SIM800L, come nella foto, e con l’angolo tagliato che combacia con quello dello slot. Se non scorre, non forzatela: provate a girarla.
- Spingetela fino in fondo, finché non si ferma.
- Riaccendete il modulo e aspettate che il LED passi a un lampeggio ogni 3 secondi.
- Verificate che la legga con
AT+CCID: deve rispondere con il numero della SIM (vedi i 5 comandi AT). Se torna un errore, la SIM non è letta: spegnete e rimettetela, controllando verso e contatti.
Prima di inserirla, provate la SIM in un telefono e disattivate il PIN, come nella sezione su la registrazione alla rete. Se con la SIM dentro il modulo si spegne, il problema è l’alimentazione, non la SIM (vedi sotto).
Il modulo si riavvia o smette di rispondere quando inserisco la SIM
È il segno tipico di un’alimentazione che non regge: appena c’è la SIM il modulo cerca la rete, assorbe i picchi di circa 2 A, la tensione scende e il modulo si spegne. Alimentatelo come nella sezione Alimentazione, con cavi corti, e non dal pin 3,3 V o 5 V della scheda.
Il modulo non invia gli SMS
- prima di tutto il modulo deve essere registrato sulla rete (LED ogni 3 secondi,
AT+CREG?con 1 o 5); - serve la modalità testo,
AT+CMGF=1, prima diAT+CMGS; - il numero va scritto con il prefisso internazionale, per esempio
"+39..."; - il testo si chiude con il carattere Ctrl+Z (codice 26), come dice il manuale dei comandi AT: in uno sketch si manda con
serialSIM800.write(26);; - la SIM deve avere credito e poter inviare SMS: alcune SIM per IoT fanno solo dati.
Domande frequenti
I condensatori mostrati nelle foto sono necessari?
No. Nella foto della nostra scheda di alimentazione si vedono alcuni condensatori, residuo del riutilizzo di una vecchia basetta millefori: non sono collegati al circuito e non servono al funzionamento del modulo. Un’altra cosa è il condensatore elettrolitico da 2200 µF dello schema, tra il VCC del modulo e la massa: aiuta a reggere i picchi di corrente del SIM800L e, anche se non è indispensabile, conviene metterlo, il più vicino possibile ai pin del modulo.
Il modulo funziona con qualsiasi SIM e operatore?
Nella nostra esperienza e in quella di diversi lettori nei commenti, i risultati variano a seconda della combinazione SIM/operatore/alimentazione. Il tipo di SIM non conta, anche se è venduta come 4G o 5G: conta che l’operatore tenga ancora accesa la rete 2G nella vostra zona, perché il SIM800L usa solo quella. Il fattore che ha causato più problemi in assoluto resta l’alimentazione: senza una sorgente in grado di erogare un paio di ampere a circa 3,8V, il modulo non si registra sulla rete oppure risponde con caratteri incomprensibili sulla seriale.
Posso collegare il SIM800L direttamente a una scheda che lavora nativamente a 3,3V (es. NodeMCU/ESP), senza partitore di tensione?
Il partitore di tensione descritto in questo articolo serve solo ad adattare il livello logico da 5V (Arduino UNO) a 3,3V (SIM800L): con una scheda che lavora già a 3,3V non serve per quel motivo. Questo però non basta a garantire il funzionamento — come sopra, il problema più comune resta l’alimentazione del modulo, non il livello logico.
Posso alimentare il modulo con una batteria LiPo da 3,7V invece dello step-down?
Sì, e l’abbiamo provato: è quello che facciamo nel monitor dei blackout della rete elettrica, e funziona bene anche con il modulo sempre acceso. Il SIM800L prende l’alimentazione direttamente dalla batteria LiPo da 3,7 V, che un modulo BMS TC4056A ricarica e protegge da sovraccarico e cortocircuito; vicino ai pin del modulo c’è il condensatore da 2200 µF. Il BMS non è facoltativo: una LiPo senza protezioni può danneggiarsi o incendiarsi.
Come faccio a sapere se il modulo si è registrato sulla rete senza usare la seriale?
Guardate il LED di stato sulla scheda: un lampeggio ogni secondo significa che il modulo è attivo ma non ancora registrato sulla rete; un lampeggio ogni 3 secondi significa che si è registrato correttamente.
Posso usare un SIM900A al posto del SIM800L?
Non l’abbiamo provato. Il SIM900A è un modulo 2G della stessa famiglia (SIMCom) e usa quasi gli stessi comandi AT, quindi comandi e sketch in gran parte valgono anche per lui. Prima conviene controllare tre cose:
- la versione: molte schede SIM900A sono vendute con un firmware pensato per le reti asiatiche e in Europa spesso non si registrano alla rete; meglio un SIM900 senza la “A” o un modulo della serie SIM800;
- la velocità della seriale: quella dello sketch deve essere la stessa del modulo, altrimenti il modulo risponde con caratteri incomprensibili;
- l’alimentazione: anche questo modulo ha picchi di circa 2 A; molte schede SIM900A hanno un regolatore e accettano 5 V, ma controllate la vostra.
Ce l’hanno chiesto due lettori: se lo provate, scriveteci com’è andata.
Il modulo non si registra alla rete, o smette di rispondere ai comandi AT appena inserisco la SIM: cosa controllo?
Quasi sempre è l’alimentazione: per registrarsi alla rete il modulo assorbe picchi di circa 2 A, e se l’alimentazione non li regge la tensione crolla e il modulo si riavvia o smette di rispondere, proprio nel momento in cui la SIM gli fa cercare la rete. Alimentatelo come nella sezione sull’alimentazione (step-down regolato a circa 4 V, cavi corti), non dal pin 3,3 V o 5 V della scheda.
Poi controllate la SIM in un telefono: deve funzionare, avere credito e il PIN disattivato (con il PIN attivo il modulo non si registra finché non lo riceve con il comando AT+CPIN). Infine guardate il LED: un lampeggio al secondo vuol dire che cerca ancora la rete, uno ogni 3 secondi che si è registrato.
Posso fare una telefonata con il SIM800L?
Sì: con lo sketch di questa guida basta scrivere nel monitor seriale ATD seguito dal numero e dal punto e virgola (per esempio ATD+39XXXXXXXXXX;) e, per chiudere, ATH. Non l’abbiamo provato.
La SIM deve essere abilitata al traffico voce: alcune SIM per IoT fanno solo dati e SMS. Nell’articolo sul monitor dei blackout c’è anche la funzione per far chiamare il modulo da uno sketch.
Disclaimer
Questo modulo, se alimentato in modo scorretto, può danneggiarsi in modo permanente — nelle nostre prove è successo più di una volta prima di trovare la combinazione di alimentazione giusta. Se il vostro progetto finale prevede di collegarlo in modo permanente a un veicolo o a un impianto elettrico, prestate particolare attenzione ai punti di alimentazione e ai livelli logici descritti sopra.
Questo articolo ha scopo divulgativo e amatoriale: non forniamo alcuna garanzia sulla correttezza di schemi, codice e procedure descritte, e la realizzazione del progetto è a rischio e responsabilità di chi la effettua. Il dispositivo descritto non è uno strumento certificato o omologato. Per i dettagli completi, consultate i nostri Termini e Condizioni di utilizzo.
Documentazione
Fondamentale la consultazione della documentazione relativa al modulo e ai comandi AT che vi condividiamo qui:
- Datasheet SIM800L – file PDF con tutte le specifiche hardware;
- Manuale comandi AT – file PDF con tutti i comandi AT, il linguaggio per poter colloquiare con il modulo.
Sitografia
Per arrivare a far funzionare il modulo abbiamo consultato numerosi siti, ed ecco l’intera sitografia:
- makerslab.it – driver per il CH340G
- treccarichi.net – nei commenti viene evidenziato il problema relativo all’alimentazione, che noi stessi abbiamo verificato in modo sperimentale con il prototipo;
- electroyou.it – discussione molto interessante;
- lastminuteengineers.com – uno degli articoli più interessanti e forse fatti meglio;
- iemma.it – fondamentale per la questione del partitore per l’adattamento dei livelli logici tra Arduino e SIM800L;
- pijaeducation.com
- andino.systems
- raviyp.com – articolo molto interessante per gestire lo sleep-mode e soprattutto la funzione di wake-up da software.
- tlcworld.it – lo spegnimento del 2G e del 3G paese per paese, per la situazione in Italia.
Commenti (11)
I commenti arrivati sul sito precedente, in sola lettura. Per domande e osservazioni nuove scrivici.
Mario ·
Complimenti molto chiaro e interessante
Margherita e Alessandro ·
Grazie Mario. Cerchiamo sempre di condividere informazioni in modo fruibile ai nostri lettori. Non esitare a contattarci per qualsiasi informazione e/o approfondimento.
GIUSEPPE ·
Ciao mario , questo modulo sim800L funziona con le sim 4 e 5, grazie
giuseppe ·
ciao il modulo SIM800L funziona con tutte le sim
Alessandro ·
Ciao Giuseppe e grazie per il tuo contributo. Se sei interessato ad altri contenuti come questo faccelo sapere. Il vostro feedback è fondamentale per pubblicare contenuti utili e di qualità.
Cris ·
Tutorial molto interessante. Ho provato a usarlo tramite un NodeMCU dal momento che mi pare lavori nativamente con la tensione di 3.3 V, in questo modo mi sono evitato riduttori vari. Il modulo risponde, purtroppo con ben 2 sim provate non prende la linea. Inserendo una sim ho. mobile addirittura smette di rispondere ai comandi AT.
Ho provato anche un modulo simile, SIM900A il quale risponde solo con caratteri incomprensibili, e leggo sui forum che capita a un sacco di gente.
L’impressione è che per vedere funzionare questi moduletti occorra azzeccare la combo tipo di arduino/sim/operatore, oltre che stare molto attenti alle tensioni e che se varia un solo fattore non si conclude nulla.
Grazie comunque per l’aiuto!
Alessandro ·
Ciao Cris, grazie per il tuo contributo. Non ho ben chiaro il tuo circuito ma il problema potrebbe essere l’alimentazione. Io ho lavorato molto e fatto numerose prove (e bruciato diverse schede) prima di far funzionare il modulo e posso dirti che il problema è sempre stato quello dell’alimentazione del modulo. Senza una sorgente in grado di dare un paio di ampere a circa 3.8V non funziona, o funziona male (messaggi incomprensibili sulla porta seriale). Con i 3.3V di una scheda (arduino o nodeMCU che sia) non prende la linea.
Lorenzo ·
Scusate ma i condensatori che valori devono avere?
Non ci sono nella lista
Alessandro ·
Ciao Lorenzo. Abbiamo aggiornato l’articolo e integrato la risposta al tuo commento. I condensatori sono un residuo di test. Non sono collegati e non servono
Lorenzo ·
Scusate ma i condensatori che valori devono avere?
Non ci sono nella lista
Alessandro ·
Ciao Lorenzo. I condensatori che vedi in foto non sono collegati. Ho riutilizzato una vecchia scheda forata che li aveva. Se vedi lo schema circuitale non ci sono, e non servono.
Grazie per averci scritto.