Oggi vedremo un modo un po’ particolare per inviare SMS da Arduino…
In commercio si trovano diversi shields che consentono di collegare Arduino alla rete GSM per inviare/ricevere SMS, sfruttare la connessione dati (GPRS o UMTS) o effettuare chiamate.
Un modo alternativo per inviare SMS da Arduino è sfruttare uno degli SMS Gateway presenti su Internet: questi servizi consentono, tramite form Web o chiamate API, di inoltrare SMS a dispositivi mobili. Tra i vari service providers, ho scelto Skebby.
I principali servizi che Skebby mette a disposizione sono:
- classic, consegna garantita, sms lunghi, personalizzazione mittente
- basic, consegna best effort, servizio economico
- zerocent, gratuito, invio a terminali con installata l’app di Skebby
Vedremo come utilizzare Arduino per inviare SMS classic (a pagamento con mittente personalizzato) e SMS zerocent (gratuito ma richiede l’app installata).
Il funzionamento logico è il seguente:
Registrazione
Per poter utilizzare i servizi di Skebby, è necessario registrarsi:
Al momento della registrazione, ti verranno dati in omaggio 10 SMS.
Nella prossima pagina, lo sketch per Arduino…
ciao,Luca,ho trovato questo skech che dovrebbe inviare una mail con la shield classica ethernet:come devo modificarla per usare la libreria ethercard? grazie
#include
#include
// Local network configuration:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x23, 0x5D };
byte ip[] = { 192,168,0, 177 };
// Login data:
String UserName64 = “XXXXXXX”;
String Password64 = “XXXXXXX”;
// SMTP server data:
// smtp.libero.it : 212.52.84.54
// smtp.iol.it : 212.52.84.203
// out.virgilio.it : 62.211.72.20
byte server[] = { 212, 52, 84, 54 }; // SMTP server
String ServerName = “libero.it”;
// Mail data:
String Sender = “XXXXXXX@libero.it”;
String Recipient = “XXXXXXX@libero.it”;
String Subject = “Messaggio inviato da Arduino!”;
String Body = “Testo del messaggio\nsu piu’\ndi una riga.”;
int time = 1000;
int wait = 1000;
String ServerResponse=””;
EthernetClient client;
void setup()
{
Serial.begin(9600);
Serial.println(“Program started, waiting for router…”);
delay(time); /* allow the router to identify the Arduino before the Arduino connects to the internet */
Serial.println(“Starting network module…”);
Ethernet.begin(mac, ip);
delay(2000);
Serial.println(“connecting…”);
if (client.connect(server, 25)) {
Serial.println(“connected”);
SendMsg(“HELO ” + ServerName); /* say hello*/
SendMsg(“AUTH LOGIN “);
SendMsg(UserName64); /* Username*/
SendMsg(Password64); /* Password */
SendMsg(“MAIL From:”); /* identify sender */
SendMsg(“RCPT To:”); /* identify recipient */
SendMsg(“DATA”);
SendMsg(“To: ” + Recipient); /* recipient in message header */
SendMsg(“From: ” + Sender); /* seder name in message header */
SendMsg(“Subject: “+ Subject); /* insert subject */
SendMsg(“”); /* empty line */
SendMsg(Body); /* insert body */
SendMsg(“”); /* empty line */
SendMsg(“.”); /* end mail */
SendMsg(“QUIT”); /* terminate connection */
client.println();
} else {
Serial.println(“connection failed”);
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println(“disconnecting.”);
client.stop();
for(;;)
;
}
}
void GetResponse() {
if (client.available()) {
char c = client.read();
while (client.available()) { // Store command char by char.
ServerResponse +=c;
c = client.read();
}
Serial.println(“<<>>” + m);
delay(wait); /* wait for a response */
GetResponse();
}
Ciao Marco
non mi sono dimenticato della tua domanda 😉 sto preparando un esempio…
bye
Ciao Luca,
innanzitutto complimenti per la precisione e al contempo fluidità dei tuoi tutorial.
Ho provato un po tutto quello che riguarda la enc28J60 che ho.
Ho anche la w5100 con i suoi relativi bachi nell’utilizzo con più periferiche SPI, ma lasciamo stare…
Vorrei chiederti un aiuto per poter usare SKEBBY anche con la ethernet shield ufficiale.
Non sono un espertissimo ma non riesco a scrivere la richiesta in un formato idoneo…
ottengo o failed oppure errore 31 da skebby.
Grazie per quanto potrai fare…
Ciao Antonio, purtroppo non possiedo uno shield con W5100… essendo ufficiale immagino che qualcuno abbia già provato/pubblicato esempi.
Ciao Luca,
vorrei sapere come richiesto anche da Daj come poter comunicare con winsock (vb.net o c#) via TCP per realizzare un’applicazione desktop. Se avessi anche spezzoni di codice sarebbero graditi.
Ciao e Grazie
Ciao Luca!
i tuoi tutorial sono ottimi.
Volevo chiederti…esistono delle APIDOCS per la libreria EtherCard?
Non riesco a capire alcuni passi di codice…
Grazie
Leandro
ciao Leandro,
no, purtroppo la documentazione ufficiale è un po’ carente…
Hi, do you know why my arduino stopped at “Skebby SMS Demo”? No further message.
Hi Tom, if the sketch hangs at that point, probably Arduino can’t talk with the ethernet shield. Do the other examples/tutorials work?
Ciao Luca, complimenti per i tutorial!
Vorrei chiederti se ad oggi funziona ancora l’invio degli sms tramite Skebby perchè ho provato a seguire il tutorial e non sono riuscito a farlo funzionare. Inoltre volevo chiederti: è possibile mandare mail? Grazie
Marco
Ciao Marco, ho provato e sono riuscito ad inviare un SMS… quale errore ottieni con il mio sketch? Per le mail… sto lavorando ad un prossimo tutorial ma è un po’ più complicato.
Ciao Luca, ho effettuato diverse prove e utilizzando lo sketch così com’è (chiaramente inserendo username e password) si blocca prima che compaia a display “Type 0 followed by your message for 0Cent SMS”. Provando a diminuire il valore da 600 a 550 del “byte Ethernet::buffer[600]; “, si sblocca e correttamente compare la scelta del “Type 0 followed by your..”, a questo punto ho provato ad inviare messaggi con lo zero cent, con il classic, modificando il numero di telefono, con prefisso 39 come indicato sul sito di skebby e senza, ma in nessun modo sono riuscito a farlo funzionare.
Successivamente ho provato a forzare l’invio di un messaggio
utilizzando “send_sms_zerocent(recipient, text_buffer);” inserendo direttamente il text_buffer, questa volta compare “Request sent to Skebby SMS Gateway”, ma in nessun modo arriva il messaggio.
Cosa sbaglio?
Per le mail ho trovato questo link “https://github.com/bibi21000/arduino-fullip/blob/master/doc/smtpclient.txt” ma purtroppo ci capisco poco, magari riesci a trovare qualcosa.
Grazie per la pazienza!
I tried several times, but for the japan Skebby failed. exist another service?
Hi Ronaldo,
yes, there are plenty of SMS gateway but you need to rewrite the sketch to match their APIs…
Cia Luca, potresti fare la stessa cosa ma con arduino yún, aspetto con anzia tue risposte !!! (Ho un bel progetto in mente !!)
Ciao Pasquale! ok, ci lavoro 😉
Ciao Luca, ho provato più volte questo sketch ma si blocca a questo punto
Preparing request for SMS 0Cent service
Request sent to Skebby SMS Gateway
Error sending SMS:
Sender+number+not+valid
come sender_num ho messo il mio, ho riempito tutti i campi, dove posso sbagliare?
Ciao Federico, come sender devi mettere il numero con prefisso 39 (senza 0 o +), come spiegato nella documentazione di Skebby.
Salve Luca, volevo segnalare la presenza di un errore di compilazione che mi si è presentato alla riga 10 dello sketch caricato in github. l’ho risolto sostituendo la riga con la seguente: const char website[] PROGMEM = “gateway.skebby.it”;
Inoltre ho provato il suo sketch (l’ho modificato leggermente per l’utilizzo di un ip statico ed invio di un sms a testo costante) ma nonostante esegua correttamente la funzione send_sms_zerocent ritornando “Request sent to Skebby SMS Gateway” l’sms non arriva a destinazione (ho controllato nella documentazione di skebby ma non ne riesco a venir fuori). qui può trovare il mio sketch modificato: https://lucantonello.no-ip.biz/owncloud/index.php/s/nferYV3qjdDePvt
Grazie della segnalazione! Hai l’app installata sul cellulare di destinazione vero? Il numero di destinazione lo imposti come da guida?
Ciao, Luca
sono un neofita.
ho preso il tuo skech e dopo aver istallato arduino sul PC windows lo ho lanciato. Mi sono accorto che era necessario creare una cartella specifica (in libraries) e copiare EtherCard.h, enc28j60).
Però continua a segnalarmi errori.
Devo fare ancora qualcosa?
Scusa ma sono alle prime armi.
Ciao e grazie
ciao nando, guarda il primo articolo del tutorial: è spiegato come installare la libreria nel tuo IDE.
Ciao Luca, ti ringrazio intanto per tutto il materiale che condividi e che stimola ogni giorno la mia “passione arduino”.
Sto seguendo il progetto “MobileRelays” ma non sono sicuro dei collegamenti. è la prima volta che collego questi due moduli ad arduino UNO e non vorrei bruciare qualcosa.
Potresti inviarmi una foto dei collegamenti dato che questa foto ( http://www.lucadentella.it/blog/wp-content/uploads/2014/10/webserver-2.jpg) sembra tagliata.
Grazie 1000 in anticipo
Claudio
Ciao Claudio, i collegamenti dipendono dal fatto che tu abbia o meno un modulo (come quello che vedi in foto) “passante”: il modulo SD infatti ha tutti i collegamenti “doppi” (due PIN MISO, due PIN MOSI…). Anche il tuo è così?
Ciao Luca, grazie per i tuoi tutorial. Ti chiedo come Pasquale se puoi fare lo stesso tutorial per arduino yun.
Ciao
Ciao Luca, ho trovato il tuo script che perfetto per quello che voglio realizzare. Sto creando un sistema allarme – vorrei aggiungere anche un webserver per controllare un relais.
Il script funzione benone – Problem, quando aggiungo anche il webserver – non mi mando più messaggi. penso che qualcosa duplicato. sai se posso usare il enc28j60 per il webserver ma anche per la comunicazione con Skebby?
ciao Bastian! temo che tu abbia raggiunto i limiti di arduino… consiglio di passare ad esp32, molto + versatile per questi utilizzi