Ricevere sms su arduino..

Salve ha tutto ho un quesito da porre… da poco ho acquistato dalla libelium il modulo GPRS hilo-sagem

possiedo un arduino 2009…

volevo sapere se era possibile mandare un sms al numero della sim contenuta nel modulo GPRS in modo da interpretare il contenuto del messaggio per poi successivamente salvarlo in un file di testo…

in attesa di una vostra delucidazione vi ringrazio anticipatamente!

Ciao scusa se rispondo alla tua domanda con un’altra domanda :D.
Il modulo che hai comprato quanto costa dove posso reperirlo? :o

Se non sbaglio trovi tutto a questo link: http://www.libelium.com/squidbee/index.php?title=New_GPRS_module_for_Arduino_(Hilo_-_Sagem)
(dopo una decina di figure tratta proprio di SMS…)

si ma parla dell'invio di sms da parte del modulo...a me servirebbe il contrario la recezione del modulo...

A volte ci vuole un pochino di pazienza e costanza. Sapendo che di fatto questo modulo è un modem GPRS, e come tutti i modem risponde ad una serie di comandi AT, dovevi cercare il manuale corrispondente (il link si raggiunge alla pagina che ti avevo mandato) e cercando nell'indice si trova anche la voce "sending SMS"...

Chi cerca trova... ;)

vai a pag. 181 del relativo manuale dei comandi AT a questo indirizzo: http://www.libelium.com/squidbee/upload/2/2f/AT_Command_Set_for_SAGEM_HiLo_HiLoNC_Modules_-_5635.1_008_70248_ED07_24june09.pdf

Ciao 8-)

ti ringrazio sono riuscito a trovare tutto..ho un grosso problema...dopo aver collegato il modulo ad arduino e dopo avere collegato il tutto al pc ho fatto partire hyperterminal da windows vista configurandolo secondo le indicazioni della libellium..purtroppo quando mi connetto al modulo sulla riga di comando non mi da assolutamente nulla...sbaglio qualcosa? centra l'alimentazione del modulo? o centra lo sketch caricato su arduino?

eh .. lavorare con winzoz è sempre un problema 8-) (con (s)vista poi .. :-/ ) Hai provato con il software Arduino dal menu Tools -> Serial Monitor per vedere se ti risponde?

ieri sera dopo numerosi tentativi sono riuscito finalmente a comunicare con l'hyperterminal funziona tutto alla perfezione...

in sostanza quello che vorrei realizzare è un gateway sms..voglio fare in modo che inviando sms al modulo il contenuto del messaggio viene trascritto su un file di testo e successivamente questo file deve essere interpretato da uno script in php che lo carica all'interno di una pagina web... in parole povere creare un blog dove i messaggi al posto di scriverli da un form nel sito web li invio per sms...

il mio problema ora è riuscire a capire se si può fare in modo di attivare la funzione per scrivere su file di testo alla ricezione del messaggio...ho letto i comandi At e nn ho trovato nulla del genere... infatti pensavo di creare un loop infinito in modo che quando arrivasse un messaggio venisse automaticamente scritto sul file di testo..

si può fare una cosa del genere?? e soprattuto si può mettere il contenuto di un responso di un comando AT in una variabile?

In informatica/elettronica è possibile quasi tutto ;) basta armarsi di pazienza, costanza e tanta voglia di fare ricerca...

Quello che però mi lascia un tantino perplesso è l'uso di Arduino e relativa scheda GPRS quando è possibile fare il tutto con un normalissimo cellulare anche di vecchia generazione che abbia la funzione di modem documentabile (su eBay di vecchi cell da poter usare c'è pieno e costano meno della tua soluzione).

Come se non bastasse, esiste in rete software open source che fa già quello che tu chiedi, ed il collegare il tutto a PHP non dovrebbe essere certo un problema... (quando ricevi un SMS lo registri sull'hd con un dato nome che contenga un nr progressivo e periodicamente da apache/php guardi se esistono file non letti e li elabori, eventualmente cancellando i vecchi)

L'hardware che ti sei messo in casa avrebbe mille altri possibili usi, in particolare nella domotica .. non ci avevi pensato?

bhe si ma non riesco a capire come fare in modo di eseguire determinate parte di codice all'arrivo di un sms, non esiste un comando AT che verifica se la memoria è piena o no

Allora, vediamo se ti seguo.. :-? Premessa: non avendo letto tutta la doc della scheda che hai acquistato suppongo che questa abbia una sua memoria interna per la ricezione di sms (come la SIM stessa) e che però non abbia alcun sistema per avvisare Arduino di quando è disponibile un msg..

1) su Arduino si dovrà fare un piccolo programma che con una certa periodicità (esempio: ogni 30 secondi) verifica quando e se ci sono nuovi messaggi medianti comandi AT; 2) se è presente uno o più messaggi, leggo il primo messaggio della lista, lo invio (tramite seriale/usb) e tramite comando AT lo cancello dalla SIM; 3) sul PC avremo un piccolo programma sempre in attesa di comunicazioni, che quando riceve una comunicazione la registra in un file sul PC dandogli un nome così codificato: AAMMGGOOMMSS.txt dove AA=anno, MM=mese, GG=giorno, OO=ora, MM=minuto primo, SS=minuto secondo (così si evitano possibili nomi doppi e si ha una cronologia certa); 4) sempre sul PC avrò attivo un server Apache con PHP/MySQL, con il quale farò in modo che periodicamente (es: ogni minuto) sia letta la directory contenente i file registrati da Arduino (e quando presenti nuovi) elaborandoli per gli scopi prefissi (riportando il contenuto del msg su tabella SQL per gli usi necessari e cancellando il relativo file su PC) ...

Ora dimmi se il processo è corretto e dove trovi difficoltà nel realizzarlo, così vediamo cosa si può fare, ok?

il problema è che mediante At non posso verificare se sono presenti messaggi posso al massimo salvare l’ultimo messaggio ricevuto…se esistesse un modo per verificare la presenza di messaggi si può fare in modo di eseguire parti di codice e ciò sarebbe utile per fare qualche lavoretto di domotica…comunque i comandi riguardanti gli sms sono i seguenti:

8.1. Preliminary comment
8.2. Parameters definition
8.3. +CMGD Command : Delete SMS message
8.4. +CMGF Command : Select SMS message format
8.5. +CMGL Command : List SMS messages from preferred store
8.6. +CMGR Command : Read SMS message
8.7. +CMGS Command : Send SMS message
8.8. +CMGW Command : Write SMS message to
8.9. +CMSS Command : Send SMS message from
8.10. +CNMI Command : New SMS message indication
8.11. +CSCB Command : Select cell broadcast message
8.12. +CSCA Command : SMS service center address
8.13. +CSMP Command : Set SMS text mode parameters
8.14. +CSMS Command : Select Message service
8.15. +CPMS Command : Preferred Message Storage
8.16. +CSDH Command : Show text mode parameters
8.17. +CSAS Command : Save settings
8.18. +CRES Command : Restore settings

come vedi non ci sono comandi per operazioni sulla memoria…in ogni caso i messaggi vengono salvati su Sim il modulo non possiede una sa memoria in ogni caso il comando per la lettura è il seguente:

Syntax
AT+CMGR=

Response

if PDU mode (+CMGF=0) and command successful:
+CMGR: ,[],

Notes
? Execution command returns message with location value from preferred
message storage to the TE. Status of the message and entire message
data unit is returned.
? With AT+CMGR, if status of the message is ‘received unread’, status in the storage
changes to ‘received read’.
? is optional, it is NOT used.

ora bisogna vedere se si può fare un cosa del genere:

var = serial.print(“AT+CMGR=1”)

ovvero salvare il valore del comando che va a leggere il messaggio in prima posizione in una variabile in modo da salvala sul file…

Ciao, allora: ho dato uno sguardo al manuale e se il mio pessimo inglese non mi tradisce, direi che le cose stanno così:


Con questo comando ottieni lo stato delle “cartelle” dove sono archiviati gli SMS, ovvero la quantità e il numero.


Con questo comando leggi l’elenco degli SMS presenti nella SIM in base a che sarà:

  • 0 per REC UNREAD (ricevuti non letti)
  • 1 per REC READ (ricevuti letti)
  • 2 per STO UNSET (archiviati non spediti)
  • 3 per STO SENT (archiviati e spediti)
  • 4 per ALL (l’elenco completo di tutti i messaggi ricevuti e scritti/spediti)
    Nella risposta trovi anche il parametro che identifica ciascun SMS…


Con questo comando elimini l’SMS indicato da nella SIM


Con questo comando leggi l’SMS indicato da nella SIM

Che dire: occorre lavorare molto con le funzioni stringa del C per estrapolare i vari dati, ma non vedo particolari difficoltà e anche la memoria di Arduino dovrebbe essere sufficiente se ti limiti ad elaborare solo un SMS alla volta (leggi, spedisci a PC e cancelli da SIM | oppure: ricevi da PC, invii a scheda GPRS, cancelli da SIM)

In merito poi alla tua richiesta [var = serial.print(“AT+CMGR=1”)] direi che non sarebbe male se tu ti studiassi le funzioni di gestione della seriale di Arduino (magari guardando qualche esempio d’uso)…

Non pretenderai che tutto il lavoro lo faccia qualcun’altro, vero? :-/
Altrimenti ti perdi tutto il divertimento!!! :wink:

sei stato molto chiaro e ti ringrazio molto...ma nonostante tutto non riesco a trovare da nessuna parte come si fa a far scrivere su un file esterno alcuni parlano di script in vbs altri di moduli aggiuntivi...leggendomi le referenze sulle seriali nn trovo nulla!

“alcuni parlano di script in vbs” … questa frase mi ha fatto sorgere qualche dubbio… :-?

Ti dispiace dirmi quali esperienze hai in programmazione (linguaggi ed esperienze più significative) e in elettronica digitale (diciamo in logica e basi di elettronica)?
A questo punto ne ho bisogno altrimenti temo di darti informazioni che puoi anche non capire, ma può anche essere che tu possa usare termini a me poco abituali perché magari abituati a lavorare in due “mondi” diversi (es: Windows e programmazione sotto windows, oppure linux e prog. relativa, o ancora MacOS x e relativa programmazione - ma anche per l’elettronica: tipi di micro usati ecc)

Tutto questo perché in base alla mia esperienza, vbs = Visual Basic Script … che nulla o poco ha a che fare con Apache e soprattutto a PHP (per non parlare di Arduino con il quale non ha proprio nulla a che fare)

Ok? :wink:

leggi qua http://timewitharduino.blogspot.com/2009/05/getting-arduino-to-write-to-or-read.html

Invece di chiedere che si legga quello che vuoi tu, perché non rispondi alle mie donande sulle tue conoscenze?

Comunque la mia ultima risposta te l'ho già postata nell'altra discussione che hai scorrettamente aperto sullo stesso tema che stavi già trattando con me >:( Per me questo topic è chiuso! :-X

ciao joker, sei riuscito infine a leggere gli sms tramite arduino?!? mi auguro di si, perchè vorrei fare una cosa simile, e magari potresti darmi qualche suggerimento... :p a me piacerebbe anche riuscire a ricevere anche chiamate.. pensi sia fattibile con lo shield che hai menzionato? ciao harkonnen

Ciao, ti consiglio di dare un'occhiata a SMS server tools di Stefan Frings

http://smstools.meinemullemaus.de/

Si collega al PC un modem con interfaccia seriale e il demone smsd si preoccupa dei dettagli della comunicazione tramite comandi AT con il modem. Scrive gli SM in arrivo in normali file di testo, facilmente interpretabili con PHP. Per inviare un SM basta creare un file di testo con determinati campi in una cartella monitorata dal demone, e non appena compare il file, lui lo invia.

L'ho utilizzato in un progetto di telecontrollo in cui tramite un web server e un piccolo sito dinamico in Perl permettevo all'utente di inviare SM e visualizzare tutti quelli ricevuti.

Lo so, Arduino qui non c'entra, ma spero che da questa segnalazione tu possa trarre ispirazione o qualche suggerimento utile.

si mromani, c'entra poco con arduino :p però è una cosa interessante anche questa :) alla fine ciò che serve è creare un'applicazione che scriva file di testo in una determinata directory, se non ho capito male :p. grazie per il suggerimento. gli darò senz'altro un'occhiata. ciao harkonnen