MKRNBToolsTestGPRS

Bu çizim Arduino MKR NB 1500 üzerindeki GPRS veri bağlantısını test eder. Arduino.cc adresine bağlanmaya çalışır.

MKR NB 1500 ile veri bağlantısı kullanmak için, sağlayıcınızın Erişim Noktası Adı (APN), oturum açma adı ve parolaya ihtiyacınız vardır. Bu bilgileri edinmek için en güncel bilgiler için şebeke sağlayıcısına başvurun. Bu sayfada çeşitli operatör ayarları hakkında bazı bilgiler var, ancak güncel olmayabilir.

Gerekli Donanım

Devre

Kod

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

#include <MKRNB.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. GSM, GPRS ve GSMClient sınıflarına ihtiyacınız olacak.

GSMClient client;
GPRS gprsAccess;
GSM gsmAccess;
[Kodu Al]

Seri monitöre göndermek için bazı durum mesajları oluşturun:

Dize oktext = "Tamam" ;
Dize errortext = "ERROR" ;

Bağlanmak istediğiniz sunucuyu, yolu ve proxy'yi tutmak için bazı değişkenler oluşturun.

char url [ ] = "arduino.cc" ;
char yolu [ ] = "/" ;
char urlproxy [ ] = "http://arduino.cc" ;

Sunucudan gelen yanıtı tutmak için bir değişken ve vekil kullanıp kullanmayacağınızı belirten bir işaret oluşturun.

Dize yanıtı = "" ;

boolean use_proxy = yanlış ;

setup , bilgisayara seri bir bağlantı açın.

void setup ( ) {
Seri . başlar ( 9600 ) ;
}

Seri monitörden seri girişi işlemek için özel bir işlev oluşturacaksınız. char dizisini bağımsız değişken olarak kabul eden adlandırılmış bir işlev oluşturur.

int readSerial ( karakter sonucu [ ] )
{

sayaç olarak hareket etmek için bir değişken yapın. Seri bilgiler varken char dizisine okuyun. Yeni satır karakteri ile karşılaşılırsa, diziyi sonlandırın ve ana programa dönün.

int i = 0 ;
süre ( 1 )
{
(Seri. mevcuttur ()> 0) ise
{
char inChar = Seri . read ( ) ;
eğer ( inChar == ' \ n ' )
{
sonuç [ i ] = ' \ 0 ' ;
dönüş 0 ;
}
eğer ( inChar ! = ' \ r ' )
{
sonuç [ i ] = inChar ;
i ++;
}
}
}
}

loop() içinde proxy bayrağını false olarak ayarlayın

void loop ( )
{
use_proxy = yanlış ;

PIN numarasını (varsa) gsmAccess.begin() ileterek GSM şebekesine bağlantıyı gsmAccess.begin() .

Seri . print ( "GSM şebekesi bağlanıyor ..." ) ;
eğer ( gsmAccess. başlar ( PINNUMBER ) ! = GSM_READY )
{
Seri . println ( hata metni ) ;
while ( true ) ;
}
Seri . println ( oktext ) ;

APN'yi tutmak için bir char dizisi oluşturun. Seri monitörden bayt almak için oluşturduğunuz readSerial() işlevini kullanın

karakter apn [ 50 ] ;
Seri . print ( "APN'nizi girin:" ) ;
readSerial ( apn ) ;
Seri . println ( apn ) ;

APN oturumunu tutmak için bir char dizisi oluşturun. Seri monitörden bayt almak için oluşturduğunuz readSerial() işlevini kullanın

karakter girişi [ 50 ] ;
Seri . print ( "Şimdi girişinizi girin:" ) ;
readSerial ( giriş ) ;
Seri . println ( giriş ) ;

APN parolasını tutmak için bir char dizisi oluşturun. Seri monitörden bayt almak için oluşturduğunuz readSerial() işlevini kullanın

karakter şifresi [ 20 ] ;
Seri . print ( "Son olarak, şifrenizi girin:" ) ;
readSerial ( şifre ) ;

gprs.attachGPRS() kullanarak GPRS şebekesine gprs.attachGPRS() . Bu, az önce girdiğiniz APN, oturum açma adı ve şifreyi gerektirir.

Modem kendisini GPRS şebekesine gsmAccess() , gsmAccess() GSM_READY .

Seri . println ( " APN'nizle GPRS'ye ekleniyor ..." ) ;
if ( gprsAccess. attachGPRS ( apn , kullanıcı adı , şifre ) ! = GPRS_READY )
{
Seri . println ( hata metni ) ;
}
başka {

Seri . println ( oktext ) ;

İhtiyacınız olabilecek proxy bilgilerini saklamak için bir char dizisi oluşturun. Seri monitörden bayt almak için oluşturduğunuz readSerial() işlevini kullanın.

char proxy [ 100 ] ;
Seri . print ( "Operatörünüz bir proxy kullanıyorsa girin, değilse girin: tuşuna basın ) " ) ;
readSerial ( proxy ) ;
Seri . println ( proxy ) ;

Bir proxy belirtilmişse, bağlantı noktası numarasını isteyin ve proxy bayrağını true

int pport ;
if ( proxy [ 0 ] ! = ' \ 0 ' ) {
// kullanıcı tarafından tanıtılan proxy bağlantı noktasını oku
char proxyport [ 10 ] ;
Seri . print ( "Proxy bağlantı noktasını girin:" ) ;
readSerial ( proxyport ) ;
// tamsayıya cast proxy bağlantı noktası eklendi
pport = ( int ) proxyport ;
use_proxy = true ;
Seri . println ( proxyport ) ;
}

Sunucuya bağlı olup olmadığınızı belirtmek için bir değişken oluşturun. client.connect() ile client.connect() bağlantı kurun. Bağlantının nasıl yapılacağı proxy kullanıyorsanız veya kullanmamanıza bağlıdır.

Seri . print ( "arduino.cc'ye GET isteği bağlama ve gönderme ..." ) ;
int res_connect ;

eğer ( kullan_proxy )
res_connect = istemci. connect ( proxy , bağlantı noktası ) ;
Başka
res_connect = istemci. bağlayın ( url , 80 ) ;

bağlandıysanız, client.print() kullanarak bir HTTP GET isteği yapın.

eğer ( res_connect )
{
istemcisi. yazdır ( "GET" ) ;

eğer ( kullan_proxy )
istemcisi. baskı ( urlproxy ) ;
Başka
istemcisi. yazdırma ( yol ) ;

istemcisi. println ( "HTTP / 1.0" ) ;
istemcisi. println ( ) ;
Seri . println ( oktext ) ;
}

Bağlantı yapılmadıysa, bir hata yazdırın

Başka
{
// sunucuyla bağlantı bulamadıysanız
Seri . println ( hata metni ) ;
}

Sunucunun client.available() kullanarak bayt client.available() döndürmediğini kontrol edin. Varsa, response dizesine okuyun ve ardından bir char dizisine yayınlayın. Arduino.cc kaynağından geçerli bir yanıtı belirten "200 OK" alt dizesi için diziyi denetleyin.

Seri . print ( "Yanıt alınıyor ..." ) ;

boolean testi = doğru ;
süre ( test )
{
if ( istemci. kullanılabilir ( ) )
{
char c = istemci. read ( ) ;
cevap + = c ;

Char responsechar [cevap. uzunluk ( ) + 1 ] ;
tepki. toCharArray ( yanıt , yanıt. uzunluk ( ) + 1 ) ;

if ( strstr ( responseechar , "200 OK" ) ! = BOŞ ) {
Seri . println ( oktext ) ;
Seri . println ( "TEST TAMAMLANDI!" ) ;
test = yanlış ;
}
}

Sunucunun bağlantısı kesildiyse, istemciyi durdurun ve loop() kapatın loop()

if ( ! istemci. bağlı ( ) )
{
Seri . println ( ) ;
Seri . println ( "bağlantı kesiliyor." ) ;
istemcisi. stop ( ) ;
test = yanlış ;
}
}
}
}

Kodunuz yüklendikten sonra, bağlantının durumunu görmek için seri monitörü açın.

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

/ *

Bu çizim, MKR NB 1500 kartının bir
GPRS ağı. APN bilgilerini ister.
seri monitörü ve example.org'a bağlanmaya çalışır.

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

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


// kütüphaneler
#include <MKRNB.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
NB nbAccess ; // NB erişimi: hata ayıklama için bir 'true' parametresi etkin
GPRS gprsAccess ; // GPRS erişimi
NBClient istemcisi ; // TCP bağlantısı için istemci hizmeti

// seri monitör yanıtı için mesajlar
Dize oktext = "Tamam" ;
Dize errortext = "ERROR" ;

// URL ve yol (örneğin: example.org)
char url [ ] = "example.org" ;
char urlproxy [ ] = "http://example.org" ;
char yolu [ ] = "/" ;

// kaydedilen yanıtı kaydetmek için değişken
Dize yanıtı = "" ;

// proxy kullan
boolean use_proxy = yanlış ;

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
}
}

void loop ( ) {
use_proxy = yanlış ;

// başlangıç modülü
// SIM'iniz PIN koduna sahipse, tırnak işaretleri halinde begin () parametresi olarak iletin
Seri . print ( "NB IoT / LTE Cat M1 ağını bağlama ..." ) ;
eğer ( nbAccess. başlar ( PINNUMBER ) ! = NB_READY ) {
Seri . println ( hata metni ) ;
while ( true ) ;
}
Seri . println ( oktext ) ;

// GPRS ekle
Seri . println ( " GPRS'ye ekleniyor ..." ) ;
eğer ( gprsAccess. attachGPRS ( ) ! = GPRS_READY ) {
Seri . println ( hata metni ) ;
} başka {

Seri . println ( oktext ) ;

// kullanıcı tarafından sunulan proxy'yi oku
char proxy [ 100 ] ;
Seri . print ( "Operatörünüz bir proxy kullanıyorsa girin, değilse girin: tuşuna basın ) " ) ;
readSerial ( proxy ) ;
Seri . println ( proxy ) ;

// kullanıcı bir proxy tanıttıysa, ondan proxy bağlantı noktası ister
int pport ;
if ( proxy [ 0 ] ! = ' \ 0 ' ) {
// kullanıcı tarafından tanıtılan proxy bağlantı noktasını oku
char proxyport [ 10 ] ;
Seri . print ( "Proxy bağlantı noktasını girin:" ) ;
readSerial ( proxyport ) ;
// tamsayıya cast proxy bağlantı noktası eklendi
pport = ( int ) proxyport ;
use_proxy = true ;
Seri . println ( proxyport ) ;
}

// example.org ile bağlantı kurun ve HTTP isteği gerçekleştirin
Seri . print ( "example.org'a GET isteği bağlama ve gönderme ..." ) ;
int res_connect ;

// proxy kullanıyorsanız, ona bağlanın
if ( kullan_proxy ) {
res_connect = istemci. connect ( proxy , bağlantı noktası ) ;
} başka {
res_connect = istemci. bağlayın ( url , 80 ) ;
}

if ( res_connect ) {
// HTTP 1.0 GET isteği yapma (istemci isteği gönderir)
istemcisi. yazdır ( "GET" ) ;

// proxy kullanıyorsanız, yol example.org URL'sidir
if ( kullan_proxy ) {
istemcisi. baskı ( urlproxy ) ;
} başka {
istemcisi. yazdırma ( yol ) ;
}

istemcisi. println ( "HTTP / 1.1" ) ;
istemcisi. print ( "Ana Bilgisayar:" ) ;
istemcisi. println ( url ) ;
istemcisi. println ( "Bağlantı: kapat" ) ;
istemcisi. println ( ) ;
Seri . println ( oktext ) ;
} başka {
// sunucuyla bağlantı bulamadıysanız
Seri . println ( hata metni ) ;
}
Seri . print ( "Yanıt alınıyor ..." ) ;

boolean testi = doğru ;
while ( test ) {
// kullanılabilir gelen bayt varsa
// sunucudan okuyun ve kontrol edin
if ( müşteri. kullanılabilir ( ) ) {
char c = istemci. read ( ) ;
cevap + = c ;

// karakter dizisinden karakter dizisine alınıyor
Char responsechar [cevap. uzunluk ( ) + 1 ] ;
tepki. toCharArray ( yanıt , yanıt. uzunluk ( ) + 1 ) ;

// yanıt "200 OK" alt dizesi içeriyorsa
if ( strstr ( responseechar , "200 OK" ) ! = BOŞ ) {
Seri . println ( oktext ) ;
Seri . println ( "TEST TAMAMLANDI!" ) ;
test = yanlış ;
}
}

// sunucunun bağlantısı kesilirse, istemciyi durdurun:
if ( ! istemci. bağlı ( ) ) {
Seri . println ( ) ;
Seri . println ( "bağlantı kesiliyor." ) ;
istemcisi. stop ( ) ;
test = yanlış ;
}
}
}
}

/ *
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 ' ;
dönüş 0 ;
}
eğer ( inChar ! = ' \ r ' ) {
sonuç [ i ] = inChar ;
i ++;
}
}
}
}

See Also