在前一篇内容中,我大致确定了整个智能家居系统的解决方案:Home-assistant 加上 ESP系列芯片

既然确定了大致上的方案,那就得做一个例子来验证一下原理之类的了,手头上暂时也没啥东西,就拿 ESP32S2 这块板子上的 RGB 灯来做一个小 demo 吧。搞一个能在手机上、电脑上控制亮度、颜色的小灯。

ESP-IDF

ESP 的开发环境是真的让我有被爽到,主流编译系统的支持,不用绑定臃肿难看还不实用的各种花里胡哨的 IDE 。

因为我的主力开发机是一台装了 Arch Linux 的笔记本,所以只展示 Arch 下的安装。( Windows 还是算了,怎么会有人用 Windows 做开发?)

ESP-IDF 现在并没有进入官方仓库,只在 AUR 上。安装 esp-idf 即可。 如果想体验开发版(多了一些功能组件),可以安装 esp-idf-git

然后添加 IDF_PATH=/opt/esp-idf 到环境变量之中,不然有些依靠环境变量的工具无法使用。使用 ESP-IDF 的开发工具,还需要将它的工具导入环境变量,如编译器等等,但幸好官方已经提供了方便的导出脚本,只需要执行 . $IDF_PATH/export.sh 即可。但每次输入这么多还是很麻烦,在 ~/.bashrc 中添加如下内容,为 . $IDF_PATH/export,sh 增加一个快捷方式

alias get_idf='. $IDF_PATH/export.sh'

这样每次只需要输入 get_idf 即可导入 ESP-IDF 的开发环境。

IDE

IDE 的选择并没有那么严格的限制,有了 ESP-IDF 的自带的 CMake 支持,你可以使用任何现代 IDE 进行开发(体验好太多了好吧,我都要犯选择困难症了)

为了方便我还是使用 VSCode ,还有 Clion。不过在使用 IDE 的时候,有的时候你可能需要提前加载 ESP-IDF 的开发环境,不然 CMake 有可能无法识别,CMake 无法加载可能就没法使用 IDE 的现代功能。

Home-assistant

我觉得这个可以单独写一写,毕竟需要注意的东西还是蛮多的。

先简单写一些东西给下面做一做铺垫。

我是坚定的云原生用户(指docker),当然 Home-assistant 也要用 Docker 安装。

version: '3'

services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable
    depends_on:
      - mqtt
    volumes:
      - ./config:/config
      - /etc/localtime:/etc/localtime:ro
    restart: "no"
    network_mode: host

  mqtt:
    container_name: emqx
    image: emqx/emqx
    restart: "no"
    network_mode: host

在这使用 emqx 作为 mqtt 后端,Home-assistant 也有自带的集成 mqtt broker,但调试起来可能就麻烦一些,反正也不是最终版本,先用 emqx 来做一个测试。

配置的话就不细说了,装了 mqtt 的插件就行了,更详细的内容在下面会写。

Code

就像上一篇文章里说的,芯片选型为 ESP32,因为我手头上只有 ESP32S2,所以就拿它来摸鱼了,大致看过 ESP 的文档,两个芯片共有的外设,代码应该是都通用的。

具体的代码请看esp32-mqtt-rgb-light

home-assistant-cap1

console-cap1

具体效果不错,可能稍微有那么一点点延迟,想个办法优化掉?

代码的话,也不算难,倒是 Home-assistant 的负载格式调了很长时间,我都不知道哪有问题(

ESP 的文档细看也有点拉,(明明是中国企业但文档却没有中文),很多只有看例程才能知道具体用法。

用的话先修改一下配置 idf.py menuconfig,目前各种连接信息都是写死的,等之后会做一个配网的功能。EspTouch 也看了看,有点简陋,到时候看看重写一个。

立了好多Flag(

HA 配置文件

config/configuration.yaml 中添加如下内容

# 增加 emqx 的支持
mqtt:
  broker: localhost
  port: 1883
  username: admin
  password: public

# 添加我们做的测试的 RGB 灯
light:
  - platform: mqtt
    name: "test RGB"
    schema: json
    state_topic: "test/rgb_light"
    command_topic: "test/rgb_light/set"
    brightness: true
    brightness_scale: 100
    color_mode: true
    supported_color_modes: ["hs"]

最后修改日期: 2021年6月21日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。