PDA

Επιστροφή στο Forum : sms controller



michel
27-02-07, 15:08
ειμαι ενας φοιτητης του τμηματος μηχανολογιας τομεα μηχατρονικης και αυτο τον καιρο πραγματοποιω την πτυχιακη μου εργασια που εχει ως θεμα "διαχειριση συσκευων μεσω γραπτων μηνυματων sms".Δουλευω με τον μικροεπεξεργαστη atmega162v και το gsm module telit 862gsm.αυτη τη στιγμη εχω φτασει στο σημειο να λαμβανω μηνυμα απο το module οταν ενεργοποιειται μια εισοδος του μικρ/στη.Αυτο ομως που δεν εχω καταφερει ακομη ειναι : στελνοντας ενα sms στο module αυτο να το διαβαζει και στη συνεχεια να εκτελει την εντολη ανοιγοντας την καταλληλη εξοδο του μικρ/στη.Σκεφτηκα το εξης:το μηνυμα που θα του στελνω να εχει ενα κωδικο πριν την εντολη π.χ. "1850 ΟΝ1".Αυτο θελω εγω να το μεταφραζει και να ανοιγει την εξοδο 1 του μικρ/στη.Θα με βοηθουσατε παρα πολυ αν μπορουσατε να μου πειτε εστω και κατι λιγο πανω σ'αυτο το θεμα!Σας ευχαριστω πολυ!το email μου ειναι: mkapsa@gmail.com

jvourv
02-03-07, 19:55
Φίλε μου δεν είμαι σίγουρος αν έχω καταλάβει καλά τι ακριβώς εννοείς αλλά θα προσπαθήσω να σου δώσω μια κατεύθυνση. Όταν στέλνεις SMS στο telit τότε λογικά αυτό τη στιγμή που το λάβει θα σου στείλει κάποια AT εντολή που θα υποδηλώνει τη λήψη νέου SMS. Εσύ θα πρέπει να ρυθμίσεις τη UART του επεξεργαστή σου ώστε να σου προκαλεί interrupt. Στη ρουτίνα διαχείρισης της διακοπής θα πρέπει να διαβάσεις όλα τα εισερχόμενα byte της AT εντολής που θα στείλει το telit. Υστερα θα πρέπει να κάνεις μια software αποκωδικοποίηση της εντολής και να διαβάσεις το εισερχόμενο SMS. Αφού το διαβάσεις θα εξετάσεις το χαρακτήρα μετά το <ON> που θα σου υποδεικνύει ποια έξοδο του επεξεργαστή θα ενεργοποιήσεις. Έχει πολύ προγραμματισμό το θέμα.
Ελπίζω να βοήθησα...


Γιάννης

x9-125
03-03-07, 22:20
Το module που έχεις (και γενικά όλα τα gsm modem)δεν μπορεί να σε ενημερώσει πότε έρχεται γραπτό μύνημα!Πρέπει να προγραμματίσεις εσύ τον μικροελεγκτή ανά τακτά χρονικά διαστήματα να ελέγχει αν έχει έρθει νέο μήνυμα (π.χ. ανά 30sec.) Η ανάγνωση γραπτού μηνύματος δεν είναι τόσο απλή όσο η αποστολή. Το μήνυμα όταν στείλεις την εντολή για ανάγνωση σου επιστρέφει το περιέχομενο του μηνύματος σε byte 7 bit τα οποία πρέπει εσύ να τα κάνεις byte των 8 bit για να διαβάσεις το περιέχομενο του μηνύματος. Υπάρχει περίπτωση το module που έχεις να υποστηρίζει και PDU φορμάτ οπότε τα πράγματα είναι αρκετά πιο εύκολα!!!

jvourv
06-03-07, 10:55
Το modem μπορεί να σε ειδοποιήσει όταν υπάρχει νέο SMS. Ενδεχομένως να χρειάζεται μια ρύθμιση με την εντολή AT+CNMI αν δεν το κάνει με τις default ρυθμίσεις. Το wismo σου στέλνει την εντολή ΑΤ+CMTI ακολουθούμενη από κάποιες παραμέτρους όταν υπάρχει νέο SMS. Έχω την εντύπωση πως πρέπει να είναι ακριβώς η ίδια και για το telit.

pl4tonas
20-05-08, 17:05
Καλή η υπόδειξη του jvourv για το "AT+CNMI" αλλά προσωπικά προτιμώ να αποφύγω τα interrupts. (δεν τα κατέχω ακόμη)

Για έλεγχο των μηνυμάτων προτείνω την εντολή "AT+CMGL=0" που σημαίνει Read Received and Unread Incoming messages.
Αυτή θα εκτελείται κάθε μερικά δευτερόλεπτα, άρα το νέο μήνυμα θα καταλήγει στον επεξεργαστή σου για έλεγχο "εγκυρότητας".

Μετά από αυτό, θα πρέπει να σβήσεις το μήνυμα με την εντολή "AT+CMGD=1"

Παραθέτω μέρος κώδικα που είχα γράψει σε PicBasic για ανάγνωση SMS


' ++++ Read from Phone ++++
' -------------------------
reading:
GOSUB meminit
PAUSE 3000
TXD = 1
HSEROUT ["AT+CMGL=0",cr] ' <----- Read Received and Unread Incoming messages.
TXD = 0
PAUSE 2
RXD = 1
HSERIN 800, msg_old , [wait ("+CMGL:")] ' IF no +CMGL then no new SMS was read
HSERIN [skip 36, str caller\8 , skip 20, str insms \8]
RXD = 0
GOSUB meminit ' <----- Initialise Phone's SMS memory
HSEROUT ["AT+CMGD=1",cr] ' <----- Delete the "read message" (First SMS)
PAUSE 200