arduino gsm shiled ile sms atma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Günümüzde gelişen teknoloji ile birlikte sistemlerin kendi aralarında kablosuz olarak haberleştirmek kaçınılmaz.Bunun içinde wireless teknolojiler kullanılmakta.Gsm ile haberleşme sistemlerin uzak mesafelerde bağlantılı kalabilemesi açısından gerçektende önemli bir husus.


Arduino resmi sitesine baktığımızda Gsm shield olarak telefonica marka bir modül göze çarpmakta ancak piyasada bulunan neredeyse tüm gsm shield ları aynı sistemi kullandığından arduinonun bize sağlamış olduğu gsm kütüphanesi sorunsuz olarak çalışacaktır.

Peki bir Gsm uygulaması için bize neler gereklidir?

1 adet arduino board
1 adet gms shield
ve 1 adet sim kart (sim kartın aktif olması haberleşmemiz açısından kaçınılmaz )

Gelelim kodları irdelemeye

İlk olarak arduino projemizin içerisine gsm kütüphanemizi ekliyoruz.
#include <GSM.h>

Sonrasında gsm sheildımıza yerleştirmiş olduğumuz sim kartın pin numarasını belirtiyoruz.
#define PINNUMBER ""

Biz bu yazımızda sizlere gsm shield ile arduino tarafından nasıl sms gönderileceğini açıklamaya çalışacağımızdan dolayı gsm kütüphanemizin gsm access ve gsm sms değişkenleri kullanacağız.
GSM gsmAccess;
GSM_SMS sms;
Burada gsm kütüphanemizden gsmAccess adı altında bir adet gsm ağı ve sms değişkeni adı altında GSM_SMS sistemi tanımladık.

Arduinomuzun setup fonksiyonu içerisinde gsm modülü kontrolünü ve sistem takibini sağlamak açısından seri monitör bağlantımızı oluşturuyoruz.

void setup(){
Serial.begin(9600);
Serial.println("SMS Messages Sender");
GSM ağına bağlı olup olmadığımızın kontrolü açısından notConnected adı altında boolean bir değişken tanımlıyoruz.Bu değişken bağlı olduğumuzda "false" bağlantı olmadığında ise "true" değerini döndürecektir.Değişkenimizin içerisine başlangıç koşulu olarak true değerini atıyoruz.

boolean notConnected = true;
Gelelim sistemimizi gsm networküne bağlamaya.Bunun için gsm kütüphanemizden gsmAccess.begin() fonksiyonunu çağıracağız.Bu fonksiyon bizim pin tanımladığımız pin numaramızı kullanarak gsm modem ile bağlantımızı sağlayacak ve sürekli olarak gsm bağlantı durumumuzu kontrol edeceğiz.gsmAccess()fonksiyonu bizim modeme bağlı kaldığımız süre zarfında GSM_READY bilgisini döndürecektir.Bizde bu bilgiyi kullanarak işlemlerimize devam edeceğiz.



while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
 
Bağlantı sağladığımıza dair seri monitör üzerinden bağlantı durumunu yazdırıyoruz.

Serial.println("GSM initialized.");

}

Yazımızın başında da bahsettiğimiz gibi biz sistemin bilgilerini seri monitör üzerinden takip edeceğimizden dolayı seri monitörler etkileşim içerisinde olmalıyız ve seri monitörden de arduino içerisine telefon numarası gibi bilgileri çekebilmeliyiz.Bunun için seri monitörden gelecek olan telefon numarasını okumak açısından seri bağlantımızı açacağız ve oradan gelen veriyi okumak açısından buffer oluşturacağız.int olarak seri haberleşmeyi okuyacağımız ve sms göndereceğimiz numarayı almamızı sağlayan bir fonksiyon oluşturuyoruz.




int readSerial(char result[])

{

Seri haberleşmeden gelecek olan verimizin buffer genişliğini kontrol etmek açısından int bir kontrol değişkeni tanımlıyoruz ve sürekli olarak haberleşmeyi sağlamak açısından sonsuz döngü içerisine giriyoruz.



int i = 0;
while(1)

{
Seri haberleşmeden gelen veri olup olmadığını Serial.available() fonsiyonu ile kontrol ediyor ve gelen verileri char inChar değişkenimizin içerisine alıyoruz.Char her defasında bir karakteri alıyor.



while (Serial.available() > 0)
{
char inChar = Serial.read();

Seri monitörden bir alt satıra geçme karakteri yani "\n" komutu gelinceye kadar numarayı çekeceğimiz dizi değişkenimize verileri kabul ediyoruz.Alt satıra geçme karakteri geldiğinde ise ki bu biz seri monitörden numara bilgisi girip enter a bastığımızda gerçekleşecek, numarak kabul eden değişkenimize veri almayı kesiyoruz."\r " komutunu aldığımızda ise numaramızın son halini alıyoruz ve buffer indeximizi bir arttırarak sonsuz döngümüzü kırıyoruz.

if (inChar == '\n')
{
result[i] = '\0';
Serial.flush();
return 0;

}
if(inChar!='\r') {
result[i] = inChar;
i++;
}
}
}
}

Remote number adı altında seri monitörden gelecek olan verimizi alıyoruz ve yine seri ekranda anlasılması açısından mobile numarasını girmesi gerektigini söylecek bir text yazdırıyoruz.

Serial.print("Enter a mobile number: ");
char remoteNumber[20];
readSerial(remoteNumber);
Serial.println(remoteNumber);
Char değişken tipinde telefona göndermek istediğimiz sms mesajımızı alıyoruz.

Serial.print("Now, enter SMS content: ");
char txtMsg[200];

readSerial(txtMsg);
sms.beginSMS() fonksiyonunu kullanarak sms sistemini başlatıyoruz ve sms.print() fonksiyonu ile de mesajımızı gönderiyoruz.

Serial.println("SENDING");
Serial.println();
Serial.println("Message:");
Serial.println(txtMsg);
sms.beginSMS(remoteNumber);
sms.print(txtMsg);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
}

Tüm sistemin kodu:



GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;
void setup()
{
// initialize serial communications
Serial.begin(9600);
Serial.println("SMS Messages Sender");
// connection state
boolean notConnected = true;
// Start GSM shield
// If your SIM has PIN, pass it as a parameter of begin() in quotes
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
}
void loop()
{
Serial.print("Enter a mobile number: ");
char remoteNumber[20]; // telephone number to send sms
readSerial(remoteNumber);
Serial.println(remoteNumber);
// sms text
Serial.print("Now, enter SMS content: ");
char txtMsg[200];
readSerial(txtMsg);
Serial.println("SENDING");
Serial.println();
Serial.println("Message:");
Serial.println(txtMsg);
// send the message
sms.beginSMS(remoteNumber);
sms.print(txtMsg);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
}
/*
Read input serial
*/
int readSerial(char result[])
{
int i = 0;
while(1)
{
while (Serial.available() > 0)
{
char inChar = Serial.read();
if (inChar == '\n')
{
result[i] = '\0';
Serial.flush();
return 0;
}
if(inChar!='\r')
{
result[i] = inChar;
i++;
}
}
}

}

Resmi olarak gsm kütüphanesine ise buradan ulaşabilirsiniz.

Özetlemek gerekirse yukarıda paylaştığımız gms kutuphanesini kullanarak sms içerisinde serial monitor kullanmadan arduino tarafında okuduğunuz bilgileri sms olarak telefona gönderebilirsin.Birçok akıllı ev uygulamalarında kullanılan bu sistem,yine güç takip sistemleri,gprs modulü ile bilikte araç takip sistemleri gibi sistemler de de kullanılabilir.
ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger