MKRGSMExamplesSendSMS

Bu çizim, Arduino MKR GSM 1400'den bir SMS mesajı gönderir. Arduino Yazılımının (IDE) seri monitörünü kullanarak bağlanacak numarayı ve gönderilecek metin mesajını girersiniz.

Gerekli Donanım

Devre

Kod

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

#include <MKRGSM.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]

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 Mesaj Göndereni" ) ;

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ı." ) ;
}

int readSerial adlı bir işlev oluşturun. Bunu, seri monitörden gelen giriş, SMS göndermek istediğiniz numarayı ve göndereceğiniz mesajı saklamak için kullanırsınız. Bir char dizisini argüman olarak kabul etmelidir.

int readSerial ( karakter sonucu [ ] )
{

Seri arabelleğindeki öğeler arasında saymak için bir değişken oluşturun ve sürekli olarak yürütülecek bir while döngüsü başlatın.

int i = 0 ;
süre ( 1 )
{

Seri bilgiler mevcut olduğu sürece, verileri inChar adlı bir değişkene inChar .

(Seri. mevcuttur ()> 0) ise
{
char inChar = Seri . read ( ) ;

Okunmakta olan karakter yeni bir satırsa, diziyi sonlandırın, seri arabelleği temizleyin ve işlevden çıkın.

eğer ( inChar == ' \ n ' )
{
sonuç [ i ] = ' \ 0 ' ;
Seri . flush ( ) ;
dönüş 0 ;
}

Gelen karakter yeni satır veya satır başı dışında bir ASCII karakteri ise, diziye ekleyin ve dizini artırın. while döngülerini ve işlevi kapatın.

eğer ( inChar ! = ' \ r ' )
{
sonuç [ i ] = inChar ;
i ++;
}
}
}
}

In loop , bir oluşturmak char adlı diziyi remoteNumber size SMS göndermek istediğiniz numarayı tutmak için. Az önce oluşturduğunuz readSerial işlevini readSerial ve remoteNumber bağımsız değişken olarak remoteNumber . readSerial yürütüldüğünde, remoteNumber iletiyi göndermek istediğiniz numarayla doldurur.

Seri . print ( "Bir cep telefonu numarası girin:" ) ;
char remoteNumber [ 20 ] ;
readSerial ( remoteNumber ) ;
Seri . println ( remoteNumber ) ;

txtMsg adlı yeni bir char dizisi oluşturun. Bu, SMS'inizin içeriğini tutacaktır. txtMsg doldurmak için readSerial .

Seri . print ( "Şimdi, SMS içeriği girin:" ) ;
char txtMsg [ 200 ] ;
readSerial ( txtMsg ) ;

Çağrı sms.beginSMS() ve bu da geçer remoteNumber mesaj, göndermeye başlamak için sms.print() mesaj göndermek için ve sms.endSMS() işlemini tamamlamak için. Bazı tanılama bilgilerini yazdırın ve loop kapatın. Mesajınız geliyor!

Seri . println ( "GÖNDERME" ) ;
Seri . println ( ) ;
Seri . println ( "Mesaj:" ) ;
Seri . println ( txtMsg ) ;

SMS. beginSMS ( remoteNumber ) ;
SMS. baskı ( txtMsg ) ;
SMS. endSMS ( ) ;
Seri . println ( " \ n TAMAM! \ n " ) ;
}

Kodunuz yüklendikten sonra seri monitörü açın. Seri monitörün yalnızca dönüşte yeni satır karakteri gönderecek şekilde ayarlandığından emin olun. Aramak istediğiniz numarayı girmeniz istendiğinde, sayıları girin ve geri tuşuna basın. Daha sonra mesajınızı girmeniz istenir. Bunu yazdıktan sonra, göndermek için geri dön düğmesine basın.

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

/ *
SMS göndericisi

Bu çizim, MKR GSM 1400 kartı için bir SMS mesajı gönderir
seri monitöre girersiniz. Arduino'nuzu
GSM kalkanı ve SIM kart, seri monitörü açın ve bekleyin
ekranda "HAZIR" mesajı görüntülenir. Ardından, bir
göndermek için "geri" tuşuna basın. Dizinin
monitör, return tuşuna bastığınızda yeni satır gönderecek şekilde ayarlanmıştır.

Devre:
* MKR GSM 1400 kartı
* Anten
* SMS gönderebilen SIM kart

oluşturuldu 25 Şub 2012
tarafından Tom Igoe
* /


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

#include "arduino_secrets.h"
// Lütfen hassas verilerinizi Gizli sekmesine veya arduino_secrets.h girin
// PIN numarası
const char PINNUMBER [ ] = SECRET_PINNUMBER ;

// kütüphane örneğini başlat
GSM gsmAccess ;
GSM_SMS sms ;

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 Mesaj Göndereni" ) ;

// bağlantı durumu
bool bağlı = yanlış ;

// GSM kalkanını başlat
// SIM'iniz PIN içeriyorsa, tırnak işaretleri halinde begin () parametresi olarak iletin
while ( ! bağlı ) {
eğer ( gsmAccess. başlar ( PINNUMBER ) == GSM_READY ) {
bağlı = doğru ;
} başka {
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

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

void loop ( ) {

Seri . print ( "Bir cep telefonu numarası girin:" ) ;
char remoteNum [ 20 ] ; // sms göndermek için telefon numarası
readSerial ( remoteNum ) ;
Seri . println ( remoteNum ) ;

// sms metni
Seri . print ( "Şimdi, SMS içeriği girin:" ) ;
char txtMsg [ 200 ] ;
readSerial ( txtMsg ) ;
Seri . println ( "GÖNDERME" ) ;
Seri . println ( ) ;
Seri . println ( "Mesaj:" ) ;
Seri . println ( txtMsg ) ;

// mesajı gönder
SMS. beginSMS ( remoteNum ) ;
SMS. baskı ( txtMsg ) ;
SMS. endSMS ( ) ;
Seri . println ( " \ n TAMAM! \ n " ) ;
}

/ *
Giriş dizisini oku
* /

int readSerial ( karakter sonucu [ ] ) {
int i = 0 ;
yaparken ( 1 ) {
while ( Seri . kullanılabilir ( ) > 0 ) {
char inChar = Seri . read ( ) ;
if ( inChar == ' \ n ' ) {
sonuç [ i ] = ' \ 0 ' ;
Seri . flush ( ) ;
dönüş 0 ;
}
eğer ( inChar ! = ' \ r ' ) {
sonuç [ i ] = inChar ;
i ++;
}
}
}
}

See Also