IoT & Gömülü Sistemler

Raspberry Pi Pico W ile Kablosuz Sensör İstasyonu

Fatih Algül
13.03.2026 224 görüntülenme

Giriş ve Proje Genel Bakışı

Raspberry Pi Pico W, RP2040 mikroişlemcisi ve dahili CYW43439 kablosuz çipi sayesinde IoT projelerinde güçlü ve uygun maliyetli bir çözüm sunar. Bu yazıda, Pico W kullanarak sıcaklık, nem ve basınç verilerini kablosuz olarak toplayan, bir web arayüzü üzerinden görüntüleyen ve opsiyonel olarak bulut platformlarına aktaran tam donanımlı bir sensör istasyonu kuracağız.

Gerekli Malzemeler

  • Raspberry Pi Pico W — Dahili Wi-Fi destekli mikrodenetleyici
  • BME280 sensör modülü — Sıcaklık, nem ve barometrik basınç ölçümü (I2C)
  • Breadboard ve jumper kablolar
  • Micro-USB kablo — Güç beslemesi ve programlama için
  • Opsiyonel: 0.96" OLED ekran (SSD1306, I2C), harici anten, LiPo pil + şarj modülü

Donanım Bağlantıları

BME280 sensörünü Pico W'ye I2C protokolü üzerinden bağlayacağız. Bağlantı şeması aşağıdaki gibidir:

  • BME280 VIN → Pico W 3V3 (Pin 36)
  • BME280 GND → Pico W GND (Pin 38)
  • BME280 SDA → Pico W GP4 (Pin 6) — I2C0 SDA
  • BME280 SCL → Pico W GP5 (Pin 7) — I2C0 SCL

I2C hatlarında harici pull-up dirençlerine genellikle gerek yoktur; çoğu BME280 breakout kartında bu dirençler zaten mevcuttur. Yine de iletişim sorunları yaşarsanız SDA ve SCL hatlarına 4.7kΩ pull-up direnci eklemeyi deneyin.

MicroPython Ortamının Kurulumu

Pico W üzerinde MicroPython çalıştırmak için şu adımları izleyin:

  1. Raspberry Pi resmi sitesinden en güncel MicroPython UF2 dosyasını indirin (Pico W sürümünü seçtiğinizden emin olun).
  2. Pico W üzerindeki BOOTSEL düğmesine basılı tutarak USB kablosunu bağlayın. Cihaz bir USB sürücü olarak görünecektir.
  3. UF2 dosyasını bu sürücüye sürükleyip bırakın. Cihaz otomatik olarak yeniden başlayacaktır.
  4. Geliştirme ortamı olarak Thonny IDE kullanmanızı öneriyorum. Interpreter ayarını "MicroPython (Raspberry Pi Pico)" olarak seçin.

BME280 Kütüphanesinin Yüklenmesi

BME280 sensörü için bir MicroPython sürücüsüne ihtiyacımız var. Aşağıdaki basitleştirilmiş sürücüyü bme280.py adıyla Pico W'ye kaydedin veya Thonny'nin paket yöneticisinden micropython-bme280 paketini yükleyin.

Wi-Fi Bağlantısı

Öncelikle Pico W'yi kablosuz ağa bağlayalım:

import network
import time

def wifi_baglan(ssid, sifre, zaman_asimi=15):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    
    if wlan.isconnected():
        print("Zaten bağlı:", wlan.ifconfig())
        return wlan
    
    print(f"'{ssid}' ağına bağlanılıyor...")
    wlan.connect(ssid, sifre)
    
    baslangic = time.time()
    while not wlan.isconnected():
        if time.time() - baslangic > zaman_asimi:
            raise RuntimeError("Wi-Fi bağlantı zaman aşımı!")
        time.sleep(0.5)
    
    print("Bağlantı başarılı!")
    print("IP Adresi:", wlan.ifconfig()[0])
    return wlan

Sensör Verilerini Okuma

BME280 sensöründen veri okumak için I2C arayüzünü yapılandıralım:

from machine import Pin, I2C
import bme280

i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)

# I2C adresini doğrulayın (BME280 genellikle 0x76 veya 0x77)
adresler = i2c.scan()
print("Bulunan I2C cihazları:", [hex(a) for a in adresler])

bme = bme280.BME280(i2c=i2c)

def sensor_oku():
    sicaklik, basinc, nem = bme.values
    return {
        "sicaklik": sicaklik,
        "basinc": basinc,
        "nem": nem
    }

# Test okuması
veri = sensor_oku()
print(f"Sıcaklık: {veri['sicaklik']}")
print(f"Basınç: {veri['basinc']}")
print(f"Nem: {veri['nem']}")

Web Sunucusu ile Canlı İzleme

Pico W üzerinde hafif bir HTTP sunucusu çalıştırarak sensör verilerini tarayıcıdan görüntüleyebiliriz. Bu yaklaşım herhangi bir harici servise ihtiyaç duymadan yerel ağda çalışır:

import socket
import json

def html_sayfa(veri):
    return f"""


    
    
    Hava İstasyonu
    


    
{veri['sicaklik']}
Sıcaklık
{veri['nem']}
Nem
{veri['basinc']}
Basınç
""" def api_yaniti(veri): return json.dumps(veri) def sunucu_baslat(): addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(addr) s.listen(5) print("Sunucu dinleniyor:", addr) while True: cl, addr = s.accept() try: istek = cl.recv(1024).decode() veri = sensor_oku() if "GET /api" in istek: yanit = api_yaniti(veri) cl.send("HTTP/1.0 200 OK\r\n") cl.send("Content-Type: application/json\r\n\r\n") cl.send(yanit) else: yanit = html_sayfa(veri) cl.send("HTTP/1.0 200 OK\r\n") cl.send("Content-Type: text/html; charset=utf-8\r\n\r\n") cl.send(yanit) except Exception as e: print("Hata:", e) finally: cl.close()

Ana Program: Her Şeyi Birleştirme

Tüm bileşenleri bir araya getiren main.py dosyası:

# main.py
WIFI_SSID = "AgAdiniz"
WIFI_SIFRE = "Sifreniz"

wlan = wifi_baglan(WIFI_SSID, WIFI_SIFRE)
sunucu_baslat()

Cihaz başladığında Wi-Fi'ye bağlanacak ve konsola yazdırılan IP adresini tarayıcınıza girerek sensör verilerini görebileceksiniz. /api yoluna istek göndererek JSON formatında veri de alabilirsiniz; bu, verileri başka uygulamalarla entegre etmek için idealdir.

Veri Kaydetme ve Bulut Entegrasyonu

Sensör verilerini zaman serisi olarak kaydetmek isteyebilirsiniz. İki farklı yaklaşım önerebilirim:

Yerel Kayıt (SD Kart veya Dahili Flash)

Pico W'nin dahili dosya sistemine CSV formatında veri yazabilirsiniz:

import time

def veri_kaydet(dosya_adi="veriler.csv"):
    veri = sensor_oku()
    zaman_damgasi = time.time()
    with open(dosya_adi, "a") as f:
        f.write(f"{zaman_damgasi},{veri['sicaklik']},"
                f"{veri['nem']},{veri['basinc']}\n")

MQTT ile Bulut Aktarımı

Daha gelişmiş bir kurulum için MQTT protokolü kullanarak verileri bir broker'a (örneğin Mosquitto) ve oradan Grafana, InfluxDB veya Home Assistant gibi platformlara aktarabilirsiniz. umqtt.simple kütüphanesini kullanarak bağlantı kurulabilir:

from umqtt.simple import MQTTClient

def mqtt_gonder(sunucu, konu, mesaj):
    client = MQTTClient("pico_istasyon", sunucu)
    client.connect()
    client.publish(konu, mesaj)
    client.disconnect()

# Kullanım
veri = sensor_oku()
mqtt_gonder("192.168.1.100", "ev/hava/sicaklik",
            veri["sicaklik"])

Güç Yönetimi ve Pil ile Çalışma

Sensör istasyonunu pil ile çalıştırmak istiyorsanız güç tüketimini minimize etmek kritik önem taşır. Pico W'nin deepsleep modunu kullanarak ölçümler arasında cihazı uyku moduna alabilirsiniz:

import machine

# 5 dakikada bir ölçüm al
OLCUM_ARALIGI_MS = 5 * 60 * 1000

def olcum_dongusu():
    wlan = wifi_baglan(WIFI_SSID, WIFI_SIFRE)
    veri = sensor_oku()
    veri_kaydet()
    # veya mqtt_gonder(...)
    wlan.active(False)
    machine.deepsleep(OLCUM_ARALIGI_MS)

olcum_dongusu()

Bu yöntemle cihaz yalnızca ölçüm anında uyanır, veriyi okur ve gönderir, ardından tekrar uyku moduna geçer. Tipik bir 18650 Li-Ion pil ile haftalarca kesintisiz çalışma mümkündür.

Sorun Giderme ve İpuçları

  • I2C cihaz bulunamıyor: Kablo bağlantılarını kontrol edin. i2c.scan() boş dönüyorsa SDA/SCL pinlerini ve güç bağlantısını doğrulayın.
  • Wi-Fi bağlantı sorunu: Pico W yalnızca 2.4 GHz ağları destekler. 5 GHz ağlara bağlanamaz. Ayrıca SSID ve şifrede Türkçe karakter kullanmaktan kaçının.
  • Bellek yetersizliği: MicroPython'da RAM sınırlıdır. HTML sayfalarını mümkün olduğunca küçük tutun ve gc.collect() çağrılarını düzenli olarak yapın.
  • Sensör doğruluğu: BME280'in ilk birkaç okuması hatalı olabilir. Cihaz başladıktan sonra ilk 2-3 okumayı atlayarak daha güvenilir sonuçlar elde edebilirsiniz.
  • Web sunucusu yanıt vermiyor: Eş zamanlı bağlantı sayısını sınırlayın ve her bağlantıyı try/finally bloğu ile kapatın; aksi halde soket sızıntısı oluşur.

Sonuç ve Geliştirme Fikirleri

Bu projede Raspberry Pi Pico W ile tam işlevsel bir kablosuz sensör istasyonu kurduk: donanım bağlantılarından sensör okumaya, web arayüzünden bulut entegrasyonuna kadar her adımı ele aldık. Projeyi daha da geliştirmek için şu fikirleri değerlendirebilirsiniz:

  • Birden fazla sensör düğümü kurarak mesh sensör ağı oluşturma
  • Grafana + InfluxDB ile geçmiş verileri görselleştirme
  • Belirli eşik değerlerde Telegram veya e-posta bildirimi gönderme
  • Home Assistant entegrasyonu ile akıllı ev senaryoları oluşturma
  • UV indeksi, toprak nemi veya hava kalitesi sensörleri ekleyerek kapsamı genişletme

Raspberry Pi Pico W'nin düşük maliyeti ve geniş ekosistemi, onu hobi projelerinden ciddi IoT uygulamalarına kadar pek çok alanda mükemmel bir tercih haline getiriyor. İyi denemeler!

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç