Şimdi Ara

Nodemcu-Esp8266 ile kendi apple homekitini yapma

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
163
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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;


    Kod

    Yığını:
    #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());     } }



    my_accessory.h kodlarım ;


    Kod

    Yığını:
    #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" };


    wifi_info.h kodlarım ;

    Kod

    Yığını:
    /*  * 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   } } #endif



    my_accessory kısmında bulunan bu yerde kendi apple home şifresini belirleyebilirsiniz.


    Kod

    Yığını:
    homekit_accessory_t *accessories[] = ... homekit_server_config_t config = { .accessories = accessories, .password = "111-11-111", //.on_event = on_homekit_event, //optional //.setupId = "ABCD" //optional };



    wifi_info.h da wifi bilgilerinizi güncelleyin.


    Kod

    Yığını:
    const char *ssid = "wifi adı"; const char *password = "wifi şifren";



    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 ;


    Kod

    Yığını:
    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();

    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ış.




    < Bu mesaj bu kişi tarafından değiştirildi Sky Han -- 19 Aralık 2023; 22:25:14 >







  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.