Kısa cevap: ESP32 kartına küçük bir OLED ekran bağlayıp Klipper çalıştıran 3D yazıcınızın Moonraker API adresine WiFi üzerinden istek atarsanız, baskı yüzdesi, nozzle ve tabla sıcaklığı ile kalan süreyi ayrı bir ekranda canlı olarak gösterebilirsiniz. Bilgisayarı açmadan, telefonu elinize almadan yazıcının yanında duran mini bir gösterge elde edersiniz.
Neden Harici Bir Baskı Ekranı?
Klipper ekosisteminde baskı takibi genelde Mainsail veya Fluidd arayüzü üzerinden yapılır. Bu arayüzler harika ama her seferinde bir cihaz açıp tarayıcıya girmek gerekir. Uzun baskılarda yazıcının yanından geçerken tek bakışta yüzde kaçta olduğunu görmek istiyorsanız, masaüstünde duran küçük bir ekran çok daha pratiktir.
Ben bunu kendi FLSUN T1 Pro delta yazıcım için yaptım. Amaç basitti: yazıcının yanına koyacağım, prize takılı, sürekli açık, tek bakışta durumu gösteren bir cihaz. ESP32 bu iş için ideal çünkü hem WiFi hem yeterli işlem gücü hem de OLED sürmek için gereken I2C desteği tek kartta geliyor.
Gerekli Malzemeler
- ESP32 geliştirme kartı (WROOM-32 yeterli)
- 0.96 inç veya 1.3 inç I2C OLED ekran (SSD1306 ya da SH1106 sürücülü)
- 4 adet jumper kablo
- Micro USB kablo ve besleme
- Klipper ve Moonraker çalışan bir 3D yazıcı
- Aynı ağa bağlı WiFi
Moonraker API Nedir ve Nasıl Çalışır?
Moonraker, Klipper için bir API katmanıdır. Yazıcıyı çalıştıran Raspberry Pi ya da benzeri kart üzerinde bir web sunucusu açar ve baskı verilerini JSON formatında dışarı sunar. Yani ESP32 sadece doğru adrese HTTP isteği atar, karşılığında düzenli bir veri paketi alır.
İhtiyacımız olan uç nokta baskı ilerlemesini ve sıcaklıkları veren sorgudur. Tipik olarak şu adrese istek atılır:
http://YAZICI_IP:7125/printer/objects/query?display_status&extruder&heater_bed&print_stats
Bu istek geriye baskı yüzdesini, ekstruder sıcaklığını, tabla sıcaklığını ve baskı durumunu içeren bir JSON döndürür. ESP32 tarafında bu JSON ayrıştırılıp OLED ekrana basılır.
Bağlantı Şeması
OLED ekran I2C ile bağlanır, yani sadece dört kablo yeterlidir:
| OLED Pini | ESP32 Pini |
|---|---|
| VCC | 3V3 |
| GND | GND |
| SDA | GPIO 21 |
| SCL | GPIO 22 |
GPIO 21 ve 22 ESP32 üzerindeki varsayılan I2C pinleridir, ekstra ayar gerekmez.
Arduino IDE Kütüphaneleri
Kod tarafında üç kütüphane işi görür. Arduino IDE üzerinden Kütüphane Yöneticisinden şunları kurun:
- Adafruit SSD1306 (ekran sürücüsü)
- Adafruit GFX (grafik altyapısı)
- ArduinoJson (JSON ayrıştırma)
WiFi ve HTTPClient kütüphaneleri ESP32 kart paketiyle birlikte hazır gelir, ayrıca kurmanıza gerek yok.
Örnek Kod Mantığı
Kodun akışı şu şekildedir: ESP32 açılışta WiFi ağına bağlanır, ardından belirli aralıklarla (örneğin 3 saniyede bir) Moonraker adresine HTTP GET isteği atar. Gelen JSON ArduinoJson ile ayrıştırılır, baskı yüzdesi ve sıcaklıklar değişkenlere alınır ve OLED ekrana yazdırılır.
void loopGuncelle() {
HTTPClient http;
String url = "http://192.168.1.50:7125/printer/objects/query?display_status&extruder&heater_bed";
http.begin(url);
int kod = http.GET();
if (kod == 200) {
String payload = http.getString();
StaticJsonDocument<1024> doc;
deserializeJson(doc, payload);
float yuzde = doc["result"]["status"]["display_status"]["progress"];
float nozzle = doc["result"]["status"]["extruder"]["temperature"];
float tabla = doc["result"]["status"]["heater_bed"]["temperature"];
ekranaBas(yuzde * 100, nozzle, tabla);
}
http.end();
}
Burada dikkat edilecek nokta, JSON belge boyutunu (StaticJsonDocument boyutu) yeterli tutmaktır. Fazla nesne sorgularsanız gelen veri büyür ve ayrıştırma başarısız olur. Sadece ihtiyacınız olan alanları sorgulayın.
Ekran Tasarımı İpuçları
0.96 inç ekran küçük olduğu için her şeyi sığdırmaya çalışmayın. En üste büyük punto ile baskı yüzdesini, altına iki satır halinde nozzle ve tabla sıcaklığını koymak yeterli okunaklıdır. İsterseniz alt kısma basit bir ilerleme çubuğu çizdirebilirsiniz, Adafruit GFX ile dikdörtgen çizmek tek satırdır.
Saha Notu: FLSUN T1 Pro Deneyimim
Bu projeyi kendi delta yazıcım üzerinde denerken birkaç pratik detay çıktı. İlki, yazıcının IP adresi DHCP ile değişirse ESP32 veri çekemez hale geliyor. Bu yüzden yazıcıya router üzerinden sabit IP tanımladım, sorun bir daha yaşanmadı.
İkincisi, baskı bittiğinde progress değeri bir süre 1.0 olarak kalıyor. Ekranda "tamamlandı" mantığı kurmak istiyorsanız print_stats içindeki durum bilgisini de sorgulayıp baskının gerçekten bitip bitmediğini kontrol etmeniz gerekiyor, sadece yüzdeye güvenmeyin.
Üçüncüsü, ESP32 ısınabiliyor. Sürekli açık kalacaksa havalandırması olan küçük bir kutu bastırmanızı öneririm, zaten yanında 3D yazıcı var, kutuyu da kendiniz basarsınız.
Sonraki Adımlar
Temel sistem çalıştıktan sonra geliştirilebilecek çok yön var. Klipper G-code makrolarına dokunarak katman bilgisi ekleyebilir, OrcaSlicer üzerinden G-code enjeksiyonu ile aktif katman sayısını da ekrana taşıyabilirsiniz. Ayrıca birden fazla yazıcınız varsa ESP32 üzerine bir buton ekleyip ekranlar arası geçiş yapmanız mümkün.
Sıkça Sorulan Sorular
Moonraker olmadan sadece Marlin yazıcıda çalışır mı?
Hayır, bu yöntem Klipper ve Moonraker API üzerine kuruludur. Marlin tabanlı yazıcılarda seri port ya da farklı bir yöntem gerekir.
ESP32 yerine ESP8266 kullanabilir miyim?
Kullanabilirsiniz ama ESP8266 hafızası dar olduğu için JSON ayrıştırmada zorlanabilir. Sorgunuzu iyice sadeleştirmeniz gerekir. ESP32 çok daha rahat çalışır.
Ekranda sıcaklık gecikmeli görünüyor, neden?
Güncelleme aralığınızı çok uzun tutmuş olabilirsiniz. 2 ila 3 saniye arası ideal. Çok kısa tutarsanız da yazıcının API sunucusunu gereksiz yorarsınız.
Yazıcı ve ESP32 farklı ağlarda olabilir mi?
Olmamalı. İkisinin de aynı yerel ağda olması gerekir, aksi halde ESP32 yazıcının IP adresine ulaşamaz.
Kablosuz yerine kablolu bağlantı yapabilir miyim?
ESP32 üzerinde Ethernet varyantları var ama gereksiz karmaşık olur. WiFi bu iş için fazlasıyla yeterli ve kararlıdır.
💬 Yorumlar (0)
İlk yorumu siz yapın!
💬 Yorum Yap