1. Veritabanı + tablo oluşturma (phpMyAdmin / SQL)

A. phpMyAdmin ile (grafik arayüz)

  1. cPanel veya hosting kontrol paneline gir → phpMyAdmin aç.
  2. Sol üstten Yeni (New) diyerek yeni database oluştur:
    • İsim: temrinler_esp
    • Karakter seti: utf8mb4 (varsa)
  3. Solda temrinler_esp seçili iken üst menüden SQL sekmesine git. Aşağıdaki SQL komutlarını yapıştırıp çalıştır:
-- 1) tabloyu oluştur
CREATE TABLE IF NOT EXISTS `role_durum` (
  `id` INT NOT NULL PRIMARY KEY,
  `komut` TINYINT(1) NOT NULL DEFAULT 0,
  `tarih` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2) başlatıcı satırı ekle (id=1)
INSERT INTO `role_durum` (`id`, `komut`) VALUES (1, 0)
  ON DUPLICATE KEY UPDATE `komut` = VALUES(`komut`);

2. PHP Dosyaları (sunucuda)

🟢 komut_gonder.php

App Inventor bu sayfayı çağırır, kapıyı açma komutunu gönderir.

<?php
// temrinler.com/komut_gonder.php?key=sifre123
$servername = "localhost";
$username = "veritabani_kullanici_adi";
$password = "veritabani_sifresi";
$dbname = "temrinler_esp";
$API_KEY = "sifre123";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) { die("Baglanti hatasi: " . $conn->connect_error); }

if (isset($_GET['key']) && $_GET['key'] === $API_KEY) {
    $sql = "UPDATE role_durum SET komut=1, tarih=NOW() WHERE id=1";
    $conn->query($sql);
    echo "OK";
} else {
    echo "Yetkisiz erisim";
}
$conn->close();
?>

🔵 komut_cek.php

ESP32 düzenli olarak bu sayfayı çağırır, komut var mı diye kontrol eder.

<?php
// temrinler.com/komut_cek.php?key=sifre123
$servername = "localhost";
$username = "veritabani_kullanici_adi";
$password = "veritabani_sifresi";
$dbname = "temrinler_esp";
$API_KEY = "sifre123";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) { die("Baglanti hatasi: " . $conn->connect_error); }

if (isset($_GET['key']) && $_GET['key'] === $API_KEY) {
    $result = $conn->query("SELECT komut FROM role_durum WHERE id=1");
    $row = $result->fetch_assoc();
    echo $row['komut'];
    // komut işlendiğinde sıfırlanacak
    if ($row['komut'] == 1) {
        $conn->query("UPDATE role_durum SET komut=0, tarih=NOW() WHERE id=1");
    }
} else {
    echo "Yetkisiz erisim";
}
$conn->close();
?>

Bu dosya, komutu 1 defaya mahsus verir ve hemen sıfırlar.
Yani ESP32 her 3–5 saniyede bir kontrol ettiğinde,
“1” komutu sadece bir kez görülür, sonra tekrar 0 olur.


🔹 3. ESP32 KODU (1 saniye HIGH tetikleme)

#include <WiFi.h> // v1.2.7
#include <HTTPClient.h> // dahili

const char* ssid = "WiFi_Adi";
const char* password = "WiFi_Sifresi";

String anahtar = "sifre123"; // PHP ile aynı olmalı
String urlKomut = "http://www.temrinler.com/komut_cek.php?key=" + anahtar;

int kilitPin = 2; // kapı kilidi röle pini

void setup() {
  Serial.begin(115200);
  pinMode(kilitPin, OUTPUT);
  digitalWrite(kilitPin, LOW);

  WiFi.begin(ssid, password);
  Serial.print("WiFi baglantisi yapiliyor");
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("\nWiFi baglandi!");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(urlKomut);
    int kod = http.GET();
    if (kod == 200) {
      String yanit = http.getString();
      yanit.trim();
      Serial.println("Sunucudan gelen komut: " + yanit);
      if (yanit == "1") {
        digitalWrite(kilitPin, HIGH);
        delay(1000); // 1 saniye HIGH
        digitalWrite(kilitPin, LOW);
        Serial.println("Kapi acma sinyali gonderildi.");
      }
    }
    http.end();
  }
  delay(3000); // 3 sn'de bir kontrol et
}

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler