前几天没事干买了块 ESP8266 芯片玩,偶然发现 8266 可以通过刷固件接入 HomeKit,于是便做了这么个东西。

前言

最开始我是看到 B 站有刷固件接入 HomeKit 的视频,我了解了一下之后觉得有些问题,他们都用的是统一的一个 Sonoff 固件,刷入之后可以直接通过 NodeMCU D6(GPIO 12) 引脚输出高低电平,但是我甚至没找到这个固件的来源,所有视频都是草草地丢一个下载链接,告诉你下载刷进去就行了...而且这个输出引脚没法修改,后期接线的话会有一些问题。

后来我在 GitHub 上找到一个项目 RavenSystem/esp-homekit-devices,该固件可以刷入采用 8266 芯片的设备,接入 HomeKit 并提供丰富的自定义选项,而我之前在 B 站看到的固件,应该就是基于该项目修改,原本用于 Sonoff 开关的一个固件(查了一下 Sonoff 是深圳一家公司的物联网产品,主打 WiFi 继电器)。那么就可以通过该项目,很轻松地实现我们的目标。

准备

我们需要这些东西:

ESP-01
ESP-01
继电器
继电器
200V 转 5V
200V 转 5V

材料价格
ESP-016.02 元
继电器模块8 元
220V 转 5V 降压模块6.25 元
总计20.45 元

除了这些以外,还需要杜邦线若干,ESP-01 USB 转串口下载器一个。

杜邦线
杜邦线
USB 转串口
USB 转串口
NodeMCU
NodeMCU

为什么不用 NodeMCU 呢,因为开发板体积太大了,不必要的引脚和模块浪费空间,而且 ESP-01 有配套的继电器模块,8 个引脚一一对应,可以直接插在上面,由继电器给 ESP-01 供电,并通过 GPIO 0 引脚控制继电器,避免了复杂的接线。

刷机

首先给 ESP-01 刷入固件。

下载这三个文件 haaboot.bin rboot.bin blank_config.bin

6 月 5 日 更新:

今天发现 HAA 更新了他们的安装方式,之前的三个文件变成了一个 fullhaabot.bin。现在只需要下载这一个文件就可以了。

通过下载器让 ESP-01 连接电脑并进入烧录模式(flash-mode)。

下载

根据下载器所使用的 USB 转串口芯片安装对应的驱动程序。完成之后在 设备管理器 - 端口 中应该能看到对应设备,记录下设备名之后所对应的串口号。

设备管理器

鼠标右键点击 属性 - 端口设置,在 位/秒(B) 选项中修改当前的波特率,默认应该为 9600,为了下面脚本方便这里改为 115200

波特率

这里我们采用 esptool.py 来刷入固件,电脑需要有 Python 环境。

安装 esptool.py:

pip install esptool

然后抹除 ESP-01 的闪存:

esptool.py -p /dev/<your_ESPPort> erase_flash

这里的 /dev/<your_ESPPort> 对应刚才在设备管理器中看到的端口号 COMx。

最后刷入刚才下载的三个文件:

esptool.py -p /dev/<your_ESPPort> --baud 115200 write_flash -fs 1MB -fm dout -ff 40m 0x0 rboot.bin 0x1000 blank_config.bin 0x2000 haaboot.bin # 更新之后用下面的方式刷入新文件

现在只需要刷入这一个文件:

esptool.py -p /dev/<your_ESPPort> --baud 115200 write_flash -fs 1MB -fm dout -ff 40m 0x0 fullhaaboot.bin

配置

完成之后,ESP-01 会建立一个 SSID 为 HAA-XXXXXX 的开放 2.4GHz WiFi 热点,连接它,等待几秒钟,就会跳转到 Home Accessory Architect 的配置页面。

Home Accessory Architect

这里我们需要写一个 JSON 来配置 ESP-01 的功能,HAA 提供了相当丰富的物联网设备类型供我们选择,这里我们选择相对简单的的开关(Switch)来配置。

将 wiki 中提供的范例 JSON 稍加修改:

{
  "c": { "l": 1, "b": [{ "g": 2, "t": 5 }] },
  "a": [{
    "t": 1,
    "s": 1,
    "0": { "r": [{ "g": 0, "v": 1 }] },
    "1": { "r": [{ "g": 0, "v": 0 }] },
    "b": [{ "g": 2 }]
  }]
}

这里表示了一个基本类型的开关("t": 1),通过 GPIO 0 控制继电器,因为这个继电器模块是 GPIO 0 低电平时闭合,所以在下面的 "0" 表示开关关闭的选项中 "v": 1 表示高电平,而 "1" 与之相反。LED 指示灯定义为 GPIO 1,按钮定义为 GPIO 2,"s": 1 表示通电后默认为开关打开状态。

详细的配置规则可以参阅原项目的 Wiki

将 JSON 填入配置页面,并在下方连接 WiFi,注意 ESP-01 仅能连接 2.4GHz 的 WiFi。

之后点击保存并等待 7 分钟左右,完成后 LED 会亮起几秒钟。

在设备安装或者更新的时候,可以在 macOS 或 GNU/Linux 设备上通过下面的命令检测日志获取设备状态:

nc -kulnw0 45678

接线

将 220V 的火线与零线接到 220V 转 5V 降压模块上。

降压模块输出 5V 电接入继电器的 VCC 与 GND。将 ESP-01 插在继电器上,因为该继电器自带一个 5V 转 3.3V,所以可以直接给 ESP-01 供电。

将继电器的常开端(NO)与通用端(COM)与灯泡和 220V 连接,当继电器闭合时即形成回路点亮灯泡。

接线

添加 HomeKit 设备

在 iOS 设备中打开「家庭」App,通过下方的设置代码,按照正常步骤添加新配件。大约等待 30 秒即可添加完成。

QR-Code
QR-Code
Normal Code
Normal Code

现在我们就可以在 iOS 设备上通过 HomeKit 控制灯泡了。

添加配件
添加配件
设置配件
设置配件

家庭
家庭
Siri
Siri

Last modification:August 13th, 2020 at 10:05 pm
If you think my article is useful to you, please feel free to appreciate