GSMExamplesReceiveSMS

Bu çizim bir SMS mesajı bekler ve seri monitöre yazdırır. Arduino GSM Shield'in GSM kütüphanesini ve aktif bir SIM kartı kullanır. Çalıştırmak için SIM kartın bir veri planına ihtiyacı yoktur.

Gerekli Donanım

Devre

Kod

İlk olarak, GSM kütüphanesini içe aktarın

#include <GSM.h>

SIM kartların işlevlerini etkinleştiren bir PIN numarası olabilir. SIM'inizin PIN kodunu tanımlayın. SIM'inizde PIN yoksa boş bırakabilirsiniz:

#define PINNUMBER ""

Kullanacağınız sınıfların örneklerini başlatın. Hem GSM hem de GSM_SMS sınıfına ihtiyacınız olacak.

GSM gsmAccess;
GSM_SMS sms;
[Kodu Al]

İletiyi gönderen numarayı tutmak için bir char dizisi oluşturun:

char remoteNumber[20];

setup , bilgisayara seri bir bağlantı açın. Bağlantıyı açtıktan sonra çizimin başladığını belirten bir mesaj gönderin.

void setup ( ) {
Seri . başlar ( 9600 ) ;
Seri . println ( "SMS Mesajları Alıcısı" ) ;

Bağlantı durumunu izlemek için yerel bir değişken oluşturun. SIM'in ağa bağlanmasına kadar çizimin başlamasını önlemek için bunu kullanırsınız:

boolean notConnected = true ;

gsmAccess.begin() çağırarak ağa bağlanın. SIM kartın PIN kodunu argüman olarak alır. Bunu bir while() döngüsünün içine yerleştirerek, bağlantının durumunu sürekli olarak kontrol edebilirsiniz. Modem bağlandığında, gsmAccess() GSM_READY değerini döndürür. notConnected değişkenini true veya false olarak ayarlamak için notConnected bayrak olarak kullanın. Bağlandıktan sonra, setup geri kalanı çalışır.

while ( bağlı değil )
{
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY )
notConnected = yanlış ;
Başka
{
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

Seri monitöre bazı bilgilerle setup tamamlayın.

Seri . println ( "GSM başlatıldı." ) ;
Seri . println ( " Mesaj bekleniyor" ) ;
}

SMS mesajları modem tarafından alınır. SIM kartların gelen SMS'i depolamak için bir miktar hafıza alanı vardır. Kartın alabileceği SMS sayısı, SIM'e bağlı olarak 10 veya 200'e kadar olabilir. SIM kartınızın hafızasında ne kadar tutabileceğini belirlemek için sağlayıcınıza danışmalısınız.

loop() , alınan herhangi bir SMS'deki karakterleri geçici olarak tutmak için char türünde bir değişken oluşturun. sms.available() mesaj olup olmadığını kontrol etmek için sms.available() kullanın:

void loop ( )
{
char c ;
if ( sms. kullanılabilir ( ) )
{

SMS varsa, sms.remoteNumber(remoteNumber, 20) çağırarak uzak gönderenin numarasını sms.remoteNumber(remoteNumber, 20) . remoteNumber bağımsız değişkeni, remoteNumber başında bildirdiğiniz char dizisidir, 20 karakterden uzun olamaz. Bu numarayı seri monitöre gönderin.

Seri . println ( "Mesaj alındı:" ) ;
SMS. remoteNumber ( remoteNumber , 20 ) ;
Seri . println ( remoteNumber ) ;

sms.flush() çağırarak SMS mesajlarını silmek mümkündür. sms.peek() kullanarak, kaldırma için yardımcı olabilecek mesaj dizin numarasını tanımlamak mümkündür

Aşağıdaki kod SIM'den herhangi birini kaldırmaz, ancak bir for döngüsü üzerinden yineleyebilir veya aşağıda kullanılan kukla # yerine kaldırmak için belirli bir dizin numarasını tanımlayabilirsiniz

if ( sms. peek ( ) == '#' )
{
Seri . println ( "Silinen SMS" ) ;
SMS. flush ( ) ;
}

Mesajı okumak için sms.read() kullanın. Burada, mesajdaki her karakteri c değişkenine c ve okunduğunda yazdıracaksınız.

ise (c = SMS. oku ())
Seri . baskı ( c ) ;

İletinin tamamlandığını sms.flush() ve sms.flush() ile bellekten kaldırın.

Seri . println ( " \ n MESAJIN SONU" ) ;
SMS. flush ( ) ;
Seri . println ( "MESAJ SİLİNDİ" ) ;
}

Kısa bir gecikme ekleyin ve loop kapatın.

gecikme ( 1000 ) ;
}

Kodunuz yüklendikten sonra seri monitörü açın. Telefon veya başka bir SMS özellikli servisle, SIM numaranıza bir SMS gönderin. Mesaj alındığında ekranda yazdırıldığını görmelisiniz.

Çizimin tamamı aşağıdadır.

/ *
SMS alıcısı

Bu çizim, Arduino GSM kalkanı için bir SMS mesajı bekliyor
ve Seri bağlantı noktası üzerinden görüntüler.

Devre:
* GSM kalkanı bağlı ve Arduino
* SMS mesajları alabilen SIM kart

oluşturuldu 25 Şub 2012
ile Javier Zorzano / TD

Bu örnek kamu malıdır.

http: egitim.aspx e = GSMExamplesReceiveSMS

* /


// GSM kütüphanesini dahil et
#include <GSM.h>

// SIM için PIN Numarası
#define PINNUMBER ""

// kütüphane örneklerini başlat
GSM gsmAccess ;
GSM_SMS sms ;

// SMS'in alındığı numarayı tutma dizisi
char senderNumber [ 20 ] ;

void setup ( ) {
// seri iletişimi başlatın ve portun açılmasını bekleyin:
Seri . başlar ( 9600 ) ;
while ( ! Seri ) {
; // seri portun bağlanmasını bekleyin. Yalnızca yerel USB bağlantı noktası için gereklidir
}

Seri . println ( "SMS Mesajları Alıcısı" ) ;

// bağlantı durumu
bool notConnected = true ;

// GSM bağlantısını başlat
while ( notConnected ) {
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY ) {
notConnected = yanlış ;
} başka {
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

Seri . println ( "GSM başlatıldı" ) ;
Seri . println ( " Mesaj bekleniyor" ) ;
}

void loop ( ) {
char c ;

// Kullanılabilir SMS varsa ()
if ( sms. available ( ) ) {
Seri . println ( "Mesaj alındı:" ) ;

// Uzak numarayı al
SMS. remoteNumber ( senderNumber , 20 ) ;
Seri . println ( senderNumber ) ;

// Mesaj atma örneği
// # ile başlayan tüm mesajlar atılmalıdır
if ( sms. peek ( ) == '#' ) {
Seri . println ( "Silinen SMS" ) ;
SMS. flush ( ) ;
}

// Mesaj baytlarını oku ve yazdır
while ( c = sms. read ( ) ) {
Seri . baskı ( c ) ;
}

Seri . println ( " \ n MESAJIN SONU" ) ;

// Mesajı modem belleğinden sil
SMS. flush ( ) ;
Seri . println ( "MESAJ SİLİNDİ" ) ;
}

gecikme ( 1000 ) ;

}

See Also