Vai al contenuto
officinasottocasa

officinasottocasa › Elettronica

Elettronica · Guida

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

Guida completa modulo GSM SIM800L

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:

PinA cosa serveNote
NETAntennaPer l’antenna a spirale; molte schede hanno anche il connettore per un’antenna esterna
VCCAlimentazioneDa 3,4 a 4,4 V, con picchi fino a 2 A: vedi Alimentazione
RSTResetPortato a massa per un attimo, riavvia il modulo; di solito resta scollegato
RXDRicezione serialeRiceve i comandi dal microcontrollore; livello 3,3 V: con Arduino UNO serve il partitore
TXDTrasmissione serialeManda le risposte al microcontrollore
GNDMassaIn comune con il microcontrollore e con l’alimentatore
RINGAvviso di chiamata o SMSVa basso per un momento quando arriva una chiamata o un SMS: può svegliare il microcontrollore
DTRControllo dello sleepCon AT+CSCLK=2 manda in sleep e risveglia il modulo: vedi Sleep & wake-up
MIC+ e MIC−MicrofonoSolo per le chiamate voce
SPK+ e SPK−AltoparlanteSolo 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àFrequenzaAssorbimento
Power down60 µA
Sleep mode1 mA
Stand by18 mA
ChiamataGSM850199 mA
ChiamataEGSM900216 mA
ChiamataDCS1800146 mA
ChiamataPCS1900131 mA
GPRS453 mA
Burst di trasmissione2 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 alimentateFunziona?Perché
Pin 5 V di ArduinoNo5 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 NodeMCUNoÈ 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 LM7805NoUn partitore non regge correnti di questo tipo: è il nostro primo tentativo, fallito
Step-down DC-DC (LM2596) regolato a 4,2 VSìÈ la nostra soluzione, provata: regge i picchi e la tensione si regola con il trimmer
Batteria LiPo da 3,7 V con un BMSSì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.

scheda di alimentazione 5V con LM7805 e 4,2V con LM2596 per SIM800L
scheda di alimentazione con LM7805 e LM2596

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.

#ComponenteSpecificheQtàNoteLink
1Scheda di controlloArduino UNO R3 (o clone con interfaccia CH340)1Gestisce l’interfaccia con il PC e il dialogo seriale col moduloLink Amazon Marketplace
2Step-down DC-DCCon integrato LM2596, uscita regolabile1Indispensabile per alimentare correttamente il SIM800L — vedi sezione “Alimentazione”Link Amazon Marketplace
3Modulo GSMSIM800L1Link Amazon Marketplace
4SIM cardAttiva, dati e/o SMS a seconda dell’uso1Verificatene il funzionamento in un telefono prima di montarla nel circuitoLink Amazon Marketplace
5Resistenza10 kΩ1Partitore di tensione per il livello logico del pin Rx
6Resistenza20 kΩ1Partitore di tensione per il livello logico del pin Rx (vedi nota sotto)
7Basetta millefori—1Usata per il modulo di alimentazione permanenteLink Amazon Marketplace
8Condensatore elettrolitico2200 µF1Tra VCC e GND del modulo: aiuta con i picchi di corrente, consigliato ma non indispensabile
9Cavetteria/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Ω.

modulo SIM800L collegato ad Arduino UNO R3 su breadboard
prototipo su breadboard con SIM800L e UNO R3

Collegamento con Arduino UNO

schema elettrico: 12 V sull’ingresso del LM2596, uscita del LM2596 sul VCC del SIM800L con il condensatore da 2200 µF verso massa; TXD del modulo su D5 di Arduino UNO, D6 sul RXD attraverso il partitore da 10 e 20 kΩ, DTR su D4; massa comune tra LM2596, SIM800L e Arduino
lo schema dei collegamenti, provato e funzionante: ricalca quello del monitor dei blackout (toccatelo per ingrandirlo)

I collegamenti, pin per pin

Pin SIM800LCollegato aFunzione in questo progetto
VCCUscita dello step-down DC-DC (~3,8-4,2V)Alimentazione — mai al 5V diretto di Arduino
VCCCondensatore 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
GNDGND comune con Arduino e alimentatoreMassa
TXPin digitale D5 di Arduino (SIM_TX_PIN)Trasmissione dati dal modulo verso Arduino
RXPin 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
DTRPin digitale D4 di Arduino (DTR_PIN), impostato HIGHControllo 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 LEDVuol direCosa fare
SpentoIl modulo non è accesoControllate alimentazione e collegamenti di VCC e GND
Un lampeggio al secondoAcceso, ma non ancora registrato sulla reteAspettate qualche secondo; se continua, vedete Problemi e soluzioni
Un lampeggio ogni 3 secondiRegistrato sulla reteÈ pronto: potete inviare SMS e fare chiamate
Lampeggi veloci, circa 3 al secondoConnessione dati GPRS attivaNiente: succede solo se avete aperto una connessione dati
Qualche lampeggio, poi si spegne e riparteIl modulo si riavviaQuasi 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.

#ComandoControllaRisposta buona
1ATche Arduino e il modulo si parlinoOK
2AT+CSQil segnaleil primo numero tra 2 e 30 (meglio sopra 10)
3AT+CCIDche il modulo legga la SIMil numero della SIM, 19 o 20 cifre
4AT+CREG?la registrazione sulla rete+CREG: 0,1 o +CREG: 0,5
5AT+COPS?l’operatoreil 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:

RispostaVuol dire
+CREG: 0,0non registrato, e non sta cercando una rete
+CREG: 0,1registrato sulla rete del suo operatore
+CREG: 0,2non registrato, sta cercando una rete
+CREG: 0,3registrazione rifiutata dalla rete
+CREG: 0,5registrato 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+CSQ sotto 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.

modulo SIM800L visto dall’alto con la micro-SIM infilata dal bordo del connettore dell’antenna, contatti dorati verso l’alto; una freccia indica il verso di inserimento
la SIM si infila dal bordo del connettore dell’antenna, con i contatti dorati verso l’alto, dalla parte del chip
  1. Togliete l’alimentazione prima di inserire o togliere la SIM, per non rovinare né la SIM né il modulo.
  2. 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.
  3. Spingetela fino in fondo, finché non si ferma.
  4. Riaccendete il modulo e aspettate che il LED passi a un lampeggio ogni 3 secondi.
  5. 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 di AT+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:

Sitografia

Per arrivare a far funzionare il modulo abbiamo consultato numerosi siti, ed ecco l’intera sitografia:


Commenti (11)

I commenti arrivati sul sito precedente, in sola lettura. Per domande e osservazioni nuove scrivici.

  1. Mario ·

    Complimenti molto chiaro e interessante

    1. 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.

  2. GIUSEPPE ·

    Ciao mario , questo modulo sim800L funziona con le sim 4 e 5, grazie

  3. giuseppe ·

    ciao il modulo SIM800L funziona con tutte le sim

    1. 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à.

  4. 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!

    1. 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.

  5. Lorenzo ·

    Scusate ma i condensatori che valori devono avere?
    Non ci sono nella lista

    1. 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

  6. Lorenzo ·

    Scusate ma i condensatori che valori devono avere?
    Non ci sono nella lista

    1. 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.