HomeKit ESP32 Control Light

快把你家的灯接入HomeKit吧其一(LED篇)

由于我住的地方没有床头没有灯的开关,每次都得下床才可以关灯。碰巧上次多买了一块ESP32,再碰巧的是大黄猫不久前给我发了个通过HomeKit控制他家ESP8266的视频。于是就有了这篇文章。
目标很明确,那就是ESP32接入HomeKit然后通过Siri控制我的开关。

准备工作 *

环境 环境 环境,配置好环境才可以开始工作,本质上最繁琐的还是配置环境。

我使用的操作系统是Windows 10 18363.719

但是真正的开发环境是位于Windows Subsystem for Linux上的Ubuntu 18.04 LTS(该操作系统可以到Windows 10自带的MicroSoft Store上进行下载)
没错,我套了一层娃。

0x01 下载esp-homekit-demo

https://github.com/maximkulkin/esp-homekit-demo.git

打开终端,进入你喜欢的文件夹,使用命令

1
git clone https://github.com/maximkulkin/esp-homekit-demo.git

下载esp-homekit-demo
clone_repo

0x02 下载esp32开发环境

cd到~并使用mkdir创建esp文件夹并cd进入
mkdir_enter
这里是由于我已经创建过了这个文件了,所以创建失败

下载esp-idf

1
git clone --recursive https://github.com/espressif/esp-idf.git

0x03 设置工具

执行命令,整个过程都是自动的,缺少的依赖工具也会自动下载,可能最大的阻碍来自网络,所以可以考虑使用代理。

1
2
cd ~/esp/esp-idf
./install.sh

该过程很耗时,请耐心等待。

0x04 设置环境变量

执行命令

1
. $HOME/esp/esp-idf/export.sh

现在一切就绪,让我们使用一个LED来进行开发环境验证以及练手吧。Here we go.

点亮你的LED

0x01 初始化并同步项目

回到esp-homekit-demo文件夹,并使用命令

1
git submodule update --init --recursive

0x02 配置wifi

在esp-homekit-demo文件夹下,有一个wifi.h.sample文件,内容为

1
2
#define WIFI_SSID "mywifi"
#define WIFI_PASSWORD "mypassword"

将其中的mywifi替换成目标Wi-Fi的SSID,mypassword替换为目标Wi-Fi的密码。
然后将文件重命名为wifi.h

0x04 挂载设备到子系统上

由于Ubuntu只是我们的子系统,所以它并不能直接检测到插在电脑上的ESP32,需要将其挂载到子系统上才可以检测到。别担心,操作很简单,只需复制命令即可。
首先要做的是把你的ESP32插在主机上,然后到Windows的设备管理器中查看端口号,这里以我的电脑为例子
check_com_port
可以看到我的ESP32是在COM3口上的,所以在终端里面执行命令

1
2
3
sudo chmod 666 /dev/ttyS3
stty -F /dev/ttyS3 -a
stty -F /dev/ttyS3 sane 115200

这样,我的ESP32就接入了子系统的ttyS3接口上

0x03 配置开发板相关参数

在终端里,回到之前的esp-homekit-demo文件夹,并使用命令

1
make -C examples/esp32/led menuconfig

选择Serial flasher config,并将端口号改为ttyS3
enter_serial_config
select_port
使用esc退出并保存

0x04 编译工程

使用命令

1
make -C examples/esp32/led all

该过程也很耗时,还请耐心等待。
当出现
build_done
说明构建顺利完成

0x05 烧录程序

为了防止之前烧录的程序产生影响,所以在每次烧录之前需要擦除flash

使用命令

1
make -C examples/esp32/led erase_flash

当出现Serial port /dev/ttyS3

Connecting…….

时候可能需要按住ESP32板子上的boot键几秒然后松手才可以正常清除和烧录

执行烧录命令

1
make -C examples/esp32/led flash

同样可能需要按下boot键几秒

0x06接入外设查看效果

LED的demo工程里面,启用的GPIO为2号,所以我们需要将LED接入2号引脚。
由于我手上没有单独的LED,所以使用一块LED灯板进行演示。
2号引脚接在LED的正极,LED的负极接在GND上。

打开你的iPhone,然后启动”家庭”,点击添加配件,选择我没有或无法扫描代码。
此时可以在附近的配件里面查看到Sample LED,选中它。虽然会提示未认证的配件,但是不用理会,电机仍然添加。然后输入代码11111111。稍等片刻即可添加成功。
现在就可以对着手机说”嘿,Siri,开灯”或者”嘿,Siri, 关灯”。
turn_off
turn_on

下期预告:快把你家的灯接入HomeKit吧其二(舵机篇)

参考资料:
在Win10的Linux子系统下搭建ESP32的开发环境

ESP-IDF 编程指南

Espressif IoT Development Framework

Build instructions ESP32