Sıfırdan Kod Satırına

Sıfırdan Bir IoT Projesine Yolculuk: Donanım ve Yazılımın Dansı

Herkese merhaba arkadaşlar, "Sıfırdan Kod Satırına"nın tozlu raflarından hepinize selamlar.

Bu blog, benim için sadece kod satırlarından ibaret değil; aynı zamanda bir direnç üzerinden akan akımın, bir transistörün açılıp kapanmasının yarattığı o somut gerçeğin dijital bir izdüşümüdür. Son zamanlarda üzerinde çalıştığım ve bu yazıyı da onun üzerinden kuracağım bir projeyi anlatmak istiyorum: Basit bir ortam izleme istasyonu kurarak onu ağ üzerinden erişilebilir kılmak. Bu, benim için her zaman en tatmin edici kısım oluyor; çünkü teorik olanın fiziksel bir varlığa dönüşmesini izlemek inanılmaz bir his.

Proje Tanımı ve Bileşen Seçimi

Amacımız belliydi: Bir mikrodenetleyici kullanarak sıcaklık ve nem verisini ölçmek, bu veriyi Wi-Fi üzerinden bir sunucuya (ve dolayısıyla internete) göndermek ve bunu görselleştirmek. Basit gibi görünse de, bu basitliğin altında yatan katmanları incelemek gerçekten keyif veriyor.

Donanım tarafında karar verme aşaması kritiktir. Bu projede ESP32 modülünü tercih ettim. Neden mi? Çünkü ESP32, hem işlem gücü sunduğu hem de entegre Wi-Fi ve Bluetooth özellikleriyle gömülü projeler için muazzam bir esneklik sağlıyor. Bir Arduino Uno ile bunu yapabilirdim ama ESP32, aynı zamanda küçük bir bilgisayarın tüm görevlerini üstlenebilecek kapasitede.

Sensör olarak DHT11/DHT22 serisini kullandık. Bu sensörler, sıcaklık ve bağıl nem gibi temel fiziksel parametreleri analog veya dijital sinyale dönüştürme görevini üstleniyor. Devre kartına entegrasyon aşaması ise ince detay gerektiriyordu; potansiyel gürültü alımını engellemek için uygun pull-up/pull-down dirençlerini doğru değerlerle seçmek zorunda kaldım. Bu tür küçük fiziksel detaylar, yazılım katmanındaki en iyi algoritmanın bile başarısız olmasına neden olabilir.

Yazılım Mimarisi: Boot'tan Veri Gönderimine

Donanım hazırlandıktan sonra sıra yazılıma geldi. Benim için bu, donanım sürücülerinin (driver) ve uygulamanın üst katmanının kesiştiği en heyecanlı nokta. Yazılım mimarisini üç ana katmana ayırdım:

  1. Donanım Soyutlama Katmanı (HAL): Bu katman, mikrodenetleyicinin donanıma özel komutlarını içerir. Örneğin, "Sıcaklık oku" dediğimizde, bu katman spesifik olarak DHT sensörüne doğru zamanlamada dijital istek gönderir ve gelen ham veriyi alır. Buradaki başarı, donanım ile yazılım arasındaki "diyaloğun" kusursuz olmasındadır.
  2. İş Mantığı Katmanı (Business Logic): Aldığımız ham okumaları işleriz. DHT'nin verdiği sayısal değerleri, gerçek dünya birimlerine (örneğin, 25.4°C) dönüştürme, veriyi paketleme (örneğin JSON formatına sokma) ve eğer hata varsa bunu kaydetme görevi buradadır.
  3. İletişim Katmanı (Network Stack): Bu, bizim bulutla konuşma kısmımızdır. ESP32'nin Wi-Fi bağlantısını kurup, üretilen JSON paketini belirlenen bir HTTP POST isteğiyle uzaktaki sunucumuza göndermesini sağlayan kısımdır.

Bu üç katman birbirinden bağımsız çalıştığında, eğer örneğin yeni bir sensöre geçmek istersem (örneğin basınç sensörü eklemek), sadece HAL katmanını ve belki bir miktar İş Mantığı katmanını değiştiririm; tüm ağ bağlantı kodumu ellememe gerek kalmaz. Bu modülerlik, yazılımın ölçeklenebilirliğini sağlar.

Bu yolculuk gösteriyor ki, donanım bir fikrin bedeni ise, yazılım o bedene ruhu veren sinir sistemi oluyor. Bir sonraki geliştirmede bu veriyi görselleştirmek için bir web arayüzü ekleyerek projeyi tamamlayacağız. Gözünüz arkada kalmasın, devamı gelecek!