Arduino Nano Matter ve Matter platformundan bahsettiğim bu yazı dizisinin ilk bölümünde Arduino’nun yeni kartından ve yeni akıllı ev platformundan kısaca bahsetmiş, ikinci bölümünde de karta yakından bakarak tasarım tercihlerini gözden geçirmiştim. Üçüncü bölümde de kartın Arduino IDE’ye nasıl kurulduğundan bahsettim.
Bu bölümde ise Arduino Nano Matter‘ı kullanarak ilk Matter destekli cihazımızı (RGB Lamba) nasıl yapabileceğimizden ve cihazı Google Home’a nasıl bağlayacağımızdan bahsedeceğim. Kartın deneme üretimi Community Preview versiyonu olduğunun altını çizeyim.
Örnek Kod
İlk Matter cihazımız renkli ve ışıklı bir şey olmalı. Arduino ve Silicon Labs ekibi en yaygın akıllı ev cihazının ampuller olduğunu çok iyi biliyor ve Nano Matter üzerindeki RGB LED‘i kullanan bir akıllı ampul kodu hazırlamışlar.
Koda Arduino IDE’nin Dosya > Örnekler > Arduino Nano Matter Örnekleri bölümünden Matter > nano_matter_lightbulb_color seçerek ulaşabiliyoruz.
Aşağıda bu kod üzerindeki orijinal yorumları Türkçe’ye tercüme edip biraz toparladım. Her bir bölümün üzerinde kodun ne için kullanıldığını gösteren açıklamalar var ve bunlar kodun mantığını anlamanıza yardımcı olabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
/* Matter renkli ampul örneği için Nano Matter Bu örnek, Arduino Matter API'sinin temel kullanımını gösterir. Örnek, kullanıcıların Nano Matter üzerindeki dahili RGB LED'ini bir Matter ampulü olarak kontrol etmelerine olanak tanır. LED'i açıp kapatmak, parlaklığı ayarlamak ve rengi değiştirmek mümkündür. Cihazın önce bir Matter hub'ına tanıtılması gerekmektedir. Uyumlu kartlar: - Arduino Nano Matter - xG24 Geliştirme Kiti Yazar: Tamas Jozsi (Silicon Labs) */ #include <Matter.h> #include <MatterLightbulb.h> // RGB LED pin tanımlamaları #define LED_R LED_BUILTIN #define LED_G LED_BUILTIN_1 #define LED_B LED_BUILTIN_2 // Matter renkli ampul nesnesi oluşturuluyor MatterColorLightbulb matter_color_bulb; // Fonksiyon tanımlamaları void update_led_color(); void led_off(); void handle_button_press(); // Buton basıldı mı kontrolü için değişken volatile bool button_pressed = false; void setup() { // Seri iletişim başlatılıyor Serial.begin(115200); // Matter başlatılıyor Matter.begin(); // Matter ampul başlatılıyor matter_color_bulb.begin(); matter_color_bulb.boost_saturation(51); // Doygunluğu %20 artır // Dahili buton ayarlanıyor pinMode(BTN_BUILTIN, INPUT_PULLUP); attachInterrupt(BTN_BUILTIN, &handle_button_press, FALLING); // LED kapatılıyor led_off(); Serial.println("Arduino Nano Matter - renkli ampul"); // Eğer cihaz Matter hub'ına tanıtılmamışsa bilgi ver if (!Matter.isDeviceCommissioned()) { Serial.println("Matter cihazı tanıtılmamış"); Serial.println("Matter hub'ınıza manuel eşleştirme kodu veya QR kodu ile tanıtın"); Serial.printf("Manuel eşleştirme kodu: %s\n", Matter.getManualPairingCode().c_str()); Serial.printf("QR kodu URL: %s\n", Matter.getOnboardingQRCodeUrl().c_str()); } // Cihaz Matter hub'ına tanıtılana kadar bekle while (!Matter.isDeviceCommissioned()) { delay(200); } Serial.println("Thread ağı bekleniyor..."); // Thread ağına bağlanana kadar bekle while (!Matter.isDeviceThreadConnected()) { delay(200); } Serial.println("Thread ağına bağlandı"); Serial.println("Matter cihazı keşfi bekleniyor..."); // Matter cihazı çevrimiçi olana kadar bekle while (!matter_color_bulb.is_online()) { delay(200); } Serial.println("Matter cihazı çevrimiçi"); } void loop() { // Eğer fiziksel buton durumu değişirse ampulün açma/kapama durumu güncellenir if (button_pressed) { button_pressed = false; // Ampulün açma/kapama durumu değiştirilir matter_color_bulb.toggle(); } // Ampulün mevcut açma/kapama durumu alınır static bool matter_lightbulb_last_state = false; bool matter_lightbulb_current_state = matter_color_bulb.get_onoff(); // Mevcut durum AÇIK ve önceki durum KAPALI ise LED açılır if (matter_lightbulb_current_state && !matter_lightbulb_last_state) { matter_lightbulb_last_state = matter_lightbulb_current_state; Serial.println("Ampul AÇIK"); // LED'leri son alınan duruma ayarla update_led_color(); } // Mevcut durum KAPALI ve önceki durum AÇIK ise LED kapatılır if (!matter_lightbulb_current_state && matter_lightbulb_last_state) { matter_lightbulb_last_state = matter_lightbulb_current_state; Serial.println("Ampul KAPALI"); led_off(); } // Renk ve parlaklık durumlarının değişimini takip etmek için önceki değerler saklanır static uint8_t hue_prev = 0; static uint8_t saturation_prev = 0; static uint8_t brightness_prev = 0; uint8_t hue_curr = matter_color_bulb.get_hue(); uint8_t saturation_curr = matter_color_bulb.get_saturation_percent(); uint8_t brightness_curr = matter_color_bulb.get_brightness_percent(); // Eğer renk tonu, doygunluk veya parlaklık değiştiyse LED güncellenir if (hue_prev != hue_curr || saturation_prev != saturation_curr || brightness_prev != brightness_curr) { update_led_color(); hue_prev = hue_curr; saturation_prev = saturation_curr; brightness_prev = brightness_curr; } } // RGB LED'in rengini Matter ampulünün rengine göre günceller void update_led_color() { // Eğer ampul kapalıysa işlem yapılmaz if (!matter_color_bulb.get_onoff()) { return; } uint8_t r, g, b; matter_color_bulb.get_rgb(&r, &g, &b); // Dahili LED aktif LOW ise parlaklık değerlerini tersine çevir if (LED_BUILTIN_ACTIVE == LOW) { analogWrite(LED_R, 255 - r); analogWrite(LED_G, 255 - g); analogWrite(LED_B, 255 - b); } else { analogWrite(LED_R, r); analogWrite(LED_G, g); analogWrite(LED_B, b); } Serial.printf("Ampul rengini ayarla > r: %u g: %u b: %u\n", r, g, b); } // RGB LED'i kapatır void led_off() { // Dahili LED aktif LOW ise parlaklık değerlerini tersine çevir if (LED_BUILTIN_ACTIVE == LOW) { analogWrite(LED_R, 255); analogWrite(LED_G, 255); analogWrite(LED_B, 255); } else { analogWrite(LED_R, 0); analogWrite(LED_G, 0); analogWrite(LED_B, 0); } } // Butona basıldığında çalışacak fonksiyon void handle_button_press() { // Butona art arda basılmasını önlemek için son basış zamanını kontrol eder static uint32_t btn_last_press = 0; if (millis() < btn_last_press + 200) { return; } btn_last_press = millis(); button_pressed = true; } |
Kodun kabaca nasıl çalıştığını anladıysak Arduino IDE içinde verilen örneği Nano Matter’a yükleyebiliriz. Matter çekirdeğinin derlenmesinin epey zaman aldığını şimdiden söyleyeyim, sürecin takıldığını düşünmeyin. O kod derlenecek!
Kodun yüklemesi tamamlandığında Arduino Nano Matter Seri Port Ekranı üzerinden 115200 baud hızında bildirim göndermeye başlar. Seri Port Ekranı’nı açmanıza rağmen bu bildirimleri göremiyorsanız baud ayarının doğru olduğundan emin olduktan sonra kart üzerindeki RESET butonuna basarak kodu yeniden başlatın.
Yukarıdaki resimde Seri Port Ekranı bize hazırladığımız Matter cihazının henüz bir Thread cihazına bağlanmadığını söylüyor ve bağlamamız için gereken QR kodunun linkini de üretiyor. Bu linki kopyalayıp tarayıcımızda açtığımızda akıllı telefonumuz ile okutmaya hazır QR kod ekranda görünecek. İstersek bu QR kodu okutmadan verilen manuel eşleştirme kodunu da kullanabiliriz.
Hazırsak Google Home ile kuruluma başlayalım. Apple veya Amazon cihazlarda da kurulum benzer şekilde ilerleyecektir.
Google Home ile Kurulum
Evimde kurduğum atölyemde (METE HOCA Genel Merkezi!) Google’ın Nest Hub 2. nesil Thread cihazını kullanıyorum ve akıllı cihazlarımı bu şekilde kontrol ediyorum.
Android telefonumdaki Google Home uygulamasında Cihazlar sekmesinin sağ alt bölümdeki + Ekle butonuna tıklayıp yeni cihazımızı eşleştirmeye başlayalım. Bunu yaparken telefonun Bluetooth‘unun açık olduğundan emin olun. Elbette Matter özellikli cihaz ekleyeceğiz. Seçimi yaptığımızda QR kodunu okutmak için kameramız açılıyor. Nano Matter da kameraya el sallıyor!
Her zamanki gibi kullanım sözleşmesini kabul ediyor ve Nano Matter’ın bulunmasını ve eşleştirilmesini bekliyoruz.
Onaylanmamış cihaz uyarısı ile karşılaşıyoruz. Elbette kendi yaptığımız cihazın uluslararası sertifikalandırmasını yapmadığımız için Google Home bizi uyarıyor. Sol alt tarafta yer alan Yine de kur butonuna tıklayarak kurulumu devam ettiriyoruz.
Ağ bağlantısı kontrol ediliyor işlemi düşündüğümüzden uzun sürebiliyor ve sonunda bağlantı kuruluyor.
Bağlantı kurulurken Seri Port Ekranı da eşleştirilme süreci hakkında bize bilgi veriyor. Nano Matter bu süreçte Thread ağına bağlanmayı bekliyor. Ekranda Matter device is now online bildirimini gördüğümüzde yükleme tamamlanmış demektir.
Arduino Nano Matter ile yaptığımız akıllı ampul Matter cihazımız sonunda bağlandı ve kullanıma hazır. Cihazlar bölümünde Matter bulb olarak yeni bir cihaz görüyoruz ve yanında Matter device adında bir detay butonu görülüyor.
Ampulü yakmak için soldaki Matter bulb butonuna tıklamamız yeterli. Küçük bir gecikmeyle kendi yaptığımız akıllı ampulümüz yanacaktır. İlk Matter cihazımızı çalıştırdık!
Kullanım
Matter bulb butonuna basılı tutarak parlaklık ve renk değiştirme ekranına ulaşabiliyoruz. Orta bölümdeki alanı kaydırarak parlaklığı ayarlayabilir veya basarak ampulümüzü açıp kapatabiliriz. Ampulü açıp kapatmak için Nano Matter üzerindeki kullanıcı butonunu da kullanabiliyoruz.
Sol alt taraftaki resim paletine dokunarak da renk değiştirme işlemini yapabiliyoruz. Seçtiğimiz renkler bir geçiş animasyonu ile birlikte işleme konuyor.
Biz akıllı ampulümüzü yakıp söndürürken veya rengini değiştirirken Nano Matter da ne yaptığımızı Seri Port Ekranı üzerinde bize duyuruyor.
Diğer Örnekler
Silicon Labs ekibi Matter platformu için pek çok örnek kod hazırlamış. Her ne kadar bunların küçük bir kısmı Nano Matter ile doğrudan uyumlu olsa da, diğer kodlar da küçük düzenlemeler ile Arduino Nano Matter ile kullanılabiliyor.
Bu yazı dizisi Arduino Nano Matter‘ın Community Preview olarak adlandırılan deneme sürümü kullanılarak hazırlandı. Arduino ekibi ben ve kartı inceleyen diğer maker dostlardan aldıkları dönütlerle tasarımın nihai halini hazırlıyor ve kısa süre sonra satışa sunulacak.
Nano Matter’ın nihai sürümü ortaya çıktığında maker dünyasının odağına oturacak ve örnek projeler de yayınlanmaya başlanacaktır. Benim de ileride Nano Matter ile yapacağım projeler için takipte kalın!