AnasayfaElektronikArduinoESP-12E internet veri çekme

ESP-12E internet veri çekme

Bu yazımızda web sayfası (dolaylı olarak veritabanı) aracılığı ile ESP-12E modül kontrolünden bahsedeceğiz.

Evden uzaktasınız ve eve gitmeden birkaç saat önce kombiyi açmak veya klimayı çalıştırmak istiyorsunuz. Evden ayrıldıktan sonra alarmı kurduğunuzdan veya suyu kapayıp kapamadığınızdan emin olamıyorsanız veya bunların dışında bir cihazı uzaktan kontrol etmek istiyorsanız ESP-12E modül, birkaç devre elemanı ve bir web sitesi size yardımcı olabilir.

ESP-12E İnternet kontrol

Web sayfası ve veritabanı oluşturma

Aslında sistem şu şekilde çalışır: Modem ile internet bağlantısına erişen modül, belirlenen web sayfasını belirli aralıklarla kontrol eder ve sayfa içeriğine göre çıkış uçlarının konumunu değiştirir. Siz ise sayfa içeriğini değiştirerek modülü uzaktan kontrol etmiş olursunuz. Sayfadaki veriler bir veritabanından çekilirse kontrol işlemi daha da kolaylaşır.

Bunun için CPanel ile bir veritabanı ve kontrol için PHP uzantılı bir web sayfası oluşturmalısınız. Cpanel > MySQL Veritabanları bağlantısını açın ve Yeni Veritabanı Oluştur bölümüne bir ad girerek veritabanı oluşturma işlemini tamamlayın.

İkinci aşamada Yeni Kullanıcı ve Şifre belirlemelisiniz. Bu işlemi yine aynı sayfada bulunan Yeni Kullanıcı Ekle bölümünden yapabilirsiniz. Son olarak oluşturduğunuz kullanıcıyı veritabanına tanımlamak için Veritabanına Kullanıcı Ekle bölümünü kullanın. (Veritabanı adı, kullanıcı adı ve şifreyi bir yere not etmelisiniz PHP kontrol sayfasında bu kullanılacak!)

Veritabanı oluşturma işleminin ardından veritabanına bir tablo eklememiz gerekiyor. Cpanel > phpMyAdmin bağlantısını açın ve sol kısımdan oluşturduğunuz veritabanı adını seçin. Sağ üst kısımdan SQL bağlantısını açın.

CREATE TABLE `EspTablo` (
  `id` int(6) UNSIGNED NOT NULL,
  `value4` varchar(30) NOT NULL,
  `value1` varchar(10) DEFAULT NULL,
  `value2` varchar(10) DEFAULT NULL,
  `value3` varchar(10) DEFAULT NULL,
  `tarih` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `EspTablo` (`id`, `value4`, `value1`, `value2`, `value3`, `tarih`) VALUES
(1, 'LOW', 'LOW', 'LOW', 'LOW', '2021-02-28 18:49:27'),
(2, 'LOW', 'LOW', 'LOW', 'LOW', '2021-02-28 18:49:51');


ALTER TABLE `EspTablo`
ADD PRIMARY KEY (`id`);

ALTER TABLE `EspTablo`
  MODIFY `id` int(6) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

Yukarıdaki kodları metin alanına yapıştırın ve sağ alt kısımdaki Git butonuna tıklayın. Böylece EspTablo adında bir tablo oluşturmuş ve bu tabloya bir kaç veri girmiş olacağız.

Son olarak bir PHP sayfası oluşturacağız. Bu PHP sayfası ESP-12E modülün çıkış uçlarını belirlediği kontrol sayfası olacak. Oluşturduğumuz veritabanındaki tablo bilgileri bu PHP sayfası ile çekilecek. Bu sayfa için gerekli PHP kodları aşağıdadır. veritabanı_adı, kullanıcı_adı ve kullanıcı_şifre bölümlerini düzenleyerek veri_al_api.php şeklinde kaydetmeli ve Cpanel > Dosya Yöneticisi aracılığıyla home/…. /public_html dizinine atmalısınız.

<?php

$api_key_value = "tdTfGvSAb3j7F9"; 
$api_key=$_GET['api_key'];

if($api_key == $api_key_value) {

$server="localhost";
$username="kullanıcı_adi";
$password="kullanici_sifre";
$dbname="veritabanı_adi";
$kesme=":";

$con=mysqli_connect($server,$username,$password,$dbname) or die("unable to connect");
$sql="SELECT value1,value2,value3,value4 FROM EspTablo WHERE id = '1'";
$result=mysqli_query($con,$sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {    
      echo  $row["value1"];
      echo  $kesme;
      echo  $row["value2"];
      echo  $kesme;
      echo  $row["value3"];
      echo  $kesme;
      echo  $row["value4"];
}
}
}
else {
        echo "Yanlış API key";
        }

?>

Tarayıcınıza aşağıdaki URL’yi girdiğinizde “LOW:LOW:LOW:LOW” şeklinde bir sayfa içeriği ile karşılaşıyorsanız birinci aşama başarılı demektir.

http://siteadiniz.com/veri_al_api.php?api_key=tdTfGvSAb3j7F9

ESP-12E arduino kodları

Api key; yetkisiz kullanıcıların kontrol sayfasına erişimini engellemek için kullanılır. Api key, $api_key_value değişkenine farklı değer atayarak değiştirilebilir ancak aynı değişiklik ESP-12E arduino kodlarında da uygulanmalıdır.


#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>


const char* ssid     = "Wifi_SSD_adi";
const char* password = "Wifi_sifre";

int switch1 = 4; 
int switch2 = 5; 
int switch3 = 12; 
int switch4 = 13; 


const char* serverName = "http://siteadiniz.com/veri_al_api.php?api_key=tdTfGvSAb3j7F9";

void setup() {

  pinMode(switch1, OUTPUT);
  pinMode(switch2, OUTPUT);
  pinMode(switch3, OUTPUT);
  pinMode(switch4, OUTPUT);
  
  Serial.begin(115200);
  
  WiFi.begin(ssid, password);
  Serial.println("Bağlanıyor");
  while(WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("IP Adresi ile WiFi ağına bağlanıldı: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if(WiFi.status()== WL_CONNECTED){
    HTTPClient http;
    http.begin(serverName);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");


  int httpCode = http.GET(); 
  String gelenveri = http.getString();    
  
  String value1 = getValue(gelenveri, ':', 0);
  String value2 = getValue(gelenveri, ':', 1);
  String value3 = getValue(gelenveri, ':', 2);
  String value4 = getValue(gelenveri, ':', 3);

  if (value1 == "HIGH"){
  digitalWrite(switch1,HIGH);
  }
  else
  {
  digitalWrite(switch1,LOW);
  }

  if (value2 == "HIGH"){
  digitalWrite(switch2,HIGH);
  }
  else
  {
  digitalWrite(switch2,LOW);
  }

  if (value3 == "HIGH"){
  digitalWrite(switch3,HIGH);
  }
  else
  {
  digitalWrite(switch3,LOW);
  }

  if (value4 == "HIGH"){
  digitalWrite(switch4,HIGH);
  }
  else
  {
  digitalWrite(switch4,LOW);
  }

  Serial.println(httpCode);  
  Serial.println(gelenveri);
  
  http.end(); 
  delay(10000);  
}
}

String getValue(String data, char separator, int index)
{
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;

    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}

ESP-12E modül her 10 saniyede bir http://siteadiniz.com/veri_al_api.php sayfasını kontrol eder ve sayfadaki değişiklikleri çıkış uçlarına yansıtır. (Kontrol sıklığını delay(10000); satırını değiştirerek (milisaniye cinsinden) ayarlayabilirsiniz.

Veritabanındaki EspTablo üzerinde yapacağınız değişiklik (LOW veya HIGH) modül çıkış uçlarını değiştirir. Hangi çıkışların aktif olacağına LOW ve HIGH değeri vererek karar verebilirsiniz. Bu kontrol ESPTablo değerlerini LOW veya HIGH şeklinde değiştirecek bir PHP sayfası ile de sağlanabilir.

getValue fonksiyonu kontrol sayfasından alınan veriyi (:) işaretinin olduğu kısımlardan parçalara ayırır.

Örneğin kontrol sayfasından LOW:HIGH:HIGH:LOW şeklinde bir veri alındı ise value1 = LOW, value2 = HIGH, value3 = HIGH, value4 = LOW değerini alır. Dolayısıyla GPIO4 ve GPIO13 uçları LOW olduğundan pasif, GPIO5 ve GPIO12 uçları HIGH olduğundan aktif olur.

Erdoğan Demirtaş
Cumhuriyet Üniversitesi, Sivas Meslek Yüksekokulu, Endüstriyel Elektronik bölümü mezunudur. Endüstriyel kart/cihaz bakım onarım teknikeri olarak çalışmaktadır. Elektronik dışında az biraz wordpress, çat pat İngilizce bilmektedir.
İLGİLİ YAZILAR

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

SON EKLENENLER