STM32F429 Discovery STM32F429 Discovery ile Restaurant Otomasyonu By Konuk Yazar Posted on 19 Mart 2015 9 min read 4 0 5,414 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar. Bu yazımda size sim900 modülü ile GPRS üzerinde nasıl veri aktarılır ve serverlara nasıl baglanılır konuları hakkında bilgi vereceğim. Sim900 simcom firmasının ürettiği bir sim kard okuma modülüdür. cep telefonlarımzda da aslında bunun benzerleri modüller bulunur. modülü temin ederken dikkat edilecek husus, nasıl yurt dışından aldığımız telefonların imei numaraları kayıt edilmediği için belli bir süre sonra kapanıyorsa bu modüllerinde imei numaralarının kayıtlı olması gerekir. Bazı yerli firmalar kayıtlı gsm modül satıyorlar. Ama çinden veya başka ülkelerden siparişle getirttiğimiz modüller şebekeye bağlandıktan sonra tesbit ediliyor ve 60 gün sonra kapatılıyor. Alırken dikkat etmek lazım. Modül üzerinde sim900 varsa hangi board olursa olsun komutlar değişmez. Sim900 AT komut sistemiyle çalışır.Komutları usart üzerinden göndereceğiz. Biz icomsat ın boardını kullandık. Modülün varsayılan baund ratesi 9600. Modülü aldığınızda test etmek isterseniz burada güzel bir test uygulaması var. Sim900 ile ilgili genel bilgi verdikten sonra gelelim şebeke üzerinden veri göndermeye.Veri gönderebilmemiz için önce TCP İP olayını bilmemiz gerekiyor. TCP(Transmission Control Protocol) hedef ip ye verilerin paketlenerek gönderilmesini ve karşı taraftan ayrıştırılarak alınmasını sağlar. STM bordumuza bağlı sim900 üzerinden pc mize veri gönderebilmemiz için pc mizin server olması lazım. serverimize dışarıdan başka client lerin ulaşa bilmesi için ip mize tahsis edilmiş port olması gerekir. cmd ye “ipconfig” yazarak ip nizi öğrene bilirsiniz. Port açmak için ise ,modem arayüzüne girip nat ayarları kısmında kendi ip nize port atayabilirsiniz. SocketTest programıyla pc nizi server yapıp kolayca test edebilirsiniz.Bunun için programın server bölümünde ip yerine kendi ıp nizi ve port yerine modemden atadığınız portu yazmanız yeterlidir. Biraz da client kısmından yani mcu kısmından bahsedelim.AT komutlarını Sim900 e nasıl göndereceğiz? MCU olarak STM32F429 DİSCO bordunu kullandık. Bordun usart1 modülünün Tx pini PA9 olduğu için PA9 pinini icomsatın Rx pinine bağlıyoruz. ilk olarak komutları char türünde sabit olarak tanımlıyoruz. [php] const unsigned char At_test[] = " AT\r\n"; const unsigned char Network_control[] = " AT+CREG?\r\n"; const unsigned char PDP_ENABLE[] = " AT+CGACT?\r\n"; const unsigned char Aga_baglanma[] = " AT+CMEE=1\r\n"; const unsigned char TCPBaglantisi[] = " AT+CGATT=1\r\n"; const unsigned char GPRSBaglantisi[] = " AT+CSTT=\"internet\"\r\n"; const unsigned char BaglantiyiGetir[] = " AT+CIICR\r\n"; const unsigned char YerelIP_ata[] = " AT+CIFSR\r\n"; const unsigned char BaglantiAdresi[] = " at+cipstart=\"TCP\",\"85.104.162.208\",\"10\"\r\n"; const unsigned char SendGPRS_Data[] = " AT+CIPSEND\r\n"; const unsigned char Data[] = "Roboturka.com"; [/php] burada yaptığımız işlem sırayla şebeke kontrolü, ağ kontrolü, gprs i açma, uygun apn ile baglantı kurma diye gidiyor. Dikkat etmemiz gereken at+cipstart komutu ile gösterdiğimiz bağlanmak istedigimiz server ip sinin her internete bağlandığımızda değişmesidir.(server pc miz olduğu için pc mizin) güncel ip nize buradan bakabilirsiniz. Bu tanımlanan degişkenleri usart tan gönderebilmemiz için bir fonksiyon oluşturmamız gerekiyor. [php] void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) { while(ulCount–) { USART_SendData(USART1, *pucBuffer++);// Last Version USART_SendData(USART1,(uint16_t) *pucBuffer++); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { } } } [/php] Artık usart üzerinden gönderebiliriz. [php] UARTSend(At_test,sizeof(At_test)); for (i=0;i<500000;i++); UARTSend(Network_control,sizeof(Network_control)); for (i=0;i<3000000;i++); UARTSend(PDP_ENABLE,sizeof(PDP_ENABLE)); for (i=0;i<3000000;i++); UARTSend(Aga_baglanma,sizeof(Aga_baglanma));for (i=0;i<3000000;i++); UARTSend(TCPBaglantisi,sizeof(TCPBaglantisi));for (i=0;i<3000000;i++); UARTSend(GPRSBaglantisi,sizeof(GPRSBaglantisi));for (i=0;i<3000000;i++); UARTSend(BaglantiyiGetir,sizeof(BaglantiyiGetir));for (i=0;i<30000000;i++); UARTSend(YerelIP_ata,sizeof(YerelIP_ata));for (i=0;i<3000000;i++); UARTSend(BaglantiAdresi,sizeof(BaglantiAdresi));for (i=0;i<30000000;i++); UARTSend(SendGPRS_Data,sizeof(SendGPRS_Data));for (i=0;i<3000000;i++); UARTSend(Data,sizeof(Data));for (i=0;i<10000;i++); USART_SendData(USART1,(uint16_t)0x1a); [/php] En sonda gönderdigimiz 0x1a CTRL+Z dir. gönderecegimiz datanın sonunu gösterir. Gönderme işlemini başlatır. bir test uygulaması: gprs ile yapılmış b bir Restaurant sipariş otomasyonu: Proje dosyalara buradan ulaşabilirsiniz. Soket test programı