ESP32开发(8):esp32_homekit

匿名 (未验证) 提交于 2019-12-02 23:38:02

前言

homekit是苹果公司的智能家居平台,可以将第三方智能产品对接到苹果的产品中,如iPhone,iPad等。今天,我们学习如何将一个开关通过homekit协议,加入到iPhone手机中,以实现手动控制或Siri语音控制Led灯的亮灭。
前人栽树后人乘凉,感谢git上的小哥开源自己的程序,源码地址esp32-homekit。注意:readme.md中的Setup Code是错误的,应该是053-58-197。

框架介绍

外国小哥给出了两个例程,一个普通的开关,一个温湿度传感器,经过测试,都没有什么问题。我们来一起学习这个简单的框架。


examples:是两个简单的例程,示范一下怎么用这套接口。
include:只有一个hap.h,封装了向上的函数接口和数据结构,上层开发只需要包含这一个头文件就可以了。
src:源码,不细学的话,没必要关注。
wolfssl:嵌入式SSL/TLS库服务器,和苹果服务器进行SSL加密通信。

hap.h

要学会使用HomeKit,这个hap.h是重中之重。
它含有三个枚举、两个结构体和若干个函数。我们先看这三个枚举。

enum hap_accessory_category {     HAP_ACCESSORY_CATEGORY_OTHER = 1, 	…… };  enum hap_service_type {     HAP_SERVICE_ACCESSORY_INFORMATION = 0x3E, 	…… };  enum hap_characteristic_type {     HAP_CHARACTER_ADMINISTRATOR_ONLY_ACCESS = 0x01, 	…… }; 

没必要全部贴上来,我们省略掉大部分来说。这三个枚举分别是配件、服务和特性。配件类型有19个,有开关、风扇和车库等等。值得一说的是,我看了ESP8266的HomeKit相关程序,发现配件类型有20几个,不知道啥原因这里只有19个,估计是做了其他优化。服务有35个,相比于配件就划分的更细了,主要是对传感器做了更多的扩展。特性有106个,有名字,状态,大小等等。很明显,这三者的关系是配件>服务>特性,比如SWITCH例程中的注册流程是这样的,首先注册一个HAP_ACCESSORY_CATEGORY_OTHER附件,然后再给其添加服务类型HAP_SERVICE_ACCESSORY_INFORMATION和HAP_SERVICE_SWITCHS,第一个服务类型是配件信息,用来说明一些必要的产品信息,如生产商,型号,版本号等等,总共六项,这六项就是第三个枚举中列出的特性;第二个是开关服务,开关只用了一个特性来描述,主要描述开关状态。
我们回到hap.h文件中来,继续看结构体。

struct hap_characteristic {     enum hap_characteristic_type type;     void* initial_value;      void* callback_arg;     void* (*read)(void* arg);     void (*write)(void* arg, void* value, int value_len);     void (*event)(void* arg, void* ev_handle, bool enable); };  typedef struct {     void (*hap_object_init)(void* arg); } hap_accessory_callback_t; 

第一个结构体,主要用来描述特性,依然用第一个例程来举例,例程中描述开关服务时,用到了这个结构体。

struct hap_characteristic cc[] = { 	{HAP_CHARACTER_ON, (void*)led, NULL, led_read, led_write, led_notify}, }; 

特性为HAP_CHARACTER_ON,初始值为led(false),读函数为led_read,写函数为led_write,事件函数为led_notify,这些函数都需要我们自己去实现。其实开发HomeKit的难点就是在这儿,如果没有官方支持,你根本不知道一个服务需要几个特性来描述,描述特性的函数也不知道应该写成什么样,一切只能靠自己找资料慢慢摸索……
第二个结构体是给注册配件函数用的函数指针,所有的注册服务相关函数都应该在hap_object_init()函数中实现。
后面的几个函数就是我们开发HomeKit所需要的全部接口函数了,浅显易懂,大家根据例程学习,就不多做介绍了。

测试

根据源码的readme,我们对程序进行编译下载。然后打开带有HomeKit的iPhone手机,选择一个房间,添加配件,正常情况下可以搜寻到SWITCH这么一个配件,点击输入setup code,等待配对成功,然后我们就可以通过手机来控制开发板上的灯了。如果想实现siri语音控制,请将程序中的英文名改成中文。
注:开发板默认是ESP32-DevKitC,如果不是,请自行更换引脚。

文章来源: https://blog.csdn.net/lovehanchenchen/article/details/91042011
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!