enc28J60 e Arduino (12)

by luca
25 comments

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…

Related Posts

25 comments

marco 27 dicembre 2012 - 23:46

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();
}

Reply
luca 11 gennaio 2013 - 08:33

Ciao Marco

non mi sono dimenticato della tua domanda 😉 sto preparando un esempio…
bye

Reply
Antonio 9 dicembre 2014 - 18:14

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…

Reply
luca 13 dicembre 2014 - 17:30

Ciao Antonio, purtroppo non possiedo uno shield con W5100… essendo ufficiale immagino che qualcuno abbia già provato/pubblicato esempi.

Reply
PIxel 4 gennaio 2013 - 07:33

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

Reply
Leandro 9 aprile 2013 - 14:28

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

Reply
luca 9 aprile 2013 - 16:12

ciao Leandro,

no, purtroppo la documentazione ufficiale è un po’ carente…

Reply
tom 2 maggio 2013 - 06:55

Hi, do you know why my arduino stopped at “Skebby SMS Demo”? No further message.

Reply
luca 2 maggio 2013 - 08:12

Hi Tom, if the sketch hangs at that point, probably Arduino can’t talk with the ethernet shield. Do the other examples/tutorials work?

Reply
Marco 24 marzo 2014 - 22:11

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

Reply
luca 13 aprile 2014 - 19:44

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.

Reply
Marco 16 aprile 2014 - 21:00

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!

Reply
Ronaldo 27 giugno 2014 - 12:09

I tried several times, but for the japan Skebby failed. exist another service?

Reply
luca 8 luglio 2014 - 08:16

Hi Ronaldo,

yes, there are plenty of SMS gateway but you need to rewrite the sketch to match their APIs…

Reply
Pasquale 15 febbraio 2015 - 08:09

Cia Luca, potresti fare la stessa cosa ma con arduino yún, aspetto con anzia tue risposte !!! (Ho un bel progetto in mente !!)

Reply
luca 16 febbraio 2015 - 22:02

Ciao Pasquale! ok, ci lavoro 😉

Reply
Fedefico 24 maggio 2015 - 16:14

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?

Reply
luca 24 maggio 2015 - 20:19

Ciao Federico, come sender devi mettere il numero con prefisso 39 (senza 0 o +), come spiegato nella documentazione di Skebby.

Reply
Luca 15 giugno 2015 - 13:22

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

Reply
luca 17 giugno 2015 - 19:46

Grazie della segnalazione! Hai l’app installata sul cellulare di destinazione vero? Il numero di destinazione lo imposti come da guida?

Reply
Nando 11 luglio 2015 - 13:59

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

Reply
luca 15 luglio 2015 - 13:18

ciao nando, guarda il primo articolo del tutorial: è spiegato come installare la libreria nel tuo IDE.

Reply
Claudio 4 gennaio 2016 - 19:36

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

Reply
luca 7 gennaio 2016 - 09:44

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ì?

Reply
Nick 13 gennaio 2017 - 17:21

Ciao Luca, grazie per i tuoi tutorial. Ti chiedo come Pasquale se puoi fare lo stesso tutorial per arduino yun.

Ciao

Reply

Leave a Comment

3 × due =