MKRNBToolsPinManagement

Bu örnek, Arduino MKR NB 1500 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

Devre

Kod

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

#include <MKRNB.h>

NBPin sınıfının bir örneğini başlatın .

NBPIN 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.

String user_input = "";

boolean auth = false;

String oktext = "OK";
String errortext = "ERROR";
[Kodu Al]

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() .

void setup ( ) {
Seri . başlar ( 9600 ) ;
Seri . println ( "PIN örneğini değiştir \ n " ) ;
PINManager. begin ( ) ;

SIM'in PIN ile kilitlenip kilitlenmediğini kontrol edin

while ( ! auth ) {
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.

Seri . print ( "PIN kodunu girin:" ) ;
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.

eğer ( PINManager. checkPIN ( user_input ) == 0 )
{
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

else if ( pin_query == - 1 )
{
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:

else if ( pin_query == - 2 )
{
Seri . println ( "PIN ve PUK kilitli. Cep telefonunda PIN2 / PUK2 kullanın." ) ;
while ( true ) ;
}

PIN numarası yoksa, auth bayrağını true

Başka
{
// SIM kimlik doğrulaması gerektirmez
Seri . println ( "Pin gerekmez." ) ;
auth = doğru ;
}
}

NB ağındaki kaydı kontrol edin ve bağlı olup olmadığınızı ve dolaşımda olup olmadığınızı belirtin.

Seri . print ( "NB ağındaki kayıt kontrol ediliyor ..." ) ;
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.

Dize readSerial ( )
{

Kullanılabilir seri bilgiler varken yeni bir Dize halinde okuyun. Yeni satır karakteri ile karşılaşılırsa, ana programa dönün.

Dize metni = "" ;
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.

void loop ( )
{

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.

/ *

Bu örnek, PIN numarasını değiştirmenizi veya kaldırmanızı sağlar.
bir MKR NB 1500 kartına takılan bir SIM kart.

Devre:
* MKR NB 1500 kartı
* Anten
* SIM kart

12 Haz 2012 tarihinde oluşturuldu
ile David del Peral
* /


// kütüphaneler
#include <MKRNB.h>

// pin yöneticisi nesnesi
NBPIN PINManager ;

// girişi seri olarak kullanıcı tarafından kaydet
String user_input = "" ;

// PIN kodu ile doğrulandı
boolean auth = yanlış ;

// seri monitör sonuç mesajları
Dize oktext = "Tamam" ;
Dize errortext = "ERROR" ;

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
}

Seri . println ( "PIN örneğini değiştir \ n " ) ;
PINManager. begin ( ) ;

// SIM'in pin kilidinin olup olmadığını kontrol edin
while ( ! auth ) {
int pin_query = PINManager. isPIN ( ) ;
eğer ( pin_query == 1 ) {
// SIM kilitliyse, PIN kodunu girin
Seri . print ( "PIN kodunu girin:" ) ;
user_input = readSerial ( ) ;
// PIN kodunu kontrol et
eğer ( PINManager. checkPIN ( user_input ) == 0 ) {
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
} başka {
// PIN kodu doğrulanmamışsa
Seri . println ( "Yanlış PIN. 3 fırsatınız olduğunu unutmayın." ) ;
}
} else if ( pin_query == - 1 ) {
// PIN kodu kilitli, kullanıcı PUK kodunu girmelidir
Seri . println ( "PIN kilitlendi. PUK kodunu girin:" ) ;
String puk = readSerial ( ) ;
Seri . print ( "Şimdi yeni bir PIN kodu girin:" ) ;
user_input = readSerial ( ) ;
// PUK kodunu kontrol et
eğer ( PINManager. checkPUK ( puk , user_input ) == 0 ) {
auth = doğru ;
PINManager. setPINUsed ( true ) ;
Seri . println ( oktext ) ;
} başka {
// PUK o veya yeni PIN yanlışsa
Seri . println ( "Hatalı PUK veya geçersiz yeni PIN. Tekrar deneyin !." ) ;
}
} else if ( pin_query == - 2 ) {
// en kötü durum, PIN ve PUK kilitli
Seri . println ( "PIN ve PUK kilitli. Cep telefonunda PIN2 / PUK2 kullanın." ) ;
while ( true ) ;
} başka {
// SIM kimlik doğrulaması gerektirmez
Seri . println ( "Pin gerekmez." ) ;
auth = doğru ;
}
}

// başlangıç modülü
Seri . print ( "NB IoT / LTE Cat M1 ağındaki kayıt kontrol ediliyor ..." ) ;
eğer ( PINManager. checkReg ( ) == 0 ) {
Seri . println ( oktext ) ;
}
// dolaşım yoluyla bağlanıyorsanız
else if ( PINManager. checkReg ( ) == 1 ) {
Seri . println ( "ROAMING" + oktext ) ;
} başka {
// hata bağlantısı
Seri . println ( hata metni ) ;
while ( true ) ;
}
}

void loop ( ) {
// İşlev döngüsü pin yönetimi kullanıcı menüsünü uygular
// Sadece SIM tuş kilidi kullanıyorsanız, PIN kodunu değiştirebilirsiniz
// user_op değişkenleri kullanıcı kaydetme seçeneği

Seri . println ( "Bir seçenek belirleyin: \ n 1 - Açık / Kapalı PIN." ) ;
if ( PINManager. getPINUsed ( ) ) {
Seri . println ( "2 - PIN'i değiştir." ) ;
}
Dize user_op = readSerial ( ) ;
if ( user_op == "1" ) {
Seri . println ( "PIN kodunuzu girin:" ) ;
user_input = readSerial ( ) ;
// PIN kilidini etkinleştirme / devre dışı bırakma
PINManager. switchPIN ( kullanıcı_sayısı ) ;
} else if ( kullanıcı_op == "2" && PINManager. getPINUsed ( ) ) {
Seri . println ( "Gerçek PIN kodunuzu girin:" ) ;
String oldPIN = readSerial ( ) ;
Seri . println ( "Şimdi yeni PIN kodunuzu girin:" ) ;
Dize newPIN = readSerial ( ) ;
// pin'i değiştir
PINManager. changePIN ( oldPIN , newPIN ) ;
} başka {
Seri . println ( "Hatalı seçenek. Tekrar deneyin !." ) ;
}
gecikme ( 1000 ) ;
}

/ *
Giriş dizisini oku
* /

Dize readSerial ( ) {
Dize metni = "" ;
yaparken ( 1 ) {
while ( Seri . kullanılabilir ( ) > 0 ) {
char inChar = Seri . read ( ) ;
if ( inChar == ' \ n ' ) {
metin döndürme ;
}
eğer ( inChar ! = ' \ r ' ) {
metin + = inChar ;
}
}
}
}

See Also



  • MKRNBScanNetworks- Kullanılabilir ağları tarar ve IMEI ve SIM kart numarası hakkında bilgi yazdırır.
  • MKRNBToolsTestGPRS- GPRS üzerinden internete erişmeye çalışır.
  • MKRNBToolsTestModem- MKR NB 1500 modeminin doğru çalışıp çalışmadığını test eder.