Eğitimler
GSMToolsPinManagement
Bu örnek, Arduino GSM Shield için sağlanan araçların bir parçasıdır ve bir SIM kartın PIN'ini değiştirmenize veya çıkarmanıza yardımcı olur.
Gerekli Donanım
- Arduino veya Genuino Kurulu
- Arduino + Telefonica GSM / GPRS Kalkanı
- SIM kart
Devre
Kod
İlk olarak, GSM kütüphanesini içe aktarın
#include <GSM.h>
GSMPin sınıfının bir örneğini başlatın .
GSMPIN PINManager ;
Seri monitörden girişi tutmak için bir String ile başlayarak değişkenlerinizi oluşturun. SIM'in kimlik doğrulaması yapıldığını kontrol etmek için seri bayrağı için bir bayrak ve mesajlar da gönderin.
boolean auth = false;
String oktext = "OK";
String errortext = "ERROR";
setup
, bilgisayara seri bir bağlantı açın. Bağlantıyı açtıktan sonra, Seri Monitöre çizimin başladığını belirten bir mesaj gönderin. Modemi sıfırlamak için PINManager .begin()
.
Seri . başlar ( 9600 ) ;
Seri . println ( "PIN örneğini değiştir \ n " ) ;
PINManager. begin ( ) ;
SIM'in PIN ile kilitlenip kilitlenmediğini kontrol edin
int pin_query = PINManager. isPIN ( ) ;
eğer ( pin_query == 1 )
{
Kilitliyse, seri monitörden PIN kodunu isteyin. Bilgileri ayrıştırmak için readSerial()
adlı özel bir işlev kullanırsınız.
user_input = readSerial ( ) ;
PIN geçerliyse, auth
bayrağını true
. Seri monitöre sonucu belirten bir durum mesajı gönderin. Yanlış PIN girerseniz, tekrar deneyebilirsiniz. 3 cevapsız denemeden sonra PIN kilitlenir ve kilidi açmak için PUK numarasına ihtiyacınız vardır.
{
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
}
Başka
{
Seri . println ( "Yanlış PIN. 3 fırsatınız olduğunu unutmayın." ) ;
}
}
SIM PUK kilidi modundaysa, PUK kodunu ve yeni bir PIN kodu isteyin
{
Seri . println ( "PIN kilitlendi. PUK kodunu girin:" ) ;
String puk = readSerial ( ) ;
Seri . print ( "Şimdi yeni bir PIN kodu girin:" ) ;
user_input = readSerial ( ) ;
eğer ( PINManager. checkPUK ( puk , user_input ) == 0 )
{
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
}
Başka
{
Seri . println ( "Hatalı PUK veya geçersiz yeni PIN. Tekrar deneyin !." ) ;
}
}
Bir hata varsa ve hem PIN numarası hem de PUK kilitliyse, uygun bir durum mesajı gönderin:
{
Seri . println ( "PIN ve PUK kilitli. Cep telefonunda PIN2 / PUK2 kullanın." ) ;
while ( true ) ;
}
PIN numarası yoksa, auth
bayrağını true
{
// SIM kimlik doğrulaması gerektirmez
Seri . println ( "Pin gerekmez." ) ;
auth = doğru ;
}
}
GSM şebekesindeki kaydı kontrol edin ve bağlı olup olmadığınızı ve dolaşımda olup olmadığınızı belirtin.
eğer ( PINManager. checkReg ( ) == 0 )
Seri . println ( oktext ) ;
else if ( PINManager. checkReg ( ) == 1 )
Seri . println ( "ROAMING" + oktext ) ;
Başka
{
Seri . println ( hata metni ) ;
while ( true ) ;
}
}
Seri monitörden seri girişi işlemek için özel bir işlev oluşturacaksınız. String
türünde adlandırılmış bir işlev yapın.
{
Kullanılabilir seri bilgiler varken yeni bir Dize halinde okuyun. Yeni satır karakteri ile karşılaşılırsa, ana programa dönün.
süre ( 1 )
{
(Seri. mevcuttur ()> 0) ise
{
char inChar = Seri . read ( ) ;
eğer ( inChar == ' \ n ' )
{
metin döndürme ;
}
eğer ( inChar ! = ' \ r ' )
metin + = inChar ;
}
}
}
loop()
, PIN'i açmanıza veya kapatmanıza ve değiştirmenize olanak tanıyan bir PIN yönetim aracı olarak işlev görür.
{
Seri . println ( "Bir seçenek belirleyin: \ n 1 - Açık / Kapalı PIN." ) ;
eğer ( PINManager. getPINUsed ( ) )
Seri . println ( "2 - PIN'i değiştir." ) ;
Dize user_op = readSerial ( ) ;
eğer ( user_op == "1" )
{
Seri . println ( "PIN kodunuzu girin:" ) ;
user_input = readSerial ( ) ;
PINManager. switchPIN ( kullanıcı_sayısı ) ;
}
else if ( user_op == "2" ve PINManager. getPINUsed ( ) )
{
Seri . println ( "Gerçek PIN kodunuzu girin:" ) ;
String oldPIN = readSerial ( ) ;
Seri . println ( "Şimdi yeni PIN kodunuzu girin:" ) ;
Dize newPIN = readSerial ( ) ;
PINManager. changePIN ( oldPIN , newPIN ) ;
}
Başka
{
Seri . println ( "Hatalı seçenek. Tekrar deneyin !." ) ;
}
gecikme ( 1000 ) ;
}
Kodunuz yüklendikten sonra, PIN ile çalışmak için seri monitörü açın.
Çizimin tamamı aşağıdadır.
Bant Yönetimi
Bu çizim, Arduino GSM kalkanı için bandı kontrol ediyor
şu anda modemde yapılandırılmış ve değiştirmenize izin veriyor
o.
Lütfen http://www.worldtimezone.com/gsm.html adresini kontrol edin
Genel konfigürasyonlar:
Avrupa, Afrika, Orta Doğu: E-GSM (900) + DCS (1800)
ABD, Kanada, Güney Amerika: GSM (850) + PCS (1900)
Meksika: PCS (1900)
Brezilya: GSM (850) + E-GSM (900) + DCS (1800) + PCS (1900)
Devre:
* GSM kalkanı
oluşturuldu 12 Haziran 2012
Hazırlayan: Javier Zorzano, Scott Fitzgerald
Bu örnek kamu malıdır.
* /
// kütüphaneler
#include <GSM.h>
// kütüphane örneğini başlat
GSM Bant bandı ;
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 Leonardo için gerekli
}
// Bant yöneticisinin başlaması modemi yeniden başlatır
Seri . println ( "Modem yeniden başlatılıyor ..." ) ;
grup. begin ( ) ;
Seri . println ( "Modem yeniden başlatıldı." ) ;
} ;
void loop ( ) {
// Geçerli bandı al
Dize bandName = bant. getBand ( ) ; // Bant adını alma ve yazdırma
Seri . print ( "Geçerli bant:" ) ;
Seri . println ( bantAdı ) ;
Seri . println ( "Bulunduğunuz grubu değiştirmek ister misiniz?" ) ;
String newBandName ;
newBandName = askUser ( ) ;
// Kullanıcıya ne yapmak üzere olduğumuzu anlatın…
Seri . print ( " \ n Band konfigürasyonu" ) ;
Seri . println ( newBandName ) ;
// Bandı değiştir
bool işlemi Başarısız ;
operationSuccess = bant. setBand ( newBandName ) ;
// Kullanıcıya işlemin uygun olup olmadığını söyle
if ( operationSuccess ) {
Seri . println ( "Başarı" ) ;
} başka {
Seri . println ( "Bant değiştirilirken hata oluştu" ) ;
}
if ( operationSuccess ) {
while ( true ) ;
}
}
// Bu işlev kullanıcıya farklı seçenekler sunar
// Seri arayüz üzerinden
// Kullanıcı birini seçer
Dize askUser ( ) {
String newBand ;
Seri . println ( "Bant seçin:" ) ;
// Farklı seçenekleri yazdırın
Seri . println ( "1: E-GSM (900)" ) ;
Seri . println ( "2: DCS (1800)" ) ;
Seri . println ( "3: PCS (1900)" ) ;
Seri . println ( "4: E-GSM (900) + DCS (1800) ör: Avrupa" ) ;
Seri . println ( "5: GSM (850) + PCS (1900) Ör: ABD, Güney Amerika" ) ;
Seri . println ( "6: GSM (850) + E-GSM (900) + DCS (1800) + PCS (1900)" ) ;
// Gelen arabelleği boşalt
while ( Seri . kullanılabilir ( ) ) {
Seri . read ( ) ;
}
// Bir cevap bekleyin, sadece ilk karaktere bakın
while ( ! Serial . available ( ) ) ;
char c = Seri . read ( ) ;
if ( c == '1' ) {
newBand = GSM_MODE_EGSM ;
} else if ( c == '2' ) {
newBand = GSM_MODE_DCS ;
} else if ( c == '3' ) {
newBand = GSM_MODE_PCS ;
} else if ( c == '4' ) {
newBand = GSM_MODE_EGSM_DCS ;
} else if ( c == '5' ) {
newBand = GSM_MODE_GSM850_PCS ;
} else if ( c == '6' ) {
newBand = GSM_MODE_GSM850_EGSM_DCS_PCS ;
} başka {
newBand = "GSM_MODE_UNDEFINED" ;
}
newBand döndürür;
}
See Also
- Arduino GSM Shield- Komple ürün açıklaması.
- Getting started with the GSM Shield- Her şeyi dakikalar içinde kurun.
- GSM library- GSM Kütüphanesi için referansınız.
- GSMPIN
- begin()
- isPIN()
- checkPIN()
- checkPUK()
- changePIN()
- switchPIN()
- checkReg()
- getPINUsed()
- setPINUsed()
- GSMToolsTestGPRS- Verilen APN ve kimlik bilgileriyle GPRS üzerinden internete erişmeye çalışır.
- GSMToolsBandManagement- Modemde yapılandırılmış olan bandı kontrol eder ve değiştirmenize izin verir.
- GSMToolsGsmScanNetworks- Kullanılabilir ağları tarar ve IMEI ve SIM kart numarası hakkında bilgi yazdırır.
- GSMToolsTestModem- GSM kalkanı modemin doğru çalışıp çalışmadığını test eder.
- GSMToolsTestWebServer- Hiçbir şeyi yanıtlamayan, ancak istemcinin isteğini ve sunucu IP adresini yazdıran basit bir web sunucusu.
- GSMExamplesMakeVoiceCall- Mikrofon ve hoparlör ile sesli arama nasıl yapılır.