Evde teknolojiyi konuşturmak isteyenler için yepyeni bir proje ile geldik! Daha önce “Sesli Asistan V2” projesiyle yapay zeka destekli sesli yanıt sistemi kurmuştuk. Bu yazımızda ise onu bir adım ileri taşıyarak fiziksel cihazları kontrol edebilen, yerel sunucu destekli bir akıllı ev sistemine dönüştüreceğiz.
Projemizde bir Raspberry Pi, bir NodeMCU ve bir sesli asistan bir araya geliyor. Örneğin: “Lambayı aç” diyorsunuz, evdeki masa lambası yanıyor. Tüm komutlar için internete bağlı olmanıza gerek yok, çünkü sistem tamamen yerel olarak çalışıyor!
Proje Görselleri
Projenin aşama aşama ilerleyişine ait bazı fotoğraflar:
- Yerleştirilen devre kartları
- Kablolama detayı
- 3D baskı montaj adımları
- Rölelerin çalışır hâli














Akıllı Ev Sistemi Ne Yapıyor?
Sistemin amacı, Raspberry Pi üzerine kurulu yerel bir sunucu üzerinden ESP8266 ile 4 röleyi kontrol etmek. Röleler sayesinde masa lambası, fan gibi yüksek voltajlı cihazları açıp kapatabiliyorsunuz. Aynı zamanda sesli asistan yazılımı sayesinde konuşarak cihazları tetikleyebiliyor ve akıllı ev sistemine “eller serbest” konforunu getiriyorsunuz.
Python ile geliştirilen sunucu, GPIO kontrolünün yanında Web arayüzü sunuyor. Aynı zamanda Arduino tarafında gelen NodeMCU devresi, sunucudan gelen HTTP isteklerine göre röleleri kontrol ediyor.
Akıllı Ev Sistemi Projesinde Neler Var?
- Raspberry Pi üzerinde çalışan Python tabanlı sesli asistan
- Yerel Flask sunucusu ile NodeMCU ESP8266 haberleşmesi
- 4 kanal röle kartı ile 220V cihazları kontrol etme
- 3D yazıcı ile tasarlanmış koruyucu kasalar
- Dokunmatik ekranlı şık masa üstü tasarım
Kullanılan Malzemeler
- 4 Kanal 5 V Röle Kartı
- Gepro UM-0255 5V 2A Adaptör
- Raspberry Pi 5 – 4GB
- Raspberry Pi 5 için 27W USB-C Güç Adaptörü
- SanDisk 64GB microSD Kart Class10 – 98MB/s
- Raspberry Pi USB Ses Kart Modülü (Mikrofon ve Kulaklık Girişi)
- WaveShare 4inch HDMI LCD, 800×480, IPS
- tinylab 3D 1.75 mm Turuncu PLA Filament
- NodeMCU V3 ESP8266 ESP-12E Geliştirme Kartı – CH340
Kodlarla Sistem Kontrolü
Raspberry Pi Üzerindeki Python Kodları
- asistan_yeni.py dosyası mikrofon ile sesi tanıyor,
- Gemini API ile komut işleniyor,
- Yerel Flask sunucusuna HTTP isteği gönderiliyor (“/komut/lamba_ac” gibi).
import speech_recognition as sr
import pyttsx3
import google.generativeai as genai
import os
import time
import requests
base_url = "http://"
os.environ["PYTHONWARNINGS"] = "ignore"
os.environ["ALSADEV"] = "hw:2,0"
r = sr.Recognizer()
engine = pyttsx3.init()
engine.setProperty('rate', 150)
genai.configure(api_key='')
model = genai.GenerativeModel('models/gemini-2.0-flash')
def dinle():
with sr.Microphone(device_index=0) as source:
r.adjust_for_ambient_noise(source)
ses = r.listen(source)
global sonuc
sonuc = r.recognize_google(ses, language="eng-US")
print(f"Siz: {sonuc}")
time.sleep(5)
def cevapla(cevap):
engine.say(cevap)
engine.runAndWait()
time.sleep(5)
chat = model.start_chat()
try:
while True:
try:
dinle()
if sonuc == "turn on the relay":
response = requests.get(f"{base_url}/relay2/on")
print("röle açıldı")
cevapla("okey sir")
elif sonuc == "turn off the relay":
response = requests.get(f"{base_url}/relay2/off")
print("röle kapatıldı")
cevapla("okey sir")
else:
response = chat.send_message(sonuc)
print(f"CEVAP: {response.text}")
cevapla(response.text)
except sr.UnknownValueError as hata:
print("Ses algılanamadı: ", hata)
except Exception as hata2:
print("Bir hata oluştu: ", hata2)
except KeyboardInterrupt:
print("\nProgram kapatılıyor...")
NodeMCU Üzerindeki Arduino Kodu
- NodeMCU_Server.ino dosyası gelen istekleri karşılıyor,
- GPIO pinleri ile röle modülü kontrol ediliyor,
- Örnek: /komut/lamba_ac isteğiyle masa lambası yanıyor.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "";
const char* password = "";
// Röle pin tanımları
#define RELAY1 0
#define RELAY2 2
#define RELAY3 4
#define RELAY4 5
ESP8266WebServer server(80); // Web sunucu portu: 80
void setup() {
Serial.begin(115200);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
digitalWrite(RELAY3, HIGH);
digitalWrite(RELAY4, HIGH);
// WiFi bağlantısı
WiFi.begin(ssid, password);
Serial.println("Wi-Fi ağına bağlanılıyor...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("Bağlandı! IP adresi: ");
Serial.println(WiFi.localIP());
// Ana sayfa
server.on("/", handleRoot);
// Röle kontrol URL'leri
server.on("/relay1/on", []() {
digitalWrite(RELAY1, LOW); // AÇ
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay1/off", []() {
digitalWrite(RELAY1, HIGH); // KAPAT
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay2/on", []() {
digitalWrite(RELAY2, LOW);
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay2/off", []() {
digitalWrite(RELAY2, HIGH);
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay3/on", []() {
digitalWrite(RELAY3, LOW);
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay3/off", []() {
digitalWrite(RELAY3, HIGH);
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay4/on", []() {
digitalWrite(RELAY4, LOW);
server.sendHeader("Location", "/");
server.send(303);
});
server.on("/relay4/off", []() {
digitalWrite(RELAY4, HIGH);
server.sendHeader("Location", "/");
server.send(303);
});
server.begin();
Serial.println("Web sunucu başlatıldı.");
}
void loop() {
server.handleClient();
}
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>4 Röle Kontrol</title><style>";
html += "body { font-family: Arial; text-align: center; padding-top: 50px; }";
html += "button { padding: 20px; font-size: 20px; margin: 10px; border: none; border-radius: 10px; cursor: pointer; }";
html += ".on { background-color: #4CAF50; color: white; }";
html += ".off { background-color: red; color: white; }";
html += "</style></head><body>";
html += "<h1>4 Röleli Kontrol Paneli</h1>";
html += "<h2>Röle 1</h2>";
html += "<a href='/relay1/on'><button class='on'>Aç</button></a>";
html += "<a href='/relay1/off'><button class='off'>Kapat</button></a>";
html += "<h2>Röle 2</h2>";
html += "<a href='/relay2/on'><button class='on'>Aç</button></a>";
html += "<a href='/relay2/off'><button class='off'>Kapat</button></a>";
html += "<h2>Röle 3</h2>";
html += "<a href='/relay3/on'><button class='on'>Aç</button></a>";
html += "<a href='/relay3/off'><button class='off'>Kapat</button></a>";
html += "<h2>Röle 4</h2>";
html += "<a href='/relay4/on'><button class='on'>Aç</button></a>";
html += "<a href='/relay4/off'><button class='off'>Kapat</button></a>";
html += "</body></html>";
server.send(200, "text/html", html);
}
Devre Şeması
ESP8266 ile röle kartı arasında doğrudan bağlantılar kullanıldı. Enerji için harici 5V adaptör desteği sunuldu. Aşağıda sistemin temel devre şeması yer alıyor:

3D Yazıcı ile Baskı
Hem Raspberry Pi ve ekranın, hem de NodeMCU + röle modülünün yer aldığı iki ayrı kasa tasarlandı. Bu kasalar havalandırma ızgaraları, bağlantı delikleri ve modüler montaj yapısıyla tasarımı tamamlıyor. Tasarımda hem işlevsellik hem estetik ön planda tutuldu.




Stl dosyalarını buradan indirebilirsiniz:
YouTube Videosunu Kaçırma!
Tüm kurulumu detaylarıyla adım adım görmek için YouTube videomuza mutlaka göz atın!
Sen de Yap!
Projemiz, sesli komutlarla kontrol edilen bir yerel sunucu altyapısı kurmak isteyen herkes için birebir. Öğrenciler, makerlar ve IoT geliştiricileri bu projeyle hem yazılım hem donanım alanında yeni beceriler kazanacak.
Hazırsanız, Raspberry Pi’nizi başlatın, PLA filamentlerinizi yükleyin ve akıllı evinizi kendiniz kurmaya başlayın!
Unutmayın! Teknolojiye yön verenler onu sadece kullananlar değildir. Kendisi yapanlardır!