TTGo SIM800 GPRS HTTP Request
SIM800 ile veriler, POST/GET kullanılarak HTTP aracılığıyla bir web sunucusuna gönderilebilir. Bu, sitede Ethernet, LoRa veya WiFi yoksa, ev yapımı bir hava istasyonunu veya diğer sensörleri İnternete bağlamanıza olanak tanır. Bu makale, AT komutlarını kullanarak SIM800 ile bir HTTP isteği gönderme hakkındadır. SIM800'den Arduino ve ESP32'ye devreye alma ve kablolama ile ilgili tüm bilgiler SIM800 Temelleri makalesinde mevcuttur.
Modülü başlatma
Normalde modül, ilgili güç kaynağı kurulur kurulmaz otomatik olarak başlar. Modül otomatik olarak GSM mobil ağına giriş yapar ve aramaları ve SMS'leri alabilir. Pratikte, modülün başlatılması, oturum açılması ve çalışmaya hazır hale gelmesi için yaklaşık 10 saniyeye ihtiyacı vardır. Ancak o zaman arama yapmak, SMS göndermek veya bu durumda olduğu gibi GPRS veri iletimi yapmak mümkündür.
GPRS'yi yapılandırın
SIM800 ile İnternet'e erişmek için GRPS gereklidir. GPRS (Genel Paket Radyo Servisi), GSM şebekesi üzerinde paket odaklı veri iletimini sağlayan bir servistir. Ek olarak, aşağıdaki komutlarla SIM800'e aktarılan bazı yapılandırma parametreleri gereklidir:
[AT+SAPBR=3,1,Contype,"GPRS"]
Bu komut, SIM800'deki GPRS bağlantı parametresini ayarlar.
[AT+SAPBR=3,1,APN,"APN"]
Bu komut, APN parametresini SIM800'e yazar. APN (Erişim Noktası Adı), mobil ağdaki erişim noktasıdır (ağ geçidi). APN genellikle sağlayıcıların web sitesinde bulunabilir.
[AT+SAPBR=3,1,USER,"Username"]
Bu komut, APN kullanıcı adını SIM800'e yazar. Not: Bazı mobil ağlar veya APN, bir kullanıcı adı gerektirmez. Bu durumda bu AT komutu tamamen atlanabilir.[AT+SAPBR=3,1,PWD,"Password"]Bu komut, APN şifresini SIM800'e yazar. Not: Bazı mobil ağlar veya APN parola gerektirmez. Bu durumda bu AT komutu tamamen atlanabilir.
GPRS operatörünü aç
SIM800, konfigürasyon parametrelerini aldıktan sonra, şimdi gerçek GPRS veri bağlantısı kurulabilir. Not: GPRS, yalnızca HTTP isteğinden hemen önce açılmalıdır. Veri aktarımından sonra GPRS bağlantısı [AT+SAPBR=0,1] ile sonlandırılmalıdır. GPRS taşıyıcısından başlamak için aşağıdaki komut gereklidir:
[AT+SAPBR=1,1]
Bu komut, taşıyıcıyı önceden tanımlanmış parametrelerle açar. Bu, GPRS için başlatma komutu olarak görülebilir.
[AT+SAPBR=2,1]
Bu komut, önceden açılmış GPRS taşıyıcısının durumunu sorgular ve yalnızca tanı amaçlıdır.
[AT+SAPBR=0,1]
Bu komut GRPS taşıyıcısını sonlandırır ve yalnızca veri aktarımından sonra yürütülür.HTTP bağlantısı kurunSIM800, bir GPRS bağlantısını başarıyla kurduktan sonra, bir HTTP isteği başlatılabilir. Yine, bazı parametrelerin AT komutları aracılığıyla SIM800'e gönderilmesi gerekir.
[AT+HTTPINIT]
Bu komut, HTTP hizmetini başlatır. SIM800, bir HTTP isteğinin başladığı konusunda bilgilendirilecektir.
[AT+HTTPPARA=CID,"1"]
Bu komut, taşıyıcı profilini tanımlar. Genellikle bu her zaman 1'dir.
[AT+HTTPPARA=URL,"URL"]
Bu komut, çağrılacak URL'yi iletir. Bir web tarayıcısında girilen biçimin aynısıdır. Sunucu 80 numaralı bağlantı noktasında çalışmıyorsa, ilgili bağlantı noktası URL veya IP'nin sonuna eklenir. Örnekler: http://www.aeq-web.com veya http://123.123.123.123 veya http://url.com:8080
[AT+HTTPPARA=CONTENT,application/x-www-form-urlencoded]
Bu komut, mevcut isteğin içerik türünü tanımlar. İçerik türü yalnızca web sunucusuyla ilgilidir. İstekteki hangi medya türünün sunucuya gönderileceğini söyler.
[AT+HTTPDATA=192,10000]
Bu komut, aktarılacak kullanıcı verilerinin boyutunu bayt olarak tanımlar. Burada şu geçerlidir: Çok azdan biraz daha iyi, ama aynı zamanda çok fazla değil. 192 bayt değeri genellikle birkaç parametreyi (örneğin bir hava istasyonunun ölçülen değerleri) aktarmak için yeterlidir. İkinci sayı, SIM800'ün talebi iptal etmesinden önce verilerin ulaşması gereken süreyi (milisaniye) belirtir. Bu birçok faktöre bağlıdır (bağlantı, sunucu, veri miktarı...) ve bir ile 120 saniye arasında bir değer olabilir. Yine, 10 saniye (10000 ms) cömert bir değerdir.
[Posta adı=VALUE]
(Kullanıcı verileri)
Önceki komut gönderildikten sonra, SIM800 kullanıcı verilerini bekler. POST parametreleri şimdi önceden tanımlanmış zaman penceresi içinde SIM800'e aktarılabilir.
[AT+HTTPACTION=1]
HTTPACTION ile aktarım yöntemi tanımlanır. Aşağıdakiler geçerlidir: 0=GET, 1=POST, 2=HEAD. Yanıt, sunucudan gelen durum kodunu ve veri uzunluğunu içerir.
[AT+HTTPREAD]
Bu komut, çağrılacak URL'yi iletir. Kullanıcı verileri de bu komut aracılığıyla alınır ve mikrodenetleyici tarafından daha fazla kontrol ayarları için değerlendirilebilir.
[AT+HTTPTERM]
Bu komut, çalışan bir HTTP isteğini iptal eder.
Örnek kod (ESP32) ESP32
SIM800 kartı için örnek kod,
yukarıda belirtilen AT komutlarını içerir ve bunları doğru sırayla iletir. Başarılı bir çalışma için öncelikle temel parametrelerin (APN...) ve pinlerin kodda doğru tanımlanması gerekir.
Örnek koddaki pinler zaten karta uyarlanmıştır.
Tüm bilgiler SIM800 Temelleri makalesinde mevcuttur.
Ardından SIM800'ün güç kaynağı açılır ve seri bağlantı etkinleştirilir.
Yazılım, SIM800 mobil ağa bağlanana ve çalışmaya hazır olana kadar yaklaşık 10 saniye bekler. Ardından "gsm_config_gprs" işlevi çağrılır.
Tüm önemli parametreler (bağlantı türü, APN, kullanıcı adı, şifre) SIM800'e aktarılır.
Önemli: SIM800 kapatılırsa, bu parametreler bir sonraki başlatmada tekrar SIM800'e iletilmelidir.
Ardından, aktarılacak ilgili post parametreleriyle birlikte "gsm_http_post" işlevi çağrılır.
Burada önce GRPS taşıyıcısı etkinleştirilir ve ardından HTTP işlevi çağrılır.
Veri aktarımı tamamlandığında GPRS taşıyıcısının bağlantısı tekrar kesilir ve mikrodenetleyici bu fonksiyon tekrar çağrılana kadar bekler.
"gsm_send_serial" işlevi, SIM800 ile çift yönlü iletişimi yönetir. Döngü aracılığıyla mikrodenetleyici, SIM800'den gelen yanıtlar için yaklaşık 3 saniye bekler. Modülün daha uzun bir yanıta ihtiyacı varsa, işlev veri gelene kadar bekler. Çıktı, tanılama amaçlarına uygun olan Seri Monitördedir. Hala sorun varsa, cevaplar için bekleme süresi uzatılabilir.
// ESP32 SIM800 HTTP POST TEST | V 1.0_2020-AUG-18
#define SIM800L_RX 27 // SIM800L RX Pini (ESP32'nin TX Piniyle bağlantılı)
#define SIM800L_TX 26 // SIM800L TX Pini (ESP32'nin RX Piniyle bağlantılı)
#define SIM800L_PWRKEY 4 // SIM800L PWRKEY Pini (SIM800L'yi açıp/kapamak için ESP32 Pini)
#define SIM800L_RST 5 // SIM800L RST Pini (SIM800L'yi sıfırlamak için ESP32 Pini)
#define SIM800L_POWER 23 // SIM800L POWER Pini (SIM800L'yi beslemek için ESP32 Pini)
String apn = "APN"; // GPRS bağlantısı için Access Point Name (APN)
String apn_u = ""; // APN Kullanıcı adı (gerekirse)
String apn_p = ""; // APN Şifresi (gerekirse)
String url = "http://testserver.com/sim800_test/sim800.php"; // HTTP POST için Sunucu URL'si
void setup()
{
pinMode(SIM800L_POWER, OUTPUT); // SIM800L güç pini çıkış olarak ayarlanıyor
digitalWrite(SIM800L_POWER, HIGH); // SIM800L modülü besleniyor
Serial.begin(115200); // ESP32 ile Seri iletişim başlatılıyor
Serial.println("ESP32+SIM800L AT CMD Test");
Serial2.begin(9600, SERIAL_8N1, SIM800L_TX, SIM800L_RX); // SIM800L ile iletişim için Serial2 başlatılıyor
delay(15000); // SIM800L'nin açılması için 15 saniye beklenecek
while (Serial2.available()) {
Serial.write(Serial2.read()); // Başlangıçta SIM800L'den gelen yanıtlar gösteriliyor
}
delay(2000);
gsm_config_gprs(); // SIM800L için GPRS ayarları yapılandırılıyor
}
void loop() {
gsm_http_post("param=TestFromMySim800"); // Verilen parametre ile HTTP POST isteği yapılıyor
delay(30000); // Bir sonraki HTTP POST'tan önce 30 saniye bekleniyor
}
void gsm_http_post( String postdata) {
Serial.println(" --- GPRS ve HTTP Başlatılıyor --- ");
gsm_send_serial("AT+SAPBR=1,1"); // GPRS bağlantısı aktif ediliyor
gsm_send_serial("AT+SAPBR=2,1"); // GPRS bağlantısı açılıyor
gsm_send_serial("AT+HTTPINIT"); // HTTP servisi başlatılıyor
gsm_send_serial("AT+HTTPPARA=CID,1"); // HTTP oturum kimliği (Context ID) ayarlanıyor
gsm_send_serial("AT+HTTPPARA=URL," + url);// HTTP URL'si ayarlanıyor
gsm_send_serial("AT+HTTPPARA=CONTENT,application/x-www-form-urlencoded"); // HTTP içerik tipi ayarlanıyor
gsm_send_serial("AT+HTTPDATA=192,5000"); // HTTP verisi (POST veri boyutu ve zaman aşımı) hazırlanıyor
gsm_send_serial(postdata); // POST verisi gönderiliyor
gsm_send_serial("AT+HTTPACTION=1"); // HTTP POST işlemi başlatılıyor
gsm_send_serial("AT+HTTPREAD"); // HTTP yanıtı okunuyor
gsm_send_serial("AT+HTTPTERM"); // HTTP servisi sonlandırılıyor
gsm_send_serial("AT+SAPBR=0,1"); // GPRS bağlantısı kapatılıyor
}
void gsm_config_gprs() {
Serial.println(" --- GPRS AYARLARI --- ");
gsm_send_serial("AT+SAPBR=3,1,Contype,GPRS"); // GPRS bağlantı tipi ayarlanıyor
gsm_send_serial("AT+SAPBR=3,1,APN," + apn); // GPRS bağlantısı için APN ayarlanıyor
if (apn_u != "") {
gsm_send_serial("AT+SAPBR=3,1,USER," + apn_u);// Kullanıcı adı varsa ayarlanıyor
}
if (apn_p != "") {
gsm_send_serial("AT+SAPBR=3,1,PWD," + apn_p); // Şifre varsa ayarlanıyor
}
}
void gsm_send_serial(String command) {
Serial.println("Gönderiliyor ->: " + command); // Gönderilen komut gösteriliyor
Serial2.println(command); // Komut SIM800L'ye gönderiliyor
long wtimer = millis();
while (wtimer + 3000 > millis()) {
while (Serial2.available()) {
Serial.write(Serial2.read()); // SIM800L'den gelen yanıtlar gösteriliyor
}
}
Serial.println();
}
Aşağıdaki resim, bir HTTP-Post sorgusu sırasında Arduino IDE Seri Monitöründen bir çıktıyı göstermektedir:
Örnek Kod SIM800 ArduinoYukarıdaki örnek kodun aksine, bu kod, iletişim için yazılım serilerini kullanır, çünkü donanım serisinin bazı dezavantajları vardır. Daha fazla bilgi için bkz.: SIM800 Temelleri. Komutlar ve program akışı yukarıdaki örnekle hemen hemen aynıdır.
#include <SoftwareSerial.h>
String apn = "APN"; //APN
String apn_u = ""; //APN-Kullanıcı Adı
String apn_p = ""; //APN-Şifre
String url = "http://testserver.com/sim800_test/sim800.php"; //Sunucunun URL'si
SoftwareSerial SWserial(8, 9); // RX, TX
void setup()
{
Serial.begin(115200);
Serial.println("SIM800 AT CMD Test");
SWserial.begin(9600);
delay(15000);
while (SWserial.available()) {
Serial.write(SWserial.read());
}
delay(2000);
gsm_config_gprs();
}
void loop() {
gsm_http_post("param=TestFromMySim800");
delay(30000);
}
void gsm_http_post( String postdata) {
Serial.println(" --- GPRS ve HTTP Başlatılıyor --- ");
gsm_send_serial("AT+SAPBR=1,1");
gsm_send_serial("AT+SAPBR=2,1");
gsm_send_serial("AT+HTTPINIT");
gsm_send_serial("AT+HTTPPARA=CID,1");
gsm_send_serial("AT+HTTPPARA=URL," + url);
gsm_send_serial("AT+HTTPPARA=CONTENT,application/x-www-form-urlencoded");
gsm_send_serial("AT+HTTPDATA=192,5000");
gsm_send_serial(postdata);
gsm_send_serial("AT+HTTPACTION=1");
gsm_send_serial("AT+HTTPREAD");
gsm_send_serial("AT+HTTPTERM");
gsm_send_serial("AT+SAPBR=0,1");
}
void gsm_config_gprs() {
Serial.println(" --- GPRS AYARLARI --- ");
gsm_send_serial("AT+SAPBR=3,1,Contype,GPRS");
gsm_send_serial("AT+SAPBR=3,1,APN," + apn);
if (apn_u != "") {
gsm_send_serial("AT+SAPBR=3,1,USER," + apn_u);
}
if (apn_p != "") {
gsm_send_serial("AT+SAPBR=3,1,PWD," + apn_p);
}
}
void gsm_send_serial(String command) {
Serial.println("Gönderiliyor ->: " + command);
SWserial.println(command);
long wtimer = millis();
while (wtimer + 3000 > millis()) {
while (SWserial.available()) {
Serial.write(SWserial.read());
}
}
Serial.println();
}
SSL bağlantıları
SIM800, SSL'yi destekler ve ayrıca HTTPS aracılığıyla bir web sunucusuyla iletişim kurabilir. Bunun için aşağıdaki gereksinimler gereklidir:Mevcut bellenime sahip SIM800 (eski sürümler bu özelliği desteklemez)Desteklenen SSL türü (TLS 1.0 , SSL 2.0, SSL 3.0) SSL, HTTPS, FTPS, POP3 ve SMTP için kullanılabilir.
Dosya sistemi aracılığıyla kendi SSL sertifikalarınızı SIM800'e yüklemek ve içe aktarmak da mümkündür.
Not: Modül tüm teknolojileri desteklemez ve bu nedenle bazı web sunucularıyla uyumlu değildir.
Yapılandırmanın web sunucusu tarafından değiştirilmesi gerekebilir.SIM800 ile HTTPS İsteğiWeb sunucusundaki gereksinimler yeterliyse, SIM800, POST veya GET parametreleriyle bir HTTPS isteği yapmak için kullanılabilir. HTTPS ile bir istek başlatmak için URL "https://" ile başlamalıdır. [AT+HTTPSSL=1] komutu ile SSL aktif hale getirilebilir.
Bu komut [AT+HTTPACTION]'dan önce, yani asıl istek başlatılmadan önce gönderilmelidir. Geçersiz veya kendinden imzalı sertifikalara sahip sunuculara SSL bağlantıları da gerçekleştirilebilir. [AT+SSLOPT=0,1] komutu, SSL sertifikalarının doğrulanmasını devre dışı bırakır.
Ünal KURTGÖZ (Yazar)
Hayal gücü bilgiden kıymetlidir.
Makaleleri
16
Makale Okunması
89179
Yorumunuz Gönder