Merhaba arkadaşlar internette yabancı kaynaklarda bilgiler var ama biraz daha türkçe kaynak olsun diye kendi yaptığım sistemi anlatıcam.
Ben televizyonumun arkasına ve tv standımı aydınlaran iki led şeridi apple homekit ile siri kullanarak açıp kapatmak istedim. bunlar için hue gibi yada diğer hazır cihazlara tonlarca para dökmek yerine basit sistemler ile kendim yapmak istedim..
Ben bir nodemcu esp8266 ve 5v role ve bir adaptör (12v led adaptörü)
Bağlantımı şu şekilde yaptım.
nodemcu pinlerinden
d4 ve d0 ı roledeki in1 ve in2 ye
roledeki vcc bağlantısı-nodemcu vcc
roledeki gnd bağlantısını-nodemcu gnd pinine bağladım
apple home kit uyumlu olması için bu kütüphaneyi nodemcuyu arduinoya ideye bağlayarak kullandım
Kodlar;
Aydınlatma.ino;
#include <Arduino.h> #include <arduino_homekit_server.h> #include "wifi_info.h" #define LOG_D(fmt, ...) printf_P(PSTR(fmt "\n") , ##__VA_ARGS__); void setup() { Serial.begin(115200); wifi_connect(); // WiFi bağlantısını başlat // homekit_storage_reset(); // yeni bir projede burayı aç ios tanımlamayı yap geri bu hale getir my_homekit_setup(); } void loop() { my_homekit_loop(); checkConnection(); // Bağlantı durumunu kontrol et delay(10); } //============================== // HomeKit setup and loop //============================== // access your HomeKit characteristics defined in my_accessory.c extern "C" homekit_server_config_t config; extern "C" homekit_characteristic_t cha_switch_on; extern "C" homekit_characteristic_t cha_switch_on2; extern "C" homekit_characteristic_t cha_switch_on3; extern "C" homekit_characteristic_t cha_switch_on4; static uint32_t next_heap_millis = 0; #define PIN_SWITCH 2 #define PIN_SWITCH2 5 #define PIN_SWITCH3 0 #define PIN_SWITCH4 4 void cha_switch_on_setter(const homekit_value_t value) { bool on = value.bool_value; cha_switch_on.value.bool_value = on; //sync the value LOG_D("Switch: %s", on ? "ON" : "OFF"); digitalWrite(PIN_SWITCH, on ? LOW : HIGH); } void cha_switch_on_setter2(const homekit_value_t value) { bool on = value.bool_value; cha_switch_on2.value.bool_value = on; //sync the value LOG_D("Switch: %s", on ? "ON" : "OFF"); digitalWrite(PIN_SWITCH2, on ? LOW : HIGH); } void cha_switch_on_setter3(const homekit_value_t value) { bool on = value.bool_value; cha_switch_on3.value.bool_value = on; //sync the value LOG_D("Switch: %s", on ? "ON" : "OFF"); digitalWrite(PIN_SWITCH3, on ? LOW : HIGH); } void cha_switch_on_setter4(const homekit_value_t value) { bool on = value.bool_value; cha_switch_on4.value.bool_value = on; //sync the value LOG_D("Switch: %s", on ? "ON" : "OFF"); digitalWrite(PIN_SWITCH4, on ? LOW : HIGH); } void my_homekit_setup() { pinMode(PIN_SWITCH, OUTPUT); digitalWrite(PIN_SWITCH, HIGH); pinMode(PIN_SWITCH2, OUTPUT); digitalWrite(PIN_SWITCH2, HIGH); pinMode(PIN_SWITCH3, OUTPUT); digitalWrite(PIN_SWITCH3, HIGH); pinMode(PIN_SWITCH4, OUTPUT); digitalWrite(PIN_SWITCH4, HIGH); //Add the .setter function to get the switch-event sent from iOS Home APP. //The .setter should be added before arduino_homekit_setup. //HomeKit sever uses the .setter_ex internally, see homekit_accessories_init function. //Maybe this is a legacy design issue in the original esp-homekit library, //and I have no reason to modify this "feature". cha_switch_on.setter = cha_switch_on_setter; cha_switch_on2.setter = cha_switch_on_setter2; cha_switch_on3.setter = cha_switch_on_setter3; cha_switch_on4.setter = cha_switch_on_setter4; arduino_homekit_setup(&config); //report the switch value to HomeKit if it is changed (e.g. by a physical button) //bool switch_is_on = true/false; //cha_switch_on.value.bool_value = switch_is_on; //homekit_characteristic_notify(&cha_switch_on, cha_switch_on.value); } void my_homekit_loop() { arduino_homekit_loop(); const uint32_t t = millis(); if (t > next_heap_millis) { // show heap info every 5 seconds next_heap_millis = t + 5 * 1000; LOG_D("Free heap: %d, HomeKit clients: %d", ESP.getFreeHeap(), arduino_homekit_connected_clients_count()); } }Kod
Yığını:
my_accessory.h kodlarım ;
#include <homekit/homekit.h> #include <homekit/characteristics.h> void my_accessory_identify(homekit_value_t _value) { printf("accessory identify\n"); } homekit_characteristic_t cha_switch_on = HOMEKIT_CHARACTERISTIC_(ON, false); homekit_characteristic_t cha_switch_on2 = HOMEKIT_CHARACTERISTIC_(ON, false); homekit_characteristic_t cha_switch_on3 = HOMEKIT_CHARACTERISTIC_(ON, false); homekit_characteristic_t cha_switch_on4 = HOMEKIT_CHARACTERISTIC_(ON, false); // format: string; HAP section 9.62; max length 64 homekit_characteristic_t cha_name = HOMEKIT_CHARACTERISTIC_(NAME, "tv"); homekit_accessory_t *accessories[] = { HOMEKIT_ACCESSORY(.id=1, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) { HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) { HOMEKIT_CHARACTERISTIC(NAME, "tv"), HOMEKIT_CHARACTERISTIC(MANUFACTURER, "tv HomeKit"), HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "3458421"), HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266"), HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "3.0"), HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify), NULL }), HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){ &cha_switch_on, &cha_name, NULL }), NULL }), HOMEKIT_ACCESSORY(.id=2, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) { HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) { HOMEKIT_CHARACTERISTIC(NAME, "Switch2"), HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"), HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"), HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"), HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"), HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify), NULL }), HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){ &cha_switch_on2, &cha_name, NULL }), NULL }), HOMEKIT_ACCESSORY(.id=3, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) { HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) { HOMEKIT_CHARACTERISTIC(NAME, "Switch3"), HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"), HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"), HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"), HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"), HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify), NULL }), HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){ &cha_switch_on3, &cha_name, NULL }), NULL }), HOMEKIT_ACCESSORY(.id=4, .category=homekit_accessory_category_switch, .services=(homekit_service_t*[]) { HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) { HOMEKIT_CHARACTERISTIC(NAME, "Switch4"), HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"), HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"), HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"), HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"), HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify), NULL }), HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){ &cha_switch_on4, &cha_name, NULL }), NULL }), NULL }; homekit_server_config_t config = { .accessories = accessories, .password = "123-44-567" };Kod
Yığını:
wifi_info.h kodlarım ;
/* * wifi_info.h * * Oluşturulma tarihi: 2023-12-02 * Yazar: Skyhan */ #ifndef WIFI_INFO_H_ #define WIFI_INFO_H_ #if defined(ESP8266) #include <ESP8266WiFi.h> // ESP8266 için WiFi kütüphanesi #elif defined(ESP32) #include <WiFi.h> #endif const char *ssid = "wifi adı"; const char *password = "wifi şifren"; void wifi_connect() { WiFi.persistent(false); WiFi.mode(WIFI_STA); WiFi.setAutoReconnect(true); WiFi.begin(ssid, password); Serial.println("WiFi connecting..."); while (!WiFi.isConnected()) { delay(100); Serial.print("."); } Serial.print("\n"); Serial.printf("WiFi connected, IP: %s\n", WiFi.localIP().toString().c_str()); } void sendHeartbeat() { // TODO: HomeKit'e bir 'kalp atışı' gönderme işlemi buraya eklenecek } void checkConnection() { if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi bağlantısı kesildi! Yeniden bağlanılıyor..."); wifi_connect(); // Bağlantıyı yeniden kur } } #endifKod
Yığını:
my_accessory kısmında bulunan bu yerde kendi apple home şifresini belirleyebilirsiniz.
homekit_accessory_t *accessories[] = ... homekit_server_config_t config = { .accessories = accessories, .password = "111-11-111", //.on_event = on_homekit_event, //optional //.setupId = "ABCD" //optional };Kod
Yığını:
wifi_info.h da wifi bilgilerinizi güncelleyin.
const char *ssid = "wifi adı"; const char *password = "wifi şifren";Kod
Yığını:
gerisi adaptorden gelen kablonun + ucu ve - ucu belirleyip role bağlantısını yapın ve kodlarınızı arduino ide ile nodemcuya yükleyin.
burda 5v role esp şeklinde googleda arayarak daha kğçğk minimal çözümler bulabilirsiniz illa nodemcu kullanmak gerekmiyor.
nodemcu role kullanımını bakınız.
burdaki sistemde bir getway veya hub lazım değil wifiye bağlayıp kullanabilirsiniz .
Proje kodları ve şifreyi değiştirip yeni bir proje yaptınızda apple home aksesuar eklemede görmekte sorun yaşarsanız. aydınlatma.inoda verdiğim ;
void setup() { Serial.begin(115200); wifi_connect(); // WiFi bağlantısını başlat // homekit_storage_reset(); // yeni bir projede burayı aç ios tanımlamayı yap geri bu hale getir my_homekit_setup(); }Kod
Yığını:
homekit_storage_reset();Kod
Yığını:
kısmını aktif edin tekrar yükleyin kodları görür.
Eğer ben böyle bişi yapıp satış yapmak istiyorum ama wifi bilgisini satın alan güncelleyemez benzeri muhabbetleriniz varsada nodemcu esp8266 wifimanager kütüphanesi kullanarak kodlarınıza eklerseniz. cihazı hazır hale getirdiğinizde esp8266 wifi ile bağlanıp güncel wifi ağının bilgilerini giren bir sistem yapmak zor değil. biraz araştırabilirsiniz ben gerek duymadım.
not: esp8266 genelde 2.4ghz wifi ağı kullanır. 5ghz ağda çalışmaz.
ek: ben kodlarda 4 roleli sistem için kodladım. paylaştığım kütüphanede swich, hareket sensörü vb örnek kodlarda var.
bundan sonrası sizin kullanmak istediğiniz sisteme bağlı hareket sensörü örneği yapıp bildirim alabilirsiniz bu sistem ben ev içi yaptım internetten kontrol için homeasistan tarzı uygulamalara bu projenizi ekleyebilirsiniz
yada nodemcu ile telegrama whatsapa mesaj atma kodları dahil edebilir odanıza biri girdiğinde mesaj alabilirsiniz.
gerisi sizin hayalgücünüze ve kod bilginize kalmış.
Video İzlerken Bozulmalar Yeşillenme sorunu
Mozilla Yer İmi Ekleme Sorunu
|
Windows 10 Sıcaklık Değerleriniz Nedir ?
|
En iyi Ram Markası ?
|
Meslek: Öğretmen
| İntel Core i5-5200U 2.7 GHz | Asus X555LNB Series Notebook | Kingston 8GB (2x4GB) 1600MHz DDR3 | NVIDIA GeForce 840M | | Intel(R) HD Graphics 5500 | LG Philips LP156WHB-TLB1 | Asus IceCool | ST1000LM024 HN-M101MBB (1000 GB, 5400 RPM, SATA-II) |
|
Son Giriş: geçen yıl
Son Mesaj Zamanı: geçen yıl
Mesaj Sayısı: 113
Gerçek Toplam Mesaj Sayısı: 137
İkinci El Bölümü Mesajları: 5
Konularının görüntülenme sayısı: 3.060 (Bu ay: 66)
Toplam aldığı artı oy sayısı: 6 (Bu hafta: 0)
En çok mesaj yazdığı forum bölümü: İşletim Sistemleri ve Yazılımlar