GSMExamplesWebServer

Bu çizim, Arduino veya Genuino kartını GSM kalkanı ve veri özellikli bir SIM kart ile bir web sunucusuna dönüştürür. Kart bağlı bir istemciden bir istek aldığında, 0-5 analog girişlerin değerini geri gönderir.

Tüm şebeke operatörleri, şebekelerinin dışından gelen veri taleplerine izin vermez. Bu, GSM kalkanı ile bir web sunucusu oluşturabileceğiniz anlamına gelir, ancak kamuya açık internetten ona bağlanamayabilirsiniz; yalnızca aynı ağdaki aynı sağlayıcıdan başka bir veri etkin cihazdan. Gelen veri bağlantıları ile ilgili hangi politikaların uygulandığını görmek için sağlayıcınıza danışmalısınız.

Gerekli Donanım

Devre

Fotodirençler, potansiyometreler ve benzeri gibi isteğe bağlı analog sensörler, öğreticilerimizin başka yerlerinde açıklandığı gibi A0 - A5 pinlerine bağlanabilir

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

Bağlanacağınız GPRS ağı hakkında bilgi içeren bir dizi sabit tanımlayın. Erişim Noktası Adı (APN), oturum açma adı ve parola gerekir. Bu bilgileri edinmek için en güncel bilgiler için şebeke sağlayıcınıza başvurun. Bu sayfada çeşitli operatör ayarları hakkında bazı bilgiler var, ancak güncel olmayabilir.

#define GPRS_APN       "GPRS_APN"
#define GPRS_LOGIN     "login"
#define GPRS_PASSWORD  "password"
[Kodu Al]

Kullanacağınız sınıfların örneklerini başlatın. GSM, GPRS ve GSMServer sınıflarına ihtiyacınız olacak. GSMServer sınıfını başlatırken, gelen bağlantıları dinlemek için hangi bağlantı noktasını söylemeniz gerekir. 80 numaralı bağlantı noktası, HTTP istekleri için varsayılan bağlantı noktasıdır.

GPRS gpr'leri ;
GSM gsmAccess ;
GSMServer sunucusu ( 80 ) ;

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 ( "Arduino web istemcisini başlatma." ) ;

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. GPRS şebekesine gprs.attachGPRS() kullanarak da bağlanacaksınız. Bu, daha önce bildirdiğiniz APN, oturum açma adı ve parolayı gerektirir. Bir içinde bu yerleştirerek while() döngü, sürekli bağlantının durumunu kontrol edebilirsiniz haline hem etmesini beklemeniz true ilerlemeden önce.

Modem bağlandığında ve kendisini GPRS şebekesine gsmAccess() , gsmAccess() GSM_READY . 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 )
( gprs. attachGPRS ( GPRS_APN , GPRS_LOGIN , GPRS_PASSWORD ) == GPRS_READY ) )
notConnected = yanlış ;
Başka
{
Seri . println ( "Bağlı değil" ) ;
gecikme ( 1000 ) ;
}
}

server.begin() kullanarak server.begin() . Sunucunun IP adresini grps.getIPAddress() ile grps.getIPAddress() ve kurulumu sonlandırabilirsiniz.

sunucusu. begin ( ) ;

IPAdresi LocalIP = gprs. getIPAddress ( ) ;
Seri . println ( "Sunucu IP adresi =" ) ;
Seri . println ( LocalIP ) ;
}

Olarak loop , bir örneğini oluşturmak GSMClient ve herhangi bir aktif bağlantı olup olmadığını kontrol

void loop ( ) {
GSMClient istemcisi = sunucu. kullanılabilir ( ) ;

if ( müşteri )
{

İstemci bağlıyken ve okunmayı bekleyen veriler varken, isteği okumaya başlayın. Yeni satır karakteri alınana kadar kullanılabilir baytları okuyun.

Bu durumda, aslında istekle hiçbir şey yapmazsınız, bunun bir HTTP isteği olduğu varsayılır ve bir web sayfası sunarsınız.

while ( istemci. bağlı ( ) )
{
if ( istemci. kullanılabilir ( ) )
{
Seri . println ( "Alma talebi!" ) ;
bool sendResponse = yanlış ;
while ( char c = istemci. read ( ) ) {
eğer ( c == ' \ n ' ) sendResponse = true ;
}

İstek okunduktan sonra, client.print() ve client.println() ile standart bir HTTP yanıt başlığı göndermeye başlayın.

eğer ( sendResponse )
{
istemcisi. println ( "HTTP / 1.1 200 TAMAM" ) ;
istemcisi. println ( "İçerik Tipi: metin / html" ) ;
istemcisi. println ( ) ;
istemcisi. println ( "<html>" ) ;

Analog girişleri okuyun ve değerleri istemciye gönderin.

for ( int analogChannel = 0 ; analogChannel < 6 ; analogChannel ++ ) {
istemcisi. baskı ( "analog giriş" ) ;
istemcisi. baskı ( analog Kanal ) ;
istemcisi. print ( "is" ) ;
istemcisi. print ( analogRead ( analogChannel ) ) ;
istemcisi. println ( "<br />" ) ;
}

Web sayfası için bir kapanış etiketi gönderin ve loop kapatmadan önce istemci bağlantısını durdurun.

istemcisi. println ( "</html>" ) ;
// gerekli gecikme
gecikme ( 1000 ) ;
istemcisi. stop ( ) ;
}
}
}
}
}

Kodunuz yüklendikten sonra seri monitörü açın. IP adresi seri monitöre yazdırıldıktan sonra, bir web tarayıcısına girin. Her Arduino'nun altı girişindeki analog giriş değerlerini bildiren bir web sayfası görmelisiniz.

IP adresine bağlanamıyorsanız, şebeke operatörünüzün gelen trafiği etkinleştirdiğinden emin olun.

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

/ *
GSM Web Sunucusu

Analog giriş pinlerinin değerini gösteren basit bir web sunucusu.
bir GSM kalkanı kullanarak.

Devre:
* GSM kalkanı takılı
* A0 - A5 pinlerine bağlı analog girişler (isteğe bağlı)

oluşturuldu 8 Mar 2012
tarafından Tom Igoe
* /


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

// PIN numarası
#define PINNUMBER ""

// APN verileri
#define GPRS_APN "GPRS_APN" // GPRS APN'nizi değiştirin
#define GPRS_LOGIN "login" // GPRS giriş bilgilerinizle değiştirin
#define GPRS_PASSWORD "şifre" // GPRS şifrenizle değiştirin


// kütüphane örneğini başlat
GPRS gpr'leri ;
GSM gsmAccess ; // hata ayıklama için bir 'true' parametresi dahil et
GSMServer sunucusu ( 80 ) ; // bağlantı noktası 80 (http varsayılanı)

// zaman aşımı
const imzasız uzun __TIMEOUT__ = 10 * 1000 ;

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
}

// bağlantı durumu
bool notConnected = true ;

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

Seri . println ( "GPRS şebekesine bağlı" ) ;

// sunucuyu başlat
sunucusu. begin ( ) ;

// IP al.
IPAdresi LocalIP = gprs. getIPAddress ( ) ;
Seri . println ( "Sunucu IP adresi =" ) ;
Seri . println ( LocalIP ) ;
}

void loop ( ) {


// gelen müşterileri dinle
GSMClient istemcisi = sunucu. kullanılabilir ( ) ;



if ( müşteri ) {
while ( istemci. bağlı ( ) ) {
if ( müşteri. kullanılabilir ( ) ) {
Seri . println ( "Alma talebi!" ) ;
bool sendResponse = yanlış ;
while ( char c = istemci. read ( ) ) {
if ( c == ' \ n ' ) {
sendResponse = true ;
}
}

// satırın sonuna geldiyseniz (yeni satır aldı)
// karakter)
if ( sendResponse ) {
// standart bir http yanıt başlığı gönder
istemcisi. println ( "HTTP / 1.1 200 TAMAM" ) ;
istemcisi. println ( "İçerik Tipi: metin / html" ) ;
istemcisi. println ( ) ;
istemcisi. println ( "<html>" ) ;
// her analog giriş piminin değerini çıktılayın
for ( int analogChannel = 0 ; analogChannel < 6 ; analogChannel ++ ) {
istemcisi. baskı ( "analog giriş" ) ;
istemcisi. baskı ( analog Kanal ) ;
istemcisi. print ( "is" ) ;
istemcisi. print ( analogRead ( analogChannel ) ) ;
istemcisi. println ( "<br />" ) ;
}
istemcisi. println ( "</html>" ) ;
// gerekli gecikme
gecikme ( 1000 ) ;
istemcisi. stop ( ) ;
}
}
}
}
}

See Also