Tüm Dökümanlar
Toplam 5 teknik döküman listeleniyor.
Genel
Genel
Nissan Kapagi Nasil Basilir
Nisaan kapagi basmak istemeniz gayet dogal bu süreci sizlerle degerlendirelim
Genel
Kisi sayim sistemleri pcb tasarimi
Genel konseptimiz neye odaklaniyor merak edebilirsinizprint("bu bir deneme yazisidir")
Genel
ESP32 ve FreeRTOS ile Kesintisiz MQTT Iletisimi
ESP32 ve FreeRTOS ile Kesintisiz MQTT Iletisimi: Asenkron IoT MimarisiNesnelerin Interneti (IoT) projelerinde en sik karsilasilan darbogazlardan biri, mikrodenetleyicinin Wi-Fi baglantisi ve MQTT mesajlarini beklerken ana döngüyü (main loop) bloklamasidir. Özellikle sensör verilerinin (örnegin ortam nemi veya LiDAR ile obje takibi) gerçek zamanli olarak okunup islendigi senaryolarda, delay() fonksiyonlari veya senkron bekleme süreleri tüm sistemin tepki süresini öldürür.Iste tam bu noktada ESP32'nin çift çekirdekli yapisi ve yerlesik FreeRTOS yetenekleri devreye giriyor. Bu yazida, sensör okuma ve MQTT yayinlama (publish) islemlerini birbirinden izole edilmis görevlere (Task) bölerek nasil asenkron bir mimari kuracagimizi inceleyecegiz.Neden FreeRTOS Task'lari Kullanmaliyiz?Standart Arduino loop() döngüsü tek bir thread üzerinde çalisir. Eger MQTT sunucusuna baglanmak 2 saniye sürerse, o 2 saniye boyunca ESP32 baska hiçbir sensörü okuyamaz. FreeRTOS kullanarak:Ag islemlerini Core 0'a,Donanim/Sensör okuma islemlerini Core 1'e atayabiliriz.Bir görev bloklandiginda (örnegin Wi-Fi koptugunda), diger görevler saniyede binlerce kez çalismaya devam eder.Örnek Uygulama: Asenkron MQTT PublishAsagidaki kod blogunda, standart loop() fonksiyonunu tamamen bos birakip, MQTT baglantisini ve sensör okuma islemlerini bagimsiz FreeRTOS görevleri olarak tanimladik.#include <WiFi.h> #include <PubSubClient.h> // Ag ve MQTT Ayarlari const char* ssid = "WIFI_SSID"; const char* password = "WIFI_PASSWORD"; const char* mqtt_server = "broker.hivemq.com"; WiFiClient espClient; PubSubClient client(espClient); // Sensör Verisi Için Task Handle TaskHandle_t SensorTask; TaskHandle_t MqttTask; void setup() { Serial.begin(115200); // Wi-Fi Baglantisi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } client.setServer(mqtt_server, 1883); // Core 1 üzerinde Sensör Okuma Görevi olusturuluyor xTaskCreatePinnedToCore( readSensorData, /* Çalistirilacak Fonksiyon */ "SensorTask", /* Görev Adi (Debug için) */ 10000, /* Stack Boyutu (Byte) */ NULL, /* Parametre */ 1, /* Öncelik (Priority) */ &SensorTask, /* Task Handle */ 1); /* Hangi Çekirdek (Core 1) */ // Core 0 üzerinde MQTT Görevi olusturuluyor xTaskCreatePinnedToCore( handleMqttConnection, "MqttTask", 10000, NULL, 2, /* Ag islemleri önceliklidir */ &MqttTask, 0); /* Hangi Çekirdek (Core 0) */ } void loop() { // FreeRTOS kullanildigi için loop bos birakilir. // Geleneksel delay() yerine vTaskDelay kullanilir. vTaskDelete(NULL); } // Donanim Okuma Görevi void readSensorData( void * pvParameters ){ for(;;){ // Dummy sensör verisi üretimi (Örn: Nem veya Lidar Mesafesi) float dummyHumidity = random(40, 60); Serial.printf("Sensör Okundu: %.2f\n", dummyHumidity); // MQTT üzerinden Publish (Eger baglanti varsa) if(client.connected()) { char payload[10]; dtostrf(dummyHumidity, 4, 2, payload); client.publish("ta2kmk/sensors/humidity", payload); } // Diger görevlere nefes aldirmak için FreeRTOS gecikmesi vTaskDelay(2000 / portTICK_PERIOD_MS); } } // MQTT Ag Görevi void handleMqttConnection( void * pvParameters ){ for(;;){ if (!client.connected()) { Serial.println("MQTT Broker'a baglaniliyor..."); if (client.connect("ESP32_TA2KMK_Client")) { Serial.println("Baglanti Basarili!"); } else { Serial.print("Hata, rc="); Serial.println(client.state()); vTaskDelay(5000 / portTICK_PERIOD_MS); // 5 saniye sonra tekrar dene } } client.loop(); // Gelen mesajlari dinle vTaskDelay(10 / portTICK_PERIOD_MS); // Watchdog timer'i rahatlat } }
Genel
Neden Blog Yazmalisin
Neden Blog Yazmalisin!1. Neden blog yaziyoruzUzun bir zaman sonra, çevremde insanlarin sikâyet ettigi en büyük seylerden biri, Instagram, TikTok vb. yerlerde yapilan paylasimlarin sahteligiydi. Tam da bugün Abluka Kafe'de otururken, henüz tanistigim biri bir örnek verdi:- Inanamiyorum ya! Konsere gidiyorum, dinlemeye degil de kayda almaya, bir yerlerde paylasmaya... Dönüp bakinca bir hatiram olsun diye degil. Sonrasinda bakar, hatirlayip yad ederiz gibi bir niyetim yok artik. Paylasmak zorunda hissediyorum, istedigim için degil; kaydirmak için buradayim, neyi göstermeye çalisiyorum ki?2. Profilimdeki kisi ben miyim?Paylasimlarimiz, sosyal medya profillerimiz gerçekten bizi mi ifade ediyor? Bir zamanlar, çok uzak degil, bu mecralarin ilk zamanlarini ele alalim. Facebook'ta yaptigimiz paylasimlar, babalarimizin, abilerimizin çocuklarini gururla çektigi fotograflar gibiydi. Henüz baslamamisken hazirligi yapilmis dizilerin jenerikleri sirasinda o tüplü televizyonun önünde verilmis, el emegi göz nuru, düsük bütçeli cosplay'ler... Ne güzeldi degil mi? Daha gerçekti aslinda.3. Geri gelsin istedim.Ben de dedim ki: "Bu içimden geçenlerden bahsedip, gerçekten kendime ait, girip okununca kendimi görebilecegim, belki de kendimi anlatabilecegim bir yerim olmasin mi?" Bu yüzden, sizlerle bu ilk blogumu paylasmak beni çok heyecanlandiriyor. Biraz daha uzaklasip, kendimi burada siz okurlarima ifade etmek ne güzel. Utaniyorum biraz, yalan olmasin ama su an bu kelimeleri dökerken ne kadar mutluyum, anlatamam.Blog yazmaya nasil baslarim?Peki, hepimizin kafasinda bir soru var degerli okur: Biraz arastirma yaptiktan sonra, bu isin aslinda zamanla nasil gelistigini, aslinda çok güzel inceliklerinin oldugunu gördüm. Bunlardan, ayrica önümüzdeki yazilarimda bahsedecegim ama simdi nasil baslayacagimizi konusalim.4.1 Yazimi nerede yazacagim?Ilk blog yazimi yillar önce, hiç hatirlamadigim bir kullanici adiyla Blogger’da yazmistim. O dönemlerde oldukça popülerdi. Bu sene ise YouTube kanalimda verdigim egitimlerin ardindan, bu egitimleri destekleyecek bazi analiz oyunlari yaziyorum. Bunun için Medium’u tercih ettim.Siz de Medium gibi bir platformda yazilarinizi, düsüncelerinizi, uzmanlasmak istediginiz ya da hâlihazirda ilgilendiginiz hobileriniz hakkinda gönül rahatligiyla yazmaya baslayabilirsiniz. Baktiginizda, okumak da yazmak kadar keyif veriyor insana.Ancak, bende farkli bir durum oldu. Medium’a 3 yazi yazdiktan sonra, bu yapilan geri bildirimler ne kadar hosuma gitse de, kendimi oraya ait hissedemeyecegimi fark ettim. Neden ayni zamanda kendi sahsi sitemde bu ise devam etmeyeyim diye düsündüm.4.2 Kendi sitemi yapmaliyim"Kendi sitemi yapmaliyim," diyerek çiktim bir yola. Ugrastim, arastirdim, nasil yapabilirim diye. Her satirina elim degsin, arkami yaslaninca "Bunu ben yaptim!" diyebileyim istedim. Bir noktada, meslegim de bu, yapabilirim diyerek kollari sivadim. Sonunda, bugün içime sinerek sizlerin kullanimina açtim.Bir yazinin, bir ürünün sizin olmasi, ona emek vermenin mutlulugunu sizlerle paylasmak isterim. Es zamanli olarak, burada sizlerle ders notlarimi paylasabilecegim; bir yandan da kendimi gelistirdigim bir kanal olusturdum. Umuyorum, devami da çok yakinda gelecek.Bu yüzden bu isin yarini yok. Eger blog yazmak istiyorsaniz yapmaniz gereken tek sey, bir platform seçip sadece yazmaya baslamak. Istediginiz, dilediginiz konuyu seçin; nasil mutlu oluyorsaniz. Kendinizi nasil ifade etmek istiyorsaniz, özgürce yazmaya baslayin.Bu yolda size eslik edecek insanlardan bir ani birakin her yaziniza. Devami gelecektir; ne yapmaniz gerektigini yolda ögreneceksiniz.Daha da bu konu hakkinda söyleyecek bir seyim yok. Blog sayfama hos geldiniz. Güzel anilar dilerim.-Mert Kaan Çukadar