Arduino Project for Beginners : Smart Home Automation with Node MCU and iOS (Apple HomeKit)

Link to buy the entire combos :- NOTE :- NOT CODED COMBOS 
Home Automation using Apple iOS 1 Device only :- Click Here
Home Automation using Apple iOS 4 Devices :- Click Here
Home Automation using Apple iOS 8 Devices :- Click Here
Other Arduino Combos :- Click Here
Link to Arduino Playlist :- Click Here
(Still working on complete coded Combos)

 

Link to Download HomeKit Library :- Github, Google Drive
Link to Download Arduino IDE .ino Files :- Click Here

Link to Add to Additional Board Manager :- http://arduino.esp8266.com/stable/package_esp8266com_index.json 


 

Home Automation.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(); // 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();
}
void loop() {
my_homekit_loop();
delay(10);
}
extern “C” homekit_server_config_t config;
extern “C” homekit_characteristic_t cha_switch_on1;
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_SWITCH1 16  //D0
#define PIN_SWITCH2 5   //D1
#define PIN_SWITCH3 4   //D2
#define PIN_SWITCH4 0   //D3
/*
#define PIN_SWITCH5 14  //D5
#define PIN_SWITCH6 12  //D6
#define PIN_SWITCH7 13  //D7
#define PIN_SWITCH8 15  //D8
*/
void cha_switch_on_setter1(const homekit_value_t value) {
bool on = value.bool_value;
cha_switch_on1.value.bool_value = on;//sync the value
LOG_D(“Switch: %s”, on ? “ON” : “OFF”);
digitalWrite(PIN_SWITCH1, 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_SWITCH1, OUTPUT);
digitalWrite(PIN_SWITCH1, 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);
cha_switch_on1.setter = cha_switch_on_setter1;
  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);
}
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());
}
}


myaccessessory.c

#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_on1 = 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);
homekit_characteristic_t cha_name = HOMEKIT_CHARACTERISTIC_(NAME, “My Home”);
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, “Charger”),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, “Harsh Sharma”),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, “987654”),
            HOMEKIT_CHARACTERISTIC(MODEL, “Harsh Home”),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, “1.0”),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
            NULL
        }),
HOMEKIT_SERVICE(SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]){
&cha_switch_on1,
&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, “Fan”),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, “Harsh Sharma”),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, “987654”),
            HOMEKIT_CHARACTERISTIC(MODEL, “Harsh Home”),
            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, “BedRoom Lights”),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, “Harsh Sharma”),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, “987654”),
            HOMEKIT_CHARACTERISTIC(MODEL, “Harsh Home”),
            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, “Small Lights”),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, “Harsh Sharma”),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, “987654”),
            HOMEKIT_CHARACTERISTIC(MODEL, “Harsh Home”),
            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-12-123”
};


wifiinfo.h

#ifndef WIFI_INFO_H_
#define WIFI_INFO_H_
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
const char *ssid = “xxxxxx”;
const char *password = “xxxxxx”;
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


CIRCUIT DIAGRAM

WITH BOX

 

WITHOUT BOX

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *