最近把阳台养的花整理了一下,因为老是忘了给花浇水,在广东这种天气下,养的花时不时都干死了,买了点水管,搞了一个浇灌系统,目前用智能插座控制小水泵的工作,个人不太喜欢,准备用一个电磁阀来直接接自来水浇灌.

电磁阀可以直接接在阳台的出水上,考虑通过一个模块来做个开关,最好是能直接通过siri就能控制,手上刚好有闲置的esp32模块和继电器,看起来可以直接搞起来.既然材料都有了,就看看固件怎么搞.

开源试探

在github看了很多开源的esp32的homekit解决方案,我最先看到的是在Arduino下的Arduino-HomeKit-ESP,体验过程中,发现乐鑫还开源了他们的homekit方案esp-idf,那肯定要试试的.

安装准备

我都是在MacOS下操作的,其他的平台可能初始安装的软件不太一样,可以参考官方文档.

ESP-IDF使用 macOS 上默认安装的 Python 版本,我们需要安装CMake 和 Ninja 编译工具:

brew install cmake ninja dfu-util

如果遇到以下错误:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

则必须安装 XCode 命令行工具,可运行 xcode-select --install 命令进行安装.

获取ESP-IDF代码

打开终端,切换ESP-IDF工作目录,使用 git clone 命令克隆远程仓库, 不建议直接使用master分支的代码,我使用的是v4的最新稳定版.

1
2
3
mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.2 --recursive https://github.com/espressif/esp-idf.git

设置ESP-IDF

除了ESP-IDF本身,还需要安装ESP-IDF使用的各种工具,比如编译器、调试器、Python 包等.

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

通过一次性指定多个目标,可为多个目标芯片同时安装工具,如运行 ./install.sh esp32,esp32c3,esp32s3。 通过运行 ./install.sh./install.sh all 可一次性为所有支持的目标芯片安装工具.

设置环境变量

建议在profile里面配置一个别名,方便以后用的时候可以快速开始.
复制并粘贴以下命令到 shell 配置文件中(.profile.bashrc.zprofile 等).

1
alias get_idf='. $HOME/esp/esp-idf/export.sh'

通过重启终端窗口或运行 source [path to profile],如 source ~/.bashrc 来刷新配置文件.以后可以在任何终端窗口中运行 get_idf 来设置或刷新esp-idf环境.

构建第一个Demo

ESP-IDF的Demo我就不跑了,我直接使用乐鑫的另外一个仓库esp-homekit-sdk,这也是我们最终目标.
下载代码到esp工作目录.

1
2
cd ~/esp/
git clone --recursive https://github.com/espressif/esp-homekit-sdk.git

直接到sdk的examples里面,构建一个lightbulb测试.

1
2
3
idf.py set-target <esp32/esp32s2/esp32c3>
idf.py menuconfig
idf.py -p [port] erase-flash flash monitor

erase-flash可以确保每次改动的配置都能正常应用,现在应该就能刷入刚才构建的固件了.