SmartIoT, ESP32, Spring Boot, React ve PostgreSQL kullanarak geliştirilmiş, kullanıcıya özel akıllı cihaz kontrol sistemidir.
Sistem, MQTT protokolü üzerinden çift yönlü haberleşme sağlar. Kullanıcılar cihazlarını ekleyebilir, odalara göre organize edebilir ve uzaktan kontrol edebilir.
- Özellikler
- Klasör Yapısı
- API Dokümantasyonu
- Hızlı Başlangıç
- Konfigürasyon
- Sistem Mimarisi
- MQTT Topic Listesi
- Gereksinimler
- Lisans
- Kullanıcı Girişi (JWT planlanıyor): Her kullanıcı kendi cihazlarını yönetir.
- Oda & Cihaz Organizasyonu: Oda, cihaz türü ve özel isim ile listeleme/filtreleme.
- MQTT ile Gerçek Zamanlı Haberleşme
- Backend → ESP32 (komut gönderme)
- ESP32 → Backend (sensör verisi & durum)
- Soft Delete: Cihaz silindiğinde veritabanında
active=falseolarak işaretlenir. - Modüler Mimari: Backend, frontend ve donanım kodları bağımsız çalışabilir.
Aşağıdaki yapı, depodaki gerçek klasör isimleri ile güncellenmiştir.
SmartIoT/
├── Backend/ # Spring Boot backend
│ └── src/main/resources/
│ ├── application-example.properties # Örnek backend ayar şablonu (güvenli)
│ └── application.properties (gitignored) # Gerçek ayarlar (repoda tutulmaz)
├── Frontend/ # React frontend
├── ESP32/ # Arduino (ESP32) kodları
│ └── esp32_config.h # ESP32 ayar şablonu
├── Database/ # PostgreSQL şema/yedek
├── Mqtt/ # Mosquitto MQTT config
│ ├── mosquitto.conf
│ └── data/.gitkeep
├── Docs/ # Dokümantasyonlar
│ └── Web_Service_Documentation.pdf # Web Servis dökümanı (PDF)
├── .env.example # Frontend için ortam değişken örneği
├── .gitignore
└── README.md
-
Swagger UI (canlı test):
http://localhost:8080/swagger-ui.html
(Ayrıca:http://localhost:8080/swagger-ui/index.html#/) -
OpenAPI JSON:
http://localhost:8080/v3/api-docs -
Web Servis Dokümanı (PDF):
Docs/Web_Service_Documentation.pdfPDF; base URL, örnek istek/yanıtlar, tipik akış ve hata kodlarıyla insan-okur kılavuzdur. Swagger ise teknik şema + “Try it out” ile canlı deneme sunar.
Not: Swagger için projeye
springdoc-openapi-starter-webmvc-uibağımlılığı eklenmiştir ve controller’lara@Tag,@Operation,@ApiResponse,@Schemaaçıklamaları işlenmiştir.
mosquitto -c Mqtt/mosquitto.conf
# varsayılan port: 1883cd Backend
# Java 17+ & Maven 3.8+
mvn spring-boot:run
application.propertiesiçindeki veritabanı ve MQTT ayarlarının doğru olduğundan emin olun.
MQTT broker varsayılanı örneklerdetcp://localhost:1883olacak şekilde düzenlenmiştir.
cd Frontend
npm install
npm start
.enviçinde gerekliREACT_APP_...değişkenlerini tanımlayın.
ESP32/altındaki kodları Arduino IDE ile açın.esp32_config.hdosyasını kendi Wi-Fi/MQTT bilgilerinize göre düzenleyin.- ESP32’ye yükleyin.
Backend/src/main/resources/application-example.properties
# Uygulama
spring.application.name=smartiot
server.port=8080
# PostgreSQL (ENV ile override edilebilir)
spring.datasource.url=${DB_URL:jdbc:postgresql://localhost:5432/postgres}
spring.datasource.username=${DB_USERNAME:postgres}
spring.datasource.password=${DB_PASSWORD}
# JPA
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
# MQTT
mqtt.broker=${MQTT_BROKER:tcp://127.0.0.1:1883}
mqtt.clientId.publisher=${MQTT_CLIENT_PUB:SpringBootPublisher}
mqtt.clientId.subscriber=${MQTT_CLIENT_SUB:SpringBootSubscriber}
mqtt.topic.led=${MQTT_TOPIC_LED:led/control}
mqtt.topic.buzzer=${MQTT_TOPIC_BUZZER:buzzer/control}
mqtt.topic.servo=${MQTT_TOPIC_SERVO:servo/control}
mqtt.topic.rfid=${MQTT_TOPIC_RFID:rfid/uid}
mqtt.topic.dht=${MQTT_TOPIC_DHT:dht/data}
mqtt.topic.status=${MQTT_TOPIC_STATUS:status/device}
# Swagger / OpenAPI
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.api-docs.path=/v3/api-docs
springdoc.packages-to-scan=com.example.smartiot.controller
springdoc.default-produces-media-type=application/json
springdoc.default-consumes-media-type=application/jsonBackend/src/main/resources/application.properties
.gitignore ile hariç tutulmalıdır.
DB/MQTT şifreleri ve IP’leri bu dosyada veya ENV değişkenleri üzerinden verilmelidir.
.gitignore içine şu satırın eklendiğinden emin olun:
Backend/src/main/resources/application.properties
Daha önce repoya gerçek
application.propertiesişlendi ise:git rm --cached Backend/src/main/resources/application.properties git commit -m "chore: remove secrets from repo"
-
Frontend (React)
Kullanıcıdan gelen komutları Backend’e HTTP ile yollar, sonuçları gösterir. -
Backend (Spring Boot)
Kimlik doğrulama (JWT planlı), MQTT üzerinden cihazlara komut gönderme, sensör verilerini işleme ve veritabanına kaydetme. -
ESP32 (Arduino)
MQTT broker’a bağlanır, belirli topic’leri dinler (led/control,buzzer/control,servo/control), sensör verilerini yayınlar (dht/data,status/device,rfid/uid). -
PostgreSQL
Kullanıcı, cihaz, oda ve sensör verilerini saklar. -
MQTT Broker (Mosquitto)
Backend ile ESP32 arasındaki mesaj akışını yönetir.
| Topic | Yön | Açıklama |
|---|---|---|
led/control |
Backend → ESP32 | LED aç/kapat komutu |
buzzer/control |
Backend → ESP32 | Buzzer çalıştırma komutu |
servo/control |
Backend → ESP32 | Servo motor pozisyon kontrolü |
rfid/uid |
ESP32 → Backend | RFID kart UID |
dht/data |
ESP32 → Backend | Sıcaklık/Nem sensör verileri |
status/device |
ESP32 → Backend | Cihaz çevrimiçi/durum bilgisi |
- Bir endpoint’i aç → Try it out → alanları doldur → Execute.
- Alt bölümde: curl, Request URL, Response detaylarını görürsün.
- Controller’lar
@Tag,@Operation,@ApiResponse, modeller@Schemaile açıklanmıştır. - Gelişmiş (opsiyonel): JWT eklenirse Swagger’a “Authorize” butonu için
bearerAuthşeması tanımlanabilir.
- Java 17+
- Maven 3.8+
- Node.js 18+
- PostgreSQL 15+
- Mosquitto MQTT Broker
- Arduino IDE + ESP32 Board Manager
- Bu README, Swagger dokümantasyonu ve indirilebilir Web Servis PDF’i ile uyumludur.
- Postman kullanacaksanız: OpenAPI JSON’u (
/v3/api-docs) Postman’e Import ederek koleksiyon oluşturabilirsiniz.
Bu proje MIT lisansı ile lisanslanmıştır.