! GSM Modül İle İnternet Uygulamaları !

Başlatan MrDarK, 30 Haziran 2012, 16:14:44

polleme

Alıntı yapılan: MrDarK - 15 Aralık 2013, 00:27:35
Evet o linki yazman sayfayı getir anlamında get oluyor, ama o linki yazabilmen için önce o ip'ye bağlanmış olman gerekiyor. Düşük seviyeye inmeye özen göster o zaman anlayabilirsin. Bu tıpkı bir ledin yan sön yapmadan önce led'in çıkış olduğunu ayarlamak gibi birşey.

O linki yazabilmek için o IP'ye bağlanmış olmak gerekmiyor aslında. O linki yazıp Enter'a bastığınızda o IP'ye 80 nolu TCP porttan bağlantıyı o zaman kuruyorsunuz. Yani bir browser üzerinde bir URL link yazıp bağlan demek, o IP adrese "HTTP bağlantı kur" demektir, bilgisayar da bunu yapar. Bağlantı kurulduktan sonra da veri gönderip almaya başlayabilirsiniz. TCP connection-oriented bir protokoldür, o nedenle bağantı kurduktan sonra sonlandırıncaya kadar sürekli bilgi gönderip alırsınız, işiniz bitince de bağlantıyı sonlandırmanız gerekir.

MrDarK

Alıntı yapılan: polleme - 15 Aralık 2013, 00:58:40
O linki yazabilmek için o IP'ye bağlanmış olmak gerekmiyor aslında. O linki yazıp Enter'a bastığınızda o IP'ye 80 nolu TCP porttan bağlantıyı o zaman kuruyorsunuz. Yani bir browser üzerinde bir URL link yazıp bağlan demek, o IP adrese "HTTP bağlantı kur" demektir, bilgisayar da bunu yapar. Bağlantı kurulduktan sonra da veri gönderip almaya başlayabilirsiniz. TCP connection-oriented bir protokoldür, o nedenle bağantı kurduktan sonra sonlandırıncaya kadar sürekli bilgi gönderip alırsınız, işiniz bitince de bağlantıyı sonlandırmanız gerekir.

Hocam ben GSM Modül açısından konuşuyordum :) Sonuçta bunların birçoğunu öğrenmeden önce benim için her biri birer hayal ürünüydü bu kadar kolay olan birşey bu modülde neden bu kadar zor diye düşünmeye başlamıştım ki aslında pencereye uzaktan bakmak gerek, herşeyi tek tek adım adım yapmak gerekiyor. ASM gibi bişi belkide :) Ahh Ahh ne günlerdi...
Picproje Eğitim Gönüllüleri ~ MrDarK

polleme

GSM modül için haklısın. Evet bilgisayarlarda bir adımda yapılan işler için alt seviyede nelerin yapıldığını düşününce şaşırmamak elde değil. Ama o seviyiede düşünmeyince de yeni birşey üretmek çok zor.

cemil43

Tekrar Merhabalar,

SIM900 modemle veri göndermeye çalıştım.(Operatörüm: Avea)
Normal de Chrome tarayıcıdan;

http://mysite.com/receive.php?value0=34 gibi bir adres yazınca, veri tabanını kontrol ettiğimde bu kaydın yapılmış olduğunu görüyorum.
Fakat, Bunu sim900 ile HyperTerminal üzerinden  yapmayı başaramadım.

HyperTerminal üzerinden yolladığım komutlar ve aldığım cevaplar aşağıda ki gibidir;

AT
OK

AT+CGATT=1
OK

AT+CGDCONT=1,"IP","internet"
OK

AT+CSTT="internet","wap","wap"
OK

AT+CIICR
OK

AT+CIFSR
10.56.62.72

AT+CIPHEAD=1
OK


at+cipstart="TCP","www.mysite.com","80"
OK

CONNECT OK


AT+CIPSEND
 >GET /receive.php?value0=34 HTTP/1.0
SEND OK


Burada ki yanlış ne olabilir acaba?

cemil43

#49
Tekrar Merhabalar Arkadaşlar,
Bir önceki mesajımda sorduğum sorunun yanıtını buldum, sizlerle paylaşmak istedim;

Aslında bu başlık altında daha önce bu sorumun cevabını MrDark ve armsistem vermişti.
Fakat <CR>, <LF> karakterlerini HyperTerminal'da nasıl gireceğimi anlayamamıştım.

Benim sorun yaşadığım yer GET /receive.php?value0=34 HTTP/1.0 yazdıktan sonra <CR><LF>
<CR><LF><SUB> kombinasyonunu Hyper Terminal'dan yazamamamdı.
Belki çok bilinen bir şey ve bir çoğunuz biliyorsunuzdur(fakat ben bugün daha yeni öğrendim), yine de benim gibi sıkıntı çekebilecek arkadaşlar için;

CR-> Enter
LF-> CTRL+Enter
SUB-> CTRL+Z



mekatronik_can

Merhaba arkadaşlar,

Bende MrDarK ın çok güzel özetlediği şekilde denemelerimi yaptım ve sistemi çalıştırdım. Ufak notlarımı, karşılaştığım problemleri vs vs paylaşmak istedim.

Öncelikle MrDarK'a çok teşekkür ederim.

Şimdide neler yaptığımdan bahsedeyim. Kullandığım gsm modülü Telit 865-Dual (Ben İstanbulda yaşıyorum ama Ankara'da olan  ve sıklıkla alışveriş yaptığım bir firmadan internet üzerinden sipariş ettiğim GSM-Click modülünü kullanıyorum. İçerisinde Telit 865 bulunuyor. Google dan gsm-click yazıp tr de arattığınızda kolaylıkla bulabilirsiniz, olmadı candizdaroglu at gmail . com dan bana ulaşabilirsiniz.)

Bu modülün üzerinde hem 3.3v hem 5v beslemesi mevcut. Ben denemeleri yapmak üzere arduino uno için, ara bir devre yaparak 3.3v üzerinden modülü bağladım. Modülün tx ini arduino nun rx ine direk bağladım. Arduino nun tx ini modülün rx ine ise voltage divider dirençleri ile bağladım.

İlk denemelerim arama ve sms atma üzerineydi (gms modülle uğraşmaya yeni başlayanlar için tavsiyem budur).  Bunları başardıktan sonra, geliştirdiğimiz ürün için direk http uygulamasına geçtim.

Öncelikle MrDarK ın paylaştığı php kodunu server a attım ve hem chrome hem firefox tan data göndermeyi başardım.

Ardından gsm modülünü kullanarak at komutlarıyla aynı server ve data bilgileriyle http socket connection başlattım. Ancak GET ve HOST işlemlerimden sonra aldığım cevap "HTTP 400 error, bad request" oluyordu. HOST olarak google ı ayarlayıp, ana sayfayı çağırdığımda ise, denemeler çalışıyordu. İnternette araştırıp aynı sorunu yaşayanlara rastladım ancak net çözüm hiçbirinde yoktu. Birkaç ufak bilgiyi birleştirerek, GET komutundan sonra gönderilen datanın formatında sorun olduğunu anladım ve artık denemelerimdeki haberleşmeyi direk arduino dan modüle olacak şekilde yapmaya geçtim (yani artık pc den seri port üzerinden herhangi bir programla modüle AT, GET ve HOST datalarını göndermeyi bıraktım. Direkt olarak arduino dan modüle serial.println komutuyla dataları göndermeye başladım.) Ve sorun çözüldü. Olması gereken HTTP 200 cevabı artık geliyordu. Server tarafını da kontrol ettim ve x.txt ile y.txt dosyalarına doğru bilgilerin yazıldığını doğruladım.

Aşağıda arduino da kullandığım kodun bir kısmı mevcut. Kafa karıştırmaması için tamamını göndermiyorum (kodun tamamını isteyenler mail atabilirler)

Sırasıyla bu 3 komutla Turkcell için gerekli bağlantı ayarlarını yapmış oluyorsunuz.
mySerial.println("AT+CGDCONT=1,\"IP\",\"internet\",\"0.0.0.0\",0,0");   // AT komutunun saf hali şu:  AT+CGDCONT=1,"IP","internet","0.0.0.0",0,0
mySerial.println("AT#USERID=\"\"");                                                       // AT komutunun saf hali şu:  AT#USERID=""
mySerial.println("AT#PASSW=\"\"");                                                       // AT komutunun saf hali şu:  AT#PASSW=""

Bu ayarlardan sonra GPRS i aktif ettim
mySerial.println("AT#GPRS=1");                                                              // AT komutunun saf hali şu:  AT#GPRS=1

Ardından socket connection başlattım ve 5 saniye delay verdim ki http request ine cevap gelsin.
mySerial.println("AT#SKTD=0,80,\"argegurusu.com\",0,0");                   // AT komutunun saf hali şu: AT#SKTD=0,80,"argegurusu.com",0,0
delay(5000);

Ve sonra datayı gönderdim. Datayı gönderdikten sonra http 400 hatası almamak için birde boş \r\n karakteri gönderdim.
mySerial.println("GET /gps/index.php?xKoor=1234&yKoor=5678 HTTP/1.1");
mySerial.println("Host: www.argegurusu.com");
mySerial.println("Connection: keep-alive");
mySerial.println("");

Bu şekilde datamı server a gönderebildim.

Tüm denemelerimde RSTerm-Plus, terminal, Sscom, At command tester gibi programlardan edindiğim ufak ufak bilgileri kullanarak sonunda data gönderebilmeyi başardım. Özellikle farklı operatörlerin farklı GPRS bağlantısı bilgilerine bu programlar aracılığıyla ulaşabilirsiniz. Php kodu ise ilk sayfadakiyle aynı.

Sıradaki hedefim pic ile kendi devremden data gönderebilmek. Şu an devreyi tasarlıyorum.

Elimden geldiğince bende buradan cevap vermeye çalışacağım. Tekrar tekrar MrDarK a teşekkür ederim. Umarım biraz olsun bende ek fayda sağlayabilmişimdir. Herkese iyi çalışmalar

MrDarK

#51
Burada siz değerli arkadaşlarla bir arada olup yazılarımın hala insanlara birşeyler öğretebiliyor olması beni çok mutlu ediyor. Teşekkürleriniz için bende teşekkür ederim, binbir emekle elde ettiğim tecrübe ve deneyimlerin ince detay kısımlarını paylaşmıştım zamanında. Şimdi ise insanların bu bilgilerden faydalanıp proje geliştirebiliyor olması benim için harika.

Teşekkürler arkadaşlar yazdıklarımı boş bırakmadığınız için geleceğe umut olmaya devam (:

"Bilgi paylaştıkça çoğalır"
Picproje Eğitim Gönüllüleri ~ MrDarK

cemil43

Özellikle bende MrDark'a teşekkür etmek isterim. Nasıl yapacağım diye düşünürken, karşılaştığım ,
onun açmış olduğu bu topic bayağı bir fayda sağladı.


ismail kaya

Merhaba, GL865-DUAL ile deneme yaptım ve bağlantı sağlayamadım. Hattım TURKCELL. Aşağıda google bağlanırken bekliyor sadece.

MrDarK

Birinci sayfadaki ilk yazdıklarımı okuyup uyarılarımı dikkate alırsanız bekleme kalmadığını fark edeceksiniz

Saygılarımla
Picproje Eğitim Gönüllüleri ~ MrDarK

ismail kaya

MrDark hocam teşekkür ederim connect oldum ama bir yeri anlayamadım yardımcı olursan sevinirim.

CONNECT
Send: AT+CIPSEND<cr>
Send: GET /veri_al.php?id=A12356&sic=32&tel=507888787 HTTP/1.1 \r\n<cr>
Send: Host: www.xxxxxxxx.com<cr>
Send: Connection: keep-alive<cr>
Send: \r\n<cr>
Send: \r\n<cr>
Send: <cr><lf>

"AT+CIPSEND" den sonra nasıl yollamam gerekiyor??? teşekkürler "<cr><lf>" bunlar ne işe yarıyor :(

MrDarK

Tekrar etmemde yarar var Connect mesajını aldıktan sonra artık modülle AT iletişim kuramazsınız. Yani At+Cipsend derseniz sunucudan error cevabı alırsınız. Eğer mesajınızdaki HTTP Requesti göndermek istiyorsanız ;

GET /veri_al.php?id=A12356&sic=32&tel=507888787 HTTP/1.1
Host: http://www.xxxxxxxx.com
Connection: keep-alive


/r/n demek ; 0x0D 0x0A demektir. Buradaki her bir yeni satıra geçerken 0x0d 0x0a yapmalısınız. Ayrıca en son komutu yolladıktan sonrada 3 kez /r/n yaptığınızda kodu tamamladım demiş oluyorsunuz sunucuya.

Yapamazsanız çok çok arayın uğraşın fazla uğraşın :D hatta tekrar uğraşın az kaldı. Buradan daha fazla destek olabileceğimizi sanmıyorum çünkü artık olay sizin sunucu ile modül arasında geçiyor. Doğru HTTP requesti yazarsanız sistem çalışır.

Saygılarımla
Picproje Eğitim Gönüllüleri ~ MrDarK

ismail kaya

MrDark hocam yardımların için teşekkür ederim. Bilgileri yolladığım hostu değiştirdim oldu. Pic ile yapmaya başladım bir sorum olacak connect olduktan sonra GET verisini yollamıyor kodlar aşağıda teşekkür ederim.

________________ Bu Hata Mesajı ____________
OK
AT#SKTD=0,80,"85.105.228.146"

CONNECT
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Sun, 26 Jan 2014 20:43:09 GMT
Connection: close
Content-Length: 334

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>

<p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>

NO CARRIER
__________________________________________

__________________YAZDIĞIM KODLAR__________
fprintf(PORT1,"AT#SKTD=0,80,\"85.105.228.146\"\r\n");                 
       fputc(0X1A,PORT1);
       delay_ms(5000);  //BURDA CONNECT oluyorum yukarıdaki gibi bundan sonra aşağıdaki kodları yollamıyor:(

      fprintf(PORT1,"GET /gsm/veri_al.php?id=AS12356&sic=%f&tel=507888787 HTTP/1.1\r\n",sicaklik_degeri);
     fputc(0x0d,PORT1);
      fputc(0x0A,PORT1);
      fputc(0X1A,PORT1);
      delay_ms(500);
      fprintf(PORT1,"Host: 85.105.228.146\r\n");
     fputc(0x0d,PORT1);
      fputc(0x0A,PORT1);
      fputc(0X1A,PORT1);
      delay_ms(500);
      fprintf(PORT1,"Connection: keep-alive\r\n");
     fputc(0x0d,PORT1);
      fputc(0x0A,PORT1);
      fputc(0X1A,PORT1);
      delay_ms(500);
      fprintf(PORT1,"\r\n");
      fputc(0x0d,PORT1);
      fputc(0x0A,PORT1);
      fputc(0X1A,PORT1);;
      fprintf(PORT1,"\r\n");
     fputc(0x0d,PORT1);
      fputc(0x0A,PORT1);
      fputc(0X1A,PORT1);
___________________________

MrDarK

/r/n yazdıktan sonra fputc(0X1A,PORT1); li kısımları kullanmana gerek yok 0x0d , 0x0a

get paketini yanlış hazırlıyorsun.
Picproje Eğitim Gönüllüleri ~ MrDarK

ismail kaya

vodafone m2m kullanan varmı ?, turkcell sim kartla telit modülle internete çıkıp veri yollayabiliyorum. vodafone m2m le olmadı bunların apn kullanıcı adı parolası farklımı acaba?