Arkadaşlar hepinize merhabalar ;
NodemCu kullanarak evımdeki ışıkları google asistan ile kontrol ediyorum hem google asistan üzerinden hemde nodemcuya bağladığım br pushbuton üzerinden ışıkları açıp kapatabiliyorum. Apple kullanmaya baslamam nedeni ile kullandığım cihazları apple home uygulması üzerinden kontrol etmek istemem nedeni ile nodemcu ile homekit ile kontrol etmek istemekteyim.
hem home uygulaması hemde fiziksel pushbuton ile kontrol etmek için bazı calısmalar yaptım ancak bir sorunum var nodemcu wifi ağına baglandıgında hem buton hemde home uygulamasından rahatca kullanabılıyorum ancak wifi bağlantısı kesildiğinde fiziksel butonda devre dışı kalıyor. yardımlarınız için şimdiden teşekkür ederim. kodlarım aşağıdaki gibi.
__
NodemCu kullanarak evımdeki ışıkları google asistan ile kontrol ediyorum hem google asistan üzerinden hemde nodemcuya bağladığım br pushbuton üzerinden ışıkları açıp kapatabiliyorum. Apple kullanmaya baslamam nedeni ile kullandığım cihazları apple home uygulması üzerinden kontrol etmek istemem nedeni ile nodemcu ile homekit ile kontrol etmek istemekteyim.
hem home uygulaması hemde fiziksel pushbuton ile kontrol etmek için bazı calısmalar yaptım ancak bir sorunum var nodemcu wifi ağına baglandıgında hem buton hemde home uygulamasından rahatca kullanabılıyorum ancak wifi bağlantısı kesildiğinde fiziksel butonda devre dışı kalıyor. yardımlarınız için şimdiden teşekkür ederim. kodlarım aşağıdaki gibi.
__
C++:
#include <Arduino.h>
#include <arduino_homekit_server.h>
#include "wifi_info.h"
//BUTON BASLANGIÇ
byte buton_pin = D7;
byte role_pin = D1;
byte OldValue = 1;
byte NewValue = 1;
//BUTON SON
#define LOG_D(fmt, ...) printf_P(PSTR(fmt "\n"), ##__VA_ARGS__);
void setup() {
Serial.begin(115200);
wifi_connect(); // in wifi_info.h
//homekit_storage_reset(); // to remove the previous HomeKit pairing storage when you first run this new HomeKit example
my_homekit_setup();
//BUTON BAS
pinMode(role_pin, OUTPUT);
pinMode(buton_pin, INPUT_PULLUP);
digitalWrite(role_pin, HIGH);
//BUTON SON
}
void loop() {
ButonKontrol();
my_homekit_loop();
delay(10);
}
void ButonKontrol() {
//BUTON BAS
NewValue = digitalRead(buton_pin);
if (NewValue != OldValue) {
OldValue = NewValue;
if (NewValue == LOW) {
if (digitalRead(role_pin) == LOW) {
digitalWrite(role_pin, HIGH);
} else {
digitalWrite(role_pin, LOW);
}
}
}
delay(20);
//BUTON SON
}
//==============================
// 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;
static uint32_t next_heap_millis = 0;
#define PIN_SWITCH 2
//Called when the switch value is changed by iOS Home APP
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 my_homekit_setup() {
pinMode(PIN_SWITCH, OUTPUT);
digitalWrite(PIN_SWITCH, 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;
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.c komutlarım bu şekilde_______________________________
/*
* my_accessory.c
* Define the accessory in C language using the Macro in characteristics.h
*
* Created on: 2020-05-15
* Author: Mixiaoxiao (Wang Bin)
*/
#include <homekit/homekit.h>
#include <homekit/characteristics.h>
void my_accessory_identify(homekit_value_t _value) {
printf("accessory identify\n");
}
// Switch (HAP section 8.38)
// required: ON
// optional: NAME
// format: bool; HAP section 9.70; write the .setter function to get the switch-event sent from iOS Home APP.
homekit_characteristic_t cha_switch_on = HOMEKIT_CHARACTERISTIC_(ON, false);
// format: string; HAP section 9.62; max length 64
homekit_characteristic_t cha_name = HOMEKIT_CHARACTERISTIC_(NAME, "Switch");
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, "Switch"),
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_on,
&cha_name,
NULL
}),
NULL
}),
NULL
};
homekit_server_config_t config = {
.accessories = accessories,
.password = "111-11-111"
};
_______wifi_info.h komutlarımda bu şekilde____________________________________________
/*
* wifi_info.h
*
* Created on: 2020-05-15
* Author: Mixiaoxiao (Wang Bin)
*/
#ifndef WIFI_INFO_H_
#define WIFI_INFO_H_
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
const char *ssid = "MikroTik-C31527";
const char *password = "Turassssant07";
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());
}
#endif /* WIFI_INFO_H_ */
Last edited by a moderator: