GithubHelp home page GithubHelp logo

isabella232 / esp-apple-homekit-adk Goto Github PK

View Code? Open in Web Editor NEW

This project forked from espressif/esp-apple-homekit-adk

0.0 0.0 0.0 56 KB

This is a port for Apple's Open Source HomeKit ADK

CMake 2.72% C 97.28%

esp-apple-homekit-adk's Introduction

ESP Apple HomeKit ADK

HomeKit is a framework developed by Apple for communicating with and controlling connected accessories in a user’s home using iOS devices. This project is a port of Apple's Open Source HomeKit ADK for ESP32 and ESP32S2. This can be used by any developer to prototype non-commercial smart home accessories.

You can also check out the ESP HomeKit SDK here which is Espressif's implementation of the HomeKit Specifications.

Note: If you want to use HomeKit for commercial purposes, please check here.

Get Started

Set up Host environment

Set up the host environment and ESP IDF (master branch) as per the steps given here. The commit that was used for testing is: 012b111

Set up MbedTLS

ESP-IDF currently uses MbedTLS 2.16.x, whereas HomeKit ADK requires 2.18. A branch mbedtls-2.16.6-adk is being maintained here which has the required patches from 2.18, on top of 2.16.6. To switch to this, follow these steps:

$ cd $IDF_PATH/components/mbedtls/mbedtls
$ git pull
$ git checkout -b mbedtls-2.16.6-adk origin/mbedtls-2.16.6-adk

Get esp-apple-homekit-adk

Please clone this repository using the below command:

git clone --recursive https://github.com/espressif/esp-apple-homekit-adk.git

Note the --recursive option. This is required to pull in the HomeKit ADK repository into esp-apple-homekit-adk. In case you have already cloned the repository without this option, execute this to the pull in the submodule: git submodule update --init --recursive

Compile and Flash

You can use esp-apple-homekit-adk with any ESP32 or ESP32-S2 board. We have provided a Lightbulb example for reference. Compile and flash as below:

$ cd /path/to/esp-apple-homekit-adk/examples/Lightbulb
$ export ESPPORT=/dev/tty.SLAB_USBtoUART #Set your board's serial port here
$ idf.py set-target <esp32/esp32s2>
$ idf.py menuconfig # Set Example Configuration -> WiFi SSID/Password
$ idf.py flash
$ esptool.py -p $ESPPORT write_flash 0x340000 accessory_setup.bin
$ idf.py monitor

As the device boots up and connects to your Home Wi-Fi network (configured using the menuconfig), you will see some logs like these:

I (2788) wifi station: connected to ap SSID:myssid password:mypassword
1970-01-01'T'00:00:02'Z'	Default	[com.apple.mfi.HomeKit.Core:AccessoryServer] Version information:
libhap: Unknown
  - Version: Internal (May 12 2020 02:42:49) - compatibility version 7
Using platform: ESP32
  - Version: v4.2-dev-1485-g1ad1791df7-dirty (May 12 2020 02:42:38) - compatibility version 7
  - Available features:
    - Key-Value store
    - Accessory setup manager
    - Service discovery
1970-01-01'T'00:00:02'Z'	Default	[com.apple.mfi.HomeKit.Platform:Clock] Using 'gettimeofday'.

Add acccessory in the Home app

Open the Home app on your iPhone/iPad and follow these steps

  • Tap on "Add Accessory".
  • Choose the "I Don't Have a Code or Cannot Scan" option.
  • Tap on "Acme Light Bulb" in the list of Nearby Accessories.
  • Select the "Add Anyway" option for the "Uncertified Accessory" prompt.
  • Enter 11122333 as the Setup code.
  • You should eventually see the "Acme Light Bulb added" message.
  • Give a custom name, assign to a room, create scenes as required and you are done.

Change the Setup Code

The setup code of 11122333 was encoded in the accessory_setup.bin image flashed at 0x340000. This was generated using Apple's tools and ESP IDF's nvs partition generator. Steps as follows:

$ cd /path/to/esp-apple-homekit-adk/homekit_adk
$ make tools
$ cd Tools/
$ ./provision_raspi.sh --category 5 --setup-code 111-22-333 --setup-id ES32 Lightbulb

This will create the setup info and setup id files as below

~# tree Lightbulb
Lightbulb
├── 40.10
└── 40.11

Note: Compiling the ADK Tools and using provision_raspi.sh is out of scope of this project. If you face any issues with that, please report directly to Apple on GitHub.

Now, generate an nvs image as below:

$ cd Lightbulb
$ cp ../../../tools/accessory_setup/accessory_setup.csv .
$ python $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate accessory_setup.csv accessory_setup.bin 0x6000

Flash this using the same command given above.

$ esptool.py -p $ESPPORT write_flash 0x340000 accessory_setup.bin

If you want to change the category, setup code or the setup id, change the values while running provision_raspi.sh. The script also generates a QR code that you can directly use for adding the accessory using the Home app.

Resetting HomeKit Pairing

The accessory pairing information is stored in the NVS (Non Volatile Storage) partition. Once paired, the accessory cannot be paired again, without clearing this pairing information first. It can be done as below:

$ esptool.py -p $ESPPORT erase_region 0x10000 0x6000

Resources

esp-apple-homekit-adk's People

Contributors

cleobis avatar izmmisha avatar shahpiyushv avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.