Eğitimler
GSMToolsTestGPRS
Bu çizim, GSM kalkanındaki GPRS veri bağlantısını test eder. Arduino.cc'ye bağlanmaya çalışır.
GSM kalkanıyla 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
- Arduino veya Genuino Kurulu
- Arduino + Telefonica GSM / GPRS Kalkanı
- Veri için SIM kart etkinleştirme
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. GSM, GPRS ve GSMClient sınıflarına ihtiyacınız olacak.
GPRS gprsAccess;
GSM gsmAccess;
Seri monitöre göndermek için bazı durum mesajları oluşturun:
Dize errortext = "ERROR" ;
Bağlanmak istediğiniz sunucuyu, yolu ve proxy'yi tutmak için bazı değişkenler oluşturun.
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.
boolean use_proxy = yanlış ;
setup
, bilgisayara seri bir bağlantı açın.
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.
{
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.
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
{
use_proxy = yanlış ;
PIN numarasını (varsa) gsmAccess.begin()
ileterek GSM şebekesine bağlantıyı gsmAccess.begin()
.
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
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
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
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
.
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.
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
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.
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.
{
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
{
// 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.
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()
{
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, GSM kalkanının bir
GPERS ağı. APN bilgilerini ister.
seri monitör ve arduino.cc bağlanmaya çalışır.
Devre:
* GSM kalkanı takılı
* Veri planlı SIM kart
18 Haz 2012 tarihinde oluşturuldu
ile David del Peral
Bu örnek kod, genel alanın bir parçasıdır
http: egitim.aspx e = GSMToolsTestGPRS
* /
// kütüphaneler
#include <GSM.h>
// PIN numarası
#define PINNUMBER ""
// kütüphane örneğini başlat
GSM gsmAccess ; // GSM erişimi: hata ayıklama için bir 'true' parametresi dahil et
GPRS gprsAccess ; // GPRS erişimi
GSMClient 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: arduino.cc)
char url [ ] = "arduino.cc" ;
char urlproxy [ ] = "http://www.arduino.cc" ;
char yolu [ ] = "/" ;
// kaydedilen yanıtı kaydetmek için değişken
Dize yanıtı = "" ;
// proxy kullan
bool 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ış ;
// GSM kalkanını başlat
// SIM'iniz PIN koduna sahipse, tırnak işaretleri halinde begin () parametresi olarak iletin
Seri . print ( "GSM şebekesi bağlanıyor ..." ) ;
eğer ( gsmAccess. başlar ( PINNUMBER ) ! = GSM_READY ) {
Seri . println ( hata metni ) ;
while ( true ) ;
}
Seri . println ( oktext ) ;
// kullanıcı tarafından tanıtılan APN'yi oku
karakter apn [ 50 ] ;
Seri . print ( "APN'nizi girin:" ) ;
readSerial ( apn ) ;
Seri . println ( apn ) ;
// Kullanıcı tarafından sunulan APN girişini okuyun
karakter girişi [ 50 ] ;
Seri . print ( "Şimdi girişinizi girin:" ) ;
readSerial ( giriş ) ;
Seri . println ( giriş ) ;
// kullanıcı tarafından girilen APN şifresini okuyun
karakter şifresi [ 20 ] ;
Seri . print ( "Son olarak, şifrenizi girin:" ) ;
readSerial ( şifre ) ;
// GPRS ekle
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 ) ;
// 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 ) ;
}
// arduino.cc ile bağlantı ve HTTP isteğini gerçekleştirme
Seri . print ( "arduino.cc'ye 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 arduino.cc URL'sidir
if ( kullan_proxy ) {
istemcisi. baskı ( urlproxy ) ;
} başka {
istemcisi. yazdırma ( yol ) ;
}
istemcisi. println ( "HTTP / 1.0" ) ;
istemcisi. println ( ) ;
Seri . println ( oktext ) ;
} başka {
// sunucuyla bağlantı bulamadıysanız
Seri . println ( hata metni ) ;
}
Seri . print ( "Yanıt alınıyor ..." ) ;
bool 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
- 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.
- GPRSinşaatçı
- GSMClientinşaatçı
- attachGPRS()
- 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.
- GSMToolsPinManagement- PIN numarası nasıl değiştirilir veya kaldırılı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.