PICBasicPro ile SMS..

Başlatan fsan, 05 Kasım 2003, 21:01:13

fsan

arkadaslar ben malesef zaman bulup bu projeji pratik olarak gerceklestiremedim ama sizin olurda yaparsaniz buraya sonucu bildirin bir zahmet.

ayrica elestirileriniz ve ve tavsiyelerinizi de yazarsaniz iyi olur.

axanc

selam...

gerçekten şifre uzun... garip bir uygulama olduğu bir gerçek ama arkdaşın bir nedeni vardır elbet, hazır konu açılmışken neden sitede tamamen projelerden oluşan bir bölüm açılmıyr, en son tartışmaları sürüyordu... :)
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

fsan

PIC ile SMS göndermek/okutmak icin:

projede kullanilacak GSM-telefonda olmasi gereken özellikler sunlar:

1. icinde modemi olmasi lazim.
2. serial data kablosu olmasi lazim ( bilgisayara baglamak cin, semasini bulabilirseniz kendinizde yapabilirsiniz)
3. serial BAUD rate ayarlarini ögrenebilmek lazim. (siemens S25: 19200  8N1 ile calisir)
4. asil önemli olan: bu telefonun kablo üzerinden "AT" komutlarini desteklemesi lazim
(yani telefonu bir bilgisayara baglayip, bir terminal programda baud ayarlarini dogru yaptiktan sonra "AT" gönderince "OK" cevabi alinmasi lazim)

yukaridakiler tamam ise telefonun hangi AT komutlarini destekledigini gösteren dosyalarini bulup mesajlari hangi formatta (AT+CMGF=1 - text format veya AT+CMGF=0 - pdu format) gönderdigini ögrenip ona göre program yazilir.

hogurlu

AT+CMGF=1 - text format
AT+CMGF=0 - pdu format

selam

benim merak ettigim sey su;

türkiyedeki operatörlerin sms ile ilgili kodları sınırlaması olayı gercekmi yoksa bir soylentimi :?:   yani  sms alıp gonderebiliyormuyuz hala..  

ikincisi ise PDU ve text format arasındaki temel

fark nedir. yani sms gondermek icin text formatını da kullanabilirmiyiz.  :?  

son sorum ; text modda komutları telefona dogrudan karakterler halinde mi gonderiyoruz.

yalnız

cevaplarınızda biraz acıklayıcı olursanız sevinirim.  bu konuda yapılan prıjeler ticari olabilir ama bu kadarcık yardımdan da kimse zarar gormez sanırım :roll:

fsan

kardes genelde yardimci olmak isteriz ama bu konuda daha henüz cogumuz amatör sayiliriz :)

evet, telefon text

formati destekliyor ise:  

["AT+CMGS=6944968378",13,"Merhaba, Ne var neyok?",26,13]

burada "6944968378" SMS mesaji alacak olan kisinin telefon

numarasi

http://www.picproje.net/forum/viewtopic.php?t=2192&highlight=

hogurlu

selam

ben aspmon ( advanced serial port monitor ) yazılımını kullanacagım bu is icin.  bilgisayarın seri portundan

karakter halinde veri cıkısı alabiliyoruz sanırım bu yazılımla.

bendeki telefon da  t10s sanırım icinde dahili modemi var bunların.  data kablosunu yapıp bir deneyecegim.  sonucuda burdan

haber veririm merak edenler icin.

***  Bu arada bugün İstanbul'da yapılan çirkin saldırıları şiddetle kınıyorum.  Sebebi ne olursa olsun, kim hangi amacla yapmıs olursa olsun; orada

hayatını kaybeden ve tamamen masum olan vatandaşlarımızın bu gece evlerinde yasanan acıyı bir Türk genci olarak tüm kalbimle paylaşıyorum. Allah geride kalanlara sabır versin. ***

armys2000

Dostum fsan gelen mesaj modu PDU mode burda karakterlerin hepside birer hex tir sen bu pdu modundaki karakterleri text e çevirmen lazım

aşağıda ki code şuan hatırlamıyorum 5 yıl önce yazmıştım sanırım  64 karakter pdu yu texte çeviriyordu
veri2 dizisi text , gelen her bir karakter
veri3 te pdu ya dönüşmüş hali

'***************************************** ********************************************************
'*****************************************   TXT TO PDU  ******************************************
txt_to_pdu: i=7
           For addr=0 TO 6
              veri3[addr] =(( veri2[addr] >> addr ) | ( veri2[(addr+1)]  << i ))
              i=i-1
              'veri3[0] =(( veri2[0] >> 0 ) | ( veri2[1]  << 7 ))
              'veri3[1] =(( veri2[1] >> 1 ) | ( veri2[2]  << 6 ))
              'veri3[2] =(( veri2[2] >> 2 ) | ( veri2[3]  << 5 ))
              'veri3[3] =(( veri2[3] >> 3 ) | ( veri2[4]  << 4 ))
              'veri3[4] =(( veri2[4] >> 4 ) | ( veri2[5]  << 3 ))
              'veri3[5] =(( veri2[5] >> 5 ) | ( veri2[6]  << 2 ))
              'veri3[6] =(( veri2[6] >> 6 ) | ( veri2[7]  << 1 ))
           Next addr

           i=7
           For addr=7 TO 13
               veri3[addr] =(( veri2[(addr+1)] >> (addr-7) ) | ( veri2[(addr+2)]  << i ))
               i=i-1
               'veri3[7] =(( veri2[8]      ) | ( veri2[9]  << 7 ))
               'veri3[8] =(( veri2[9] >> 1 ) | ( veri2[10] << 6 ))
               'veri3[9] =((veri2[10] >> 2 ) | ( veri2[11] << 5 ))
               'veri3[10]=((veri2[11] >> 3 ) | ( veri2[12] << 4 ))
               'veri3[11]=((veri2[12] >> 4 ) | ( veri2[13] << 3 ))
               'veri3[12]=((veri2[13] >> 5 ) | ( veri2[14] << 2 ))
               'veri3[13]=((veri2[14] >> 6 ) | ( veri2[15] << 1 ))
           Next addr
           
           i=7
           For addr=14 TO 20
               veri3[addr] =(( veri2[(addr+2)] >> (addr-14) ) | ( veri2[(addr+3)]  << i ))
               i=i-1
              'veri3[14]=((veri2[16]      ) | ( veri2[17] << 7 ))
              'veri3[15]=((veri2[17] >> 1 ) | ( veri2[18] << 6 ))
              'veri3[16]=((veri2[18] >> 2 ) | ( veri2[19] << 5 ))
              'veri3[17]=((veri2[19] >> 3 ) | ( veri2[20] << 4 ))
              'veri3[18]=((veri2[20] >> 4 ) | ( veri2[21] << 3 ))
              'veri3[19]=((veri2[21] >> 5 ) | ( veri2[22] << 2 ))
              'veri3[20]=((veri2[22] >> 6 ) | ( veri2[23] << 1 ))
           Next addr
           
           i=7
           For addr=21 TO 27
               veri3[addr] =(( veri2[(addr+3)] >> (addr-21) ) | ( veri2[(addr+4)]  << i ))
               i=i-1
                 'veri3[21]=((veri2[24]      ) | ( veri2[25] << 7 ))
              'veri3[22]=((veri2[25] >> 1 ) | ( veri2[26] << 6 ))
              'veri3[23]=((veri2[26] >> 2 ) | ( veri2[27] << 5 ))
              'veri3[24]=((veri2[27] >> 3 ) | ( veri2[28] << 4 ))
              'veri3[25]=((veri2[28] >> 4 ) | ( veri2[29] << 3 ))
              'veri3[26]=((veri2[29] >> 5 ) | ( veri2[30] << 2 ))
              'veri3[27]=((veri2[30] >> 6 ) | ( veri2[31] << 1 ))
           Next addr    
Return

'*************************************************************************************************************

'*******************************  GELEN MESAJIN TEXT e DÖNÜŞTÜRÜLMESİ    *************************************
pdu_to_txt: veri3[0]= veri1[7]   << 1
           veri3[0]= veri3[0]   >> 1
           i=7
           For addr=1 TO 6
           veri3[addr]=(veri1[(addr+7)]   << (addr+1))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+6)]  >> i)
           i=i-1
           Next addr
           
           veri3[7]= veri1[13]   >> 1    ' 8 karakter 7 dijit octect
           veri3[8]= veri1[14]   << 1
           veri3[8]= veri3[8]    >> 1
           i=7
           For addr=9 TO 14
           veri3[addr]=(veri1[(addr+6)]   << (addr-7))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+5)]  >> i)
           i=i-1
           Next addr
           
           veri3[15]= veri1[20]   >> 1
           veri3[16]= veri1[21]   << 1
           veri3[16]= veri3[16]   >> 1
           i=7
           For addr=17 TO 22
           veri3[addr]=(veri1[(addr+5)]   << (addr-15))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+4)]  >> i)
           i=i-1
           Next addr
           
           veri3[23]= veri1[27]   >> 1
           veri3[24]= veri1[28]   << 1
           veri3[24]= veri3[24]   >> 1
           i=7
           For addr=25 TO 30
           veri3[addr]=(veri1[(addr+4)]   << (addr-23))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+3)]  >> i)
           i=i-1
           Next addr
           
           veri3[31]= veri1[34]   >> 1
           veri3[32]= veri1[35]   << 1
           veri3[32]= veri3[32]   >> 1
           i=7
           For addr=33 TO 38
           veri3[addr]=(veri1[(addr+3)]   << (addr-31))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+2)]  >> i)
           i=i-1
           Next addr
           veri3[39]= veri1[41]   >> 1
           
           veri3[40]= veri1[42]   << 1
           veri3[40]= veri3[40]   >> 1
           i=7
           For addr=41 TO 46
           veri3[addr]=(veri1[(addr+2)]   << (addr-39))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr+1)]  >> i)
           i=i-1
           Next addr
           veri3[47]= veri1[48]   >> 1
           
           veri3[48]= veri1[49]   << 1
           veri3[48]= veri3[48]   >> 1
           i=7
           For addr=49 TO 54
           veri3[addr]=(veri1[(addr+1)]   << (addr-47))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr)]  >> i)
           i=i-1
           Next addr
           
           veri3[55]= veri1[55]  >> 1
           veri3[56]= veri1[56]  << 1
           veri3[56]= veri3[56]  >> 1
           i=7
           For addr=57 TO 62
           veri3[addr]=(veri1[(addr)]   << (addr-55))
           veri3[addr]=(veri3[addr]   >> 1) | (veri1[(addr-1)]  >> i)
           i=i-1
           Next addr


bu konuda daha fazla detay veremem özür bu code la işin içinden çık


bu konuda en   iyi kaynak PDU protokolü onu incele

fsan

Alıntı yapılan: "armys2000"Dostum fsan gelen mesaj modu PDU mode burda karakterlerin hepside birer hex tir sen bu pdu modundaki karakterleri text e çevirmen lazım

aşağıda ki code şuan hatırlamıyorum 5 yıl önce yazmıştım sanırım  64 karakter pdu yu texte çeviriyordu. veri2 dizisi text , gelen her bir karakter veri3 te pdu ya dönüşmüş hali

bu konuda daha fazla detay veremem özür bu code la işin içinden çık

sağol dostum ellerine saglik.
Su anda gelistirmekte oldugum bir RF uyari sistem projem var, ve ileride buna birde SMS option ekleme ihtimali olacagi söyleniyor. Bakalim artik ne gibi bir yöntem uygulayacagiz. Belki en iyisi text modu destekleyen bir GSM modul kullanmak ama biraz pahali bir secenek gibi gözüktügü icin belki yine bir Siemens telefon kullanarak halledecigim.

tesekkürler

electrotechnics

Arkadaşlar benimde bu konuda çalışmam var. size bazı örnek kodları göndereyim.at destekleyen telefonu.hypertermina terminal programı ile test ederiz.
telefona "AT" komutu gönderildiginde bize "OK" cevabı veriyorsa.telefonumuz at komutunu destekliyor demektir...

Gsm şebekesi ile röle kontrolü sisteminin devre şeması Şekil 9.1'de gösterilmiştir. Devrede mikrodenetleyici olarak PIC16F877 kullanılmıştır. Cep telefonu devrenin seri port girişine bağlıdır. Seri port girişi de MAX232 (lojik seviye dönüştürücü 5-12V, 12-5V) ile mikrodenetleyicinin B Portuna bağlıdır. Giriş  kontrol beslemesi transformatör ve regüle devresi ile 5V gerilim seviyesine düşürülüp B Portuna bağlanmıştır. Çıkış olarak LCD ekran kullanılmıştır. LCD ekran ise mikrodenetleyicinin D Portuna  bağlanmıştır. Çıkış olarak 4 adet röle kullanılmıştır bu röleler mikrodenetleyicinin C Portuna bağlanmışlardır. Sistem devredeyken, kişi sulama motorunun kontrolünü SMS ile gerçekleştirmektedir. Kişi istediği zaman sistemin herhangi bir çıkışını değiştirmek istiyorsa bu çıkışla ilgili komutla bu işlemi gerçekleştirmektedir. Öte yandan, sistem sürekli olarak motora gelen enerjiyi kontrol eder. Eğer enerjide bir kesilme olursa kullanıcıya çağrı yaparak bildirir. Sistem telefonun sinyal kalitesi ve batarya durumu sürekli olarak LCD'ye yazar.




örnek proteus devre şemasına aşagıdaki linkten ulaşabilirsiniz...


ayrıca
alıntı olan bir yazı daha eklemek istiyorum...
Nokia AT Komutları

Elinizdeki Nokia telefonla hyperterminal gibi bir programla arama yaptırabilir, yönlendirebilir, sms okuyup gönderebilirsiniz**


**Bu komutlar bazı Nokia telefonlarda kullanmak üzere yapılmıştır. Bazı telefonlar bu komutlara yanıt vermeyebilir verse bile hatalı sonuçlar verebilir. PC'de kullanılan AT komutları modemler içindir.

AT: ATtention command – uyarma komutu

Her komut AT ön eki ile başlar

AT : ok sonucu vermesi gerekir

AT&D : DTR &Q0 seçilmişse yoksayılmıştır

AT&D1 : Eğer arama aktif ise DTR ON-OFF çevirimiçi komuta geçiş yapar

AT&D2 : Arama kapatılır

AT&D3 : Arama kapatılır ve data parametreleri başlangıç değerine ayarlanır

AT*NOKIATEST : ok sonucu vermesi gerekir

AT+CBC : cihazın batarya durumunu gösterir
Sonuç: <bcs> , <bcl>
<bcs> : 0:pile bağlı 1:pile bağlı ancak gücü burdan almıyor 2:pil bağlı değil 3:güç hatası
<bcl> : 0:pil yok 1...100:pil %1...100 dolu

AT+CCFC : Arama yönlendirme durumu
Komut : AT+CCFC=<nedeni>,<mod>,<numara>,<tip>,<sınıfx>,<alt adres>,<sa tipi>,<süre>
<nedeni> : 0:koşulsuz 1:meşgul 2:cevapsız 3:ulaşılmama 4:tüm yönlendir 5:koşulsuz tüm yönlendir
<mod> : 0:iptal 1:aktif 2:durum 3:kayıt 4:sil
<numara> : tel.numarası
<tip> : + kullanılacaksa 145 kullanılmayacaksa 129 <sa tipi> tarafından belirlenmiş dizgi tipi alt adres
<sa tipi> : varsayılan 128
<sınıfx> : 1:ses 2:data 4:fax
<süre> : yönlendirme gecikme süresi 1-30 arası değer

AT+CGMI : telefon üretici ID'sini gösterir

AT+CGMM : telefon model ID'sini gösterir

AT+CGMR : telefon sw ve hw versiyonlarını gösterir

AT+CGSN : telefon seri numarasını gösterir

AT+CIMI : IMSI'yi gösterir

AT+CIND : telefon durumu
"battchg" : şarj durumu (0-5)
"signal" : sinyal seviyesi (0-5)
"service" : servis uygunluğu (0-1)
"sounder" : beeper durumu (0-1)
"message" : mesaj durumu (0-1)
"call" : arama (0-1)
"vox" : sesle arama (0-1)
"roam" : roaming (0-1)
"smsfull" : mesaj hafızası dolu (0-1)

AT+CKPD : tuş takımı
Komut : AT+CKPD=<tuş>,<süre>

AT+CLIP : numarayı gösterme
Komut : AT+CLIP=<n> <n> :varsayılan 0

AT+CLIR : numara gizleme
Komut : AT+CLIR=<n> <n> : varsayılan 0

AT+CMGD : mesaj silme
Komut : AT+CMGD=<index> <index> : mesajın bulunduğu konum

AT+CMGR : mesaj okuma
Komut : AT+CMGR=<index>

mesaj gönderme : önce mesaj tipini belirleyin (yazı) AT+CMGF=1 sonra mesaj mrkz.no'yu girin AT+CSCA="05329010000" alıcının numarasını girin AT+CMGS="alıcı no" mesajınızı yazın sonra CTRL+Z tuşlarıa basın

 

mesaj alma : mesaj tipini belirleyin AT+CMGF=1 gelen tüm mesajları okumak için AT+CNMI=1,2,0,0 komutunu girim

 

AT+CMSS : kaydedilmiş mesajı gönderme
Komut : AT+CMSS=<index>,<da>,<toda>
<index> : mesajın bulunduğu konum
<da> : numara
<toda> : + kullanılacaksa 145 kullanılmayacaksa 129

AT+COPS : şebeke seçimi
Komut : AT+COPS=<mode>,<format>,<oper>
<mode> : 0:otomatik 1:manuel 2:şebekeden çıkış 4:man/auto
<format> : 1:uzun 2:kısa 3:mcc+mnc

AT+CPBS : rehber hafıza tipini belirler
Komut : AT+CPBS=<storage>
<storage> : 
"FD":SIM sabit aramalı rehber 
"LD":SIM son aramalı rehber 
"ME":tel. hafızası 
"MT":tel.hafızası+SIM 
"SM":sim rehberi 
"TA":TA rehberi

AT+CPMS : mesaj hafıza tipini belirler
Komut : AT+CPMS=<mem1>,<mem2>,<mem3>
<mem1> : okuma-silme 
<mem2> : yazma-gönderme
<mem3> : alma

AT+CSCA : mesaj merkez numarası
Komut : AT+CSCA=<sca>,<tosca>
<sca> : mesaj merkezi numarası
<tosca> : + kullanılacaksa 145 kullanılmayacaksa 129

AT+CSCB : hücre yayını mesaj tipini belirler
Komut : AT+CSCB=<mode>,<mids>,<dcss>
<mode> : 0:<mids> ve <dcss> ayarları geçerli 1:geçerli değil

AT+CSCS : karakter tipini belirler
Komut : AT+CSCS=<chset><chset>
"GSM":GSM varsayılan alfabe
"HEX":kullanılmaz
"IRA":Uluslararası Referans Alfabesi
"8859-1":latin-1 bu varsayılan değerdir

AT+CSQ : Sinyal gücü
0 : < -113 dBm
1 : < -111 dBm
2-30 : -109....-53 dBm
31 : > -51 dBm
99 : belirsiz

ATA : aramaya cevap verme

ATH : arama kapatma

ATDT : arama yapma
Komut : ATDT xxxxxxxxxxx;

AT+CPIN : pin girme
Komut : AT+CPIN="pin"

GPRS AT komutları

APN'yi belirleme : AT+CGDCONT=,,"wap";

GPRS'i başlatma : ATDT *99#



elimden geldigi kadar sorularınızı yanıtlamaya calışacagım.işim dolayısıyla fazla online olamıyorum...

at komutlarını destekleyen modemler için...at destekleyen telefonlardada gecerli bu kodlar.
EKSTRA BİLGİ

Modem Ayarları At Komutları

AT : ATTENTION : Dikkat komutu
ATA : Modem son girilen komutu kontrol eder. 
AT % C : İletilen verinin sıkıştırılmasını sağlar.
0 = Bilgi sıkıştırılsı n
1=bilgi sıkıştırılmasın 
AT & C : Bağlantı durumunu belirtir.
0 = Bağlantı durumu her zaman açık
1= Bağlantı anında açık 
ATD : Bir telefon numarası çevirmek için kullanılır. ATD komutu ile birlikte bazı artıkıllarda kullanılmaktadır. Bu artıkıllar :
P = Çevirmeli telefon
T = Tonlu telefon 
R = Aramadan sonra cevap ver
W = İkinci cevir sinyalini bekle 
S = Hafızadaki numarayı çevir.
", " = Numara çevirmeden önce hat sinyalini bekle
" ; " = Komut moduna dön
" / " = 0.125 sn bekle

ATD KOMUTU AŞAĞIDAKİ GİBİ KULLANILIR

ATD: ( seçenek) ( seçenek) (tel. nr ) < enter >. 
ATG : Koruyucu ton ayarlaması Ülkeler arası konuşmalarda gereklidir.
ATZ : Reset geçerli komutların sıfırlanması. 
ATDT # : Tonedial:Sesli çevirme.
ATDP# : Pulsedial:Titreşimli çevirme.
AT&W:Modem belleğine yapılan ayarlamaları bir sonraki kullanımda da kullanılmasına olanak verecek şekilde kaydeder.
AT&F:Modemimizin fabrika ayarlarına dönmesini sağlar.
ATX0:Modemin. evir sesi ve meşgul sesi beklemesini önler.
ATX3:Modemin arama esnasında çevir sesi beklemesini engeller.
ATMn:Modem hoparlörünü kontrol eder.N değişken sıfır ile üç arasında değişir. 0=hoparlör kapalı. 1=hoparlör bağlantı kurulana kadar açık.
2=hoparlör açık 3=hoparlör çevirme sırasında açık.


Kolay Gelsin İyi Çalışmalar...

raprap17

merhabalar
öncelikle açıklayıcı bilgilerinizden ötürü teşekkür ederim.
"Cep telefonu ile sms kontrolü" konulu proje aldım.
Hocanın verdiği komut seti ing .Türkçesini  bulabilirmiyim diye  kara kara düşünüyodum.    :idea:
Neyi arıyorsan osun sen ! Hz. Mevlana