3000 TL ve üzeri siparişlerde Kargo Ücretsiz!
Sim800L Gsm Modul ile  IoT Entegrasyonu

Sim800L Gsm Modul ile IoT Entegrasyonu

SIM800L GSM modülünü kullanarak projelerinizi IoT ile entegre edin! Bu rehber, SIM800L GSM modülü ile IoT entegrasyonu hakkında bilgiler ve örnek projeler içerir.

5 dk okuma 1044 okunma

Ev Otomasyonu için SIM800C ile İnternet Üzerinden Kontrol: Röleler, Akım Sensörleri ve IoT Entegrasyonu

Giriş:

Ev otomasyonu, günümüzdeki akıllı ev trendinin temelini oluştururken, cihazlarımızı ve evlerimizi daha da akıllı hale getirmemize yardımcı oluyor. Bu makalede, SIM800C modülünü kullanarak ev otomasyonunu bir adım ileri taşımak için nasıl bir projeyi hayata geçirebileceğinizi keşfedeceksiniz. SIM800C, internete bağlanabilen ve SMS gönderebilen bir GSM/GPRS modülüdür. Bu proje, SIM800C'yi kullanarak evinizdeki röleleri kontrol etmenizi, akım sensörleri aracılığıyla rölelerin çalışma durumunu izlemenizi ve IoT sunucusuyla entegrasyon yapmanızı sağlayacaktır.

Makalenin İçeriği:

1. SIM800C Modülü ve Bağlantıları: SIM800C modülünün özellikleri, bağlantıları ve ESP32 ile nasıl entegre edileceği hakkında bilgi verilecektir. Ayrıca, modülün çalıştırılması ve seri iletişim ayarları da açıklanacaktır.

2. Rölelerin Kontrolü: SIM800C modülü aracılığıyla SMS göndererek röleleri açma ve kapama işlemlerinin nasıl gerçekleştirileceği anlatılacaktır. Master telefon numarasının belirlenmesi, şifre koruması ve yeni telefon numaralarının eklenmesi gibi güvenlik önlemleri de ele alınacaktır.

3. Akım Sensörleri ve Durum İzleme: Rölelerin çalışma durumunu izlemek için akım sensörleri kullanılacaktır. Akım sensörleriyle motorların çektiği akım değerleri ölçülecek ve ilk çalışmada bu değerlerin SMS ile bildirilmesi sağlanacaktır.

4. IoT Entegrasyonu: Rölelerin durumu ve akım değerleri, IoT sunucusuna (örneğin 192.168.1.45) HTTP GET isteği göndererek gönderilecektir. Bu şekilde, canlı olarak rölelerin durumu ve akım değerlerini izleyebileceğiniz bir IoT platformu oluşturabilirsiniz.

5. Ek Özellikler: DTMF sinyalleri aracılığıyla röleleri açma ve kapama, master telefon numarasının değiştirilmesi, telefon numaralarının eklenmesi gibi ek özellikler de projeye entegre edilecektir.

Sonuç:

Bu makalede, SIM800C modülünü kullanarak ev otomasyonu için bir proje geliştirmenin temel adımlarını öğrendiniz. Rölelerin kontrol edilmesi, akım sensörleri aracılığıyla durum izleme ve IoT sunucusuyla entegrasyon gibi işlevlerle, evinizin kontrolünü ve izlemesini daha da akıllı hale getirebilirsiniz. Bu projeyi uygulayarak, ev otomasyonunda ileri seviyede bir deneyim elde edebilirsiniz.

#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <WiFi.h>
#include <HTTPClient.h>

SoftwareSerial sim800c(2, 3); // ESP32'nin RX ve TX pinlerine bağlanan SIM800C

const int RELAY_PIN_1 = 4; // Röle 1 kontrol pini
const int RELAY_PIN_2 = 5; // Röle 2 kontrol pini

const int CURRENT_SENSOR_PIN_1 = A0; // Röle 1 akım sensörü pin
const int CURRENT_SENSOR_PIN_2 = A1; // Röle 2 akım sensörü pin

String masterPhoneNumber; // Master telefon numarası
String secondaryPhoneNumber; // İkincil telefon numarası

const String PASSWORD = "1234"; // Şifre

const char* ssid = "your_wifi_ssid"; // WiFi ağı adı
const char* password = "your_wifi_password"; // WiFi şifresi

const char* serverIP = "192.168.1.45"; // IoT sunucusunun IP adresi
const int serverPort = 80; // IoT sunucusunun portu

void setup() {
Serial.begin(9600);
sim800c.begin(9600);

pinMode(RELAY_PIN_1, OUTPUT);
pinMode(RELAY_PIN_2, OUTPUT);

pinMode(CURRENT_SENSOR_PIN_1, INPUT);
pinMode(CURRENT_SENSOR_PIN_2, INPUT);

connectToWiFi();

delay(2000);

sendCommand("AT"); // Modülü kontrol etmek için AT komutu gönder
delay(1000);

sendCommand("AT+CMGF=1"); // SMS modunu metin moduna ayarla
delay(1000);

sendCommand("AT+CNMI=2,2,0,0,0"); // Gelen SMS mesajlarını seri porta yönlendir
delay(1000);

masterPhoneNumber = readPhoneNumberFromEEPROM(0); // EEPROM'dan master telefon numarasını oku
secondaryPhoneNumber = readPhoneNumberFromEEPROM(20); // EEPROM'dan ikincil telefon numarasını oku
}

void loop() {
// SMS mesajlarını kontrol et
checkSMS();

// DTMF sinyallerini kontrol et
checkDTMF();

// Akım değerlerini oku
float current1 = readCurrent(CURRENT_SENSOR_PIN_1);
float current2 = readCurrent(CURRENT_SENSOR_PIN_2);

// İlk çalışmada akım değerlerini SMS olarak gönder
static bool isFirstRun = true;
if (isFirstRun) {
sendSMS(masterPhoneNumber, "Motorlar çalıştı.\nRöle 1 Akım Değeri: " + String(current1) + "A\nRöle 2 Akım Değeri: " + String(current2) + "A");
isFirstRun = false;
}

// Akım ve voltaj değerlerini IoT sunucusuna gönder
sendDataToServer(current1, current2);

// Diğer işlemler...
}

void checkSMS() {
if (sim800c.available()) {
String sms = sim800c.readString();
Serial.println(sms);

if (sms.indexOf("#") != -1 && sms.indexOf("*") != -1) {
int passwordStartIndex = sms.indexOf("#") + 1;
int passwordEndIndex = sms.indexOf("*");
String passwordAttempt = sms.substring(passwordStartIndex, passwordEndIndex);

if (passwordAttempt == PASSWORD) {
int masterNumberStartIndex = passwordEndIndex + 1;
int masterNumberEndIndex = sms.length();
String newMasterNumber = sms.substring(masterNumberStartIndex, masterNumberEndIndex);
masterPhoneNumber = newMasterNumber;
writePhoneNumberToEEPROM(0, masterPhoneNumber); // Master telefon numarasını EEPROM'a kaydet
sendSMS(masterPhoneNumber, "Master telefon numarası güncellendi.");
} else {
sendSMS(masterPhoneNumber, "Geçersiz şifre.");
}
}
}
}

void checkDTMF() {
if (sim800c.available()) {
String dtmf = sim800c.readString();
Serial.println(dtmf);

if (dtmf.indexOf("1") != -1 && isAuthorizedPhoneNumber("")) {
digitalWrite(RELAY_PIN_1, HIGH); // Röle 1'i aç
sendSMS(masterPhoneNumber, "Röle 1 açıldı.");
} else if (dtmf.indexOf("2") != -1 && isAuthorizedPhoneNumber("")) {
digitalWrite(RELAY_PIN_1, LOW); // Röle 1'i kapat
sendSMS(masterPhoneNumber, "Röle 1 kapatıldı.");
} else if (dtmf.indexOf("3") != -1 && isAuthorizedPhoneNumber("")) {
digitalWrite(RELAY_PIN_2, HIGH); // Röle 2'yi aç
sendSMS(masterPhoneNumber, "Röle 2 açıldı.");
} else if (dtmf.indexOf("4") != -1 && isAuthorizedPhoneNumber("")) {
digitalWrite(RELAY_PIN_2, LOW); // Röle 2'yi kapat
sendSMS(masterPhoneNumber, "Röle 2 kapatıldı.");
}
}
}

float readCurrent(int sensorPin) {
int sensorValue = analogRead(sensorPin);
float voltage = sensorValue * (5.0 / 1023.0); // Vref = 5V
float current = voltage / 0.185; // Akım sensörünün hassasiyeti (185mV/A) için düzeltme faktörü
return current;
}

void sendDataToServer(float current1, float current2) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;

String url = "http://" + String(serverIP) + ":" + String(serverPort);
url += "?current1=" + String(current1);
url += "&current2=" + String(current2);

http.begin(url);

int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response Code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("HTTP Error: ");
Serial.println(httpResponseCode);
}

http.end();
}
}

void connectToWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}

void sendCommand(String command) {
sim800c.println(command);
delay(1000);
while (sim800c.available()) {
Serial.write(sim800c.read());
}
}

void sendSMS(String phoneNumber, String message) {
sim800c.println("AT+CMGS=\"" + phoneNumber + "\"");
delay(1000);
sim800c.println(message);
delay(1000);
sim800c.write(26);
delay(1000);
}

bool isAuthorizedPhoneNumber(String sms) {
return sms.indexOf(masterPhoneNumber) != -1 || sms.indexOf(secondaryPhoneNumber) != -1;
}

String readPhoneNumberFromEEPROM(int address) {
String phoneNumber = "";
for (int i = 0; i < 20; i++) {
char character = EEPROM.read(address + i);
if (character != '\0') {
phoneNumber += character;
} else {
break;
}
}
return phoneNumber;
}

void writePhoneNumberToEEPROM(int address, String phoneNumber) {
int phoneNumberLength = phoneNumber.length();
for (int i = 0; i < phoneNumberLength; i++) {
EEPROM.write(address + i, phoneNumber[i]);
}
EEPROM.write(address + phoneNumberLength, '\0');
EEPROM.commit();
}

kodda, WiFi.h ve HTTPClient.h kütüphaneleri eklenmiştir. Ayrıca connectToWiFi() ve sendDataToServer() fonksiyonları eklenmiştir. connectToWiFi() fonksiyonu, WiFi ağına bağlanmayı ve bağlantı sağlandığında bunu seri porta yazmayı sağlar.

sendDataToServer() fonksiyonu, current1 ve current2 değerlerini IoT sunucusuna HTTP GET isteği göndererek gönderir. İkinci telefon numarası ile ilgili olarak herhangi bir değişiklik yapmadım çünkü sadece master numarayı değiştirme talebiniz vardı.

Kodu projenizde kullanmadan önce, WiFi ağı adını ve şifresini ssid ve password değişkenlerine ayarlamayı unutmayın. Ayrıca, IoT sunucusunun IP adresini serverIP değişkenine ve portunu serverPort değişkenine ayarlayın.

Paylaş
Tüm yazılara dön

Yorumlar

Bu yazıya henüz yorum yapılmamış. İlk yorumu siz yazın.

E-posta adresiniz yayınlanmaz. Yorumlar yayınlanmadan önce denetlenir.

Bu form Google reCAPTCHA ile korunmaktadır; Google Gizlilik Politikası ve Hizmet Şartları geçerlidir.

Benzer Yazılar

TTGo SIM800 GPRS HTTP Request

Arduino platformu üzerinde TTGo SIM800 GPRS modülü kullanarak HTTP isteği gönderme adımları. Bu rehberde, GSM tabanlı projeler ve Arduino il…

Devamını Oku

Arduino ile SIM800L Kullanımı

Arduino ile SIM800L Kullanımı: IoT Projeleriniz İçin Adım Adım Rehber Bu blog yazısında, Arduino ile SIM800L modülünü kullanarak IoT proj…

Devamını Oku
Hızlı Kargo Hafta içi saat 15:00 öncesinde oluşturduğunuz tüm siparişler aynı gün kargoya verilmektedir.
Güvenli Alışveriş Tüm bilgileriniz 256 Bit SSL sertifikasıyla korunmaktadır.
Uzman Teknik Servis Ürünleriniz için profesyonel bakım ve onarım.
Ücretsiz Kargo Belirli tutarın üzerindeki alışverişlerinizde kargo ücreti ödemezsiniz.

Bültenimize Abone Ol

Kampanya ve fırsatlardan ilk siz haberdar olun.

Kuruköprü Mah. Sefa Özler Cad. özden İşmerkezi kat 7/74 Seyhan / adana

Ödeme Yöntemleri

Visa Mastercard Banka Kartı World

©2017 - 2026 Tüm hakları saklıdır.