用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

硬核精选 用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

2026-10-26 16:22:24 36点赞 206收藏 28评论

一、前言:

我家里做智能家居多年了,先后入手了Aqara S1E、领普S2、小米智能家庭面板等智能开关,这些智能开关家庭状况显示不够全面,不能按需定制,都不是很好用。

前段时间我刚用ESP32开发板完成了智能增高架,积累了一些开发经验,接着用ESP32开发板花了半个月时间打造出了一块真正的"智能家居控制屏",个人感觉特别好用,特地写了这篇文章分享打造过程以及使用体验,本文较长,看完本文你将大致了解到ESP32开发板的构造、用途、号称0代码ESPhome固件的打造过程、有什么坑以及成品实际使用体验和建议。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

一、前言

二、智能家庭控制屏成品展示

三、ESP32开发板硬件参数和拆解

四、esphome开发环境搭建

五、固件开发、刷写流程

六、接入Home Assistant

七、ESPhome固件实际体验和缺点

八、总结与意见

二、智能家庭控制屏成品展示

如图,智能面板是标准的86开关面板规格,长宽都是86mm,面板带4寸IPS触摸屏,480X480分辨率,可以安装在墙壁86底盒上,也可以取下来放在桌面连接USB供电使用。之前看到有些朋友把小米智能面板放在桌面上当控制开关,需要接上220v电源,这个放桌面更方便更安全,甚至还可以接上锂电池移动使用。

面板整体设计我依然是走的简洁风格,没有任何图片元素,界面上的图形全是图标字体,毕竟ESP32性能有限,不整那些花里胡哨的界面可以降低系统负担,提高流畅度。首页有大字时钟和天气信息,时钟下边是自定义提醒栏,多行可以滚动显示;6个卡片用来显示比较重要的空气质量、水质、电费余额等信息,所有信息都是取自于Home Assistant实体。首页内容很紧凑,但信息内容比之前买的任何一款家庭屏都丰富。这些内容全部都可以自定义,加上几个按钮直接控制也很简单。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

目前一共做了6个页面,理论上可以无限扩充,也可以设置开机后默认显示哪一页。

“家庭信息页”是主页智能家信息的补充,这里可以显示更多信息,浏览家里的动态,显示内容可以自定义且可以滚动,比如扫地机器人状态、摄像头状态都可以加进去。有人无人是通过人在传感器判断的,这个很实用,瞄一眼看看卫生间是否有人再说,避免空跑。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

控制普通智能开关和灯的话用按钮就可以了,比如我这个控制页面放了6盏灯+色温和亮度滑条,还可以拖动开关窗帘,可以根据家里的设备来定制,设备多的话可以每个房间做一个页面。图上的继电器是开发板的物理开关,无网的时候也可以控制。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

像空调、热水器这类功能较多的设备,就单独建了一个页面进行控制,比如我这个燃气热水器控制就很实用,每个人洗澡的温度都不一样,洗澡前不需要跑到阳台去调温度了:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

场景就更实用了,提前编好了9种场景,比如把这个面板安装在门口,出门时点一下离家,自动关灯和其他需要关闭的设备:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

同时我这块只能智能控制屏还可以通过蓝牙连接给墨水屏推送内容,支持一推N,可以大大节省布置信息屏的成本。我准备给冰箱上贴一块墨水屏,开关冰箱时就能看到是否有快递要取、电费是否充足的信息。总之这块屏的优势是以后想到什么新功能,可以随时自己加。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

三、ESP32开发板硬件参数和拆解

接下来拆解一下这块ESP32开发板。原本我是计划用增高架那款2.8寸开发板+3D打印面板做智能屏,后来发现有卖面板成品,带4寸电容触摸屏,价格也只要一百出头,且内置了继电器,做好固件就能用了,于是买了回来试试。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

标准86面板设计,背面可以看出来最多支持3路开关,我选的是1路的,3路的贵很多,且用不到3路,家里还剩好几个智能开关都还没地方装呢。外壳因为照片缘故看起来可能像金属,实际是纯塑料的,且做工质感一般。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

面板和强电部分是可以分离使用的,可以单独拿面板放在桌子上控制智能设备,不一定非要装在墙上:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

侧面有个USB-C口和TF卡插槽,第一次烧录固件只能走USB口,供电的话也可以接在背后串口插针上,也可以用USB供电,只是USB口在侧面不是很方便。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

面板电路如图,我顺手做了一下标注。扩展接口还是挺全面的,且在背板上留了口,方便扩展和调试。仔细看了下板子上没有集成麦克风,需要语音控制的话就得单独接外置麦克风,不过我房间里有小爱音箱,就不需要面板来收语音了。

板子的核心规格如下:板子完整型号是ESP32-S3-4848S040,处理器是ESP32-S3,双核240MHz,带WiFi 和蓝牙BLE,16MB FLASH、8MB PSRAM(内存),屏幕是ST7701,480×480分辨率,RGB并口16bit,触摸是GT911电容式,I2C地址0x5D。板子目前资料较少,商家提供不了任何参数和图片资料,全部都得自己折腾。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

继续看强电部分。强电板做工就明显差很多了,焊点像是手工焊接。板子上白色长条是保险丝,作用是过流保护;我买的单路控制,L2和L3进线端子没有焊,但三路驱动齐全,每组一个MOS,对应三路继电器:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

强电板背面是继电器和RPDZN5W6变压模块,从PCB设计可以看出强弱电是有分离的,强电端子单独一区,弱电控制元件全在另一面,没有强弱电走线交织。强弱电在同一块PCB上共板,但没有专门的铣槽/隔离带来加大爬电距离,家用 220V继电器板这是常规做法,够用但不算工业加强绝缘,结论是上墙用没啥问题。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

四、ESPhome固件简介和开发环境搭建

开发板只是内置了个Demo,Demo的控件做得花里胡哨的,但很卡顿,且不能用,需要自己刷固件。原本打算和增高架ESP32一样从零开始写的,后来看到有一种ESPHOME固件很流行,号称“0代码”:它依赖Home Assistant提供服务,用户像“搭积木”一样把需要控制设备按照需求添加进固件即可使用,我整理了一下这个固件的优点,大致做了个表:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

既然是现成的,且有这么多优点,于是拍板决定用ESPhome固件。讲解一下开发过程,给想折腾的朋友先了解评估一下自己能不能搞。

搭建开发环境

首先需要搭建开发环境。ESPhome大致有3种开发方式:

1、搭建Python开发环境,这个对于开发者来说很简单,非开发者就不推荐折腾了。

2、使用Home Assistant里的ESPHOME插件开发,添加插件后就可以使用网页开发,但只有HA OS和HA Supervised安装方式的Home Assistant才有插件(Add-on)功能,Docker安装的HA无法使用。

3、使用Docker搭建。这个最方便,几行命令搞定安装在NAS Docker里,不影响现有环境,不想要了直接点删除,所以这里就以Docker搭建为例讲解。

首先在NAS里打开SSH,连接后按顺序输入以下命令,每次一行(注意看截图,发文时斜杠可能会被吞掉):

sudo docker run -d --name esphome -p 6052:6052

-v /放置docker文件的目录/esphome-config:/config

esphome/esphome

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

代码跑完就可以在docker里多出了一个esphome容器,并且已经自动运行了:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

在浏览器里输入你的nas ip+端口6052,就可以看到如下中文开发界面,根据新手引导一步创建即可。要选对开发板型号,比如我这块是4848s40,找到后点选择,后续还有输入wifi密码等流程,照着填就行了。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

注意“使用所有推荐组件进行安装”一定要勾选,否则屏驱动、背光引脚、屏RESET/DC引脚等等全都要你手动写:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

固件开发界面如图,右侧是代码区,可以看到引脚等配置都已经写好了,这时esp32屏幕就能被点亮了。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

五、固件开发、刷写流程

在右侧编辑器里末尾填上以下代码(以最新版esphome为准),做屏幕点亮测试。注意,代码必须严格遵守缩进规则:

lvgl:

displays: tft_display

touchscreens: tft_touch

widgets:

- label:

text: "Hello smzdm"

align: center

width: 200

height: 50

接着点击下方的[安装],生成固件,顺便进行第一次刷机。第一次刷机必须通过usb连接,由于ESPhome设备构建器是运行在Docker上,直接插到nas的USB口需要进行映射,所以一般选[高级选项]、[下载固件二进制文件],生成固件:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

等待编译完成。看具体网络环境,从GitHub拉ESP-IDF tools可能会很慢,有时需要多试几次,或者想办法。顺利的话看到编译完成,点[下载固件]:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

用esp等烧录工具把刚才下载的固件烧录到面板上,烧录成功的话就能看到白屏和“Hello smzdm”字样了:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

第一次烧录成功之后,可以看到设备构建器里esphome显示在线了~意味着今后写了代码直接点安装就可以无线OTA到esp面板里~

再举个例子,刚才写的“hello smzdm”太小了,想把字体加大,且显示成红色,把代码替换成下面的内容即可。可以看到新代码的不同点:不能直接写字体尺寸,需要先造一个id为big50、尺寸为50的字体,字体文件调用Google Fonts,然后要在标签里引用它:

font:

- id: big50

size: 50

file: "gfonts://Roboto"

lvgl:

displays: tft_display

touchscreens: tft_touch

widgets:

- label:

text: "Hello smzdm"

align: center

width: 400

height: 80

text_font: big50

text_color: red

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

六、接入Home Assistant

要和Home Assistant配对可以控制设备。第一次编译烧录后,HA里会弹出 "发现新设备 ESPHome",如果没有弹出,就在[设置]、[设备与服务]、[设备]里手动搜索[esphome],填入面板IP地址:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

填入API KEY,在代码编辑器顶部代码API里可以找到,复制过来即可:

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

顺利的话就会看到ESPHome设备常驻HA里了,配对成功。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

接下来再做个演示,演示如何在esp32面板上控制HA里的智能灯开关。拷贝如下代码到编辑器(完整复制的话把刚才的hello smzdm代码删除),button表示绘制一个按钮,xy值是按钮的坐标,text是按钮显示的文字,暂时没有中文字体,所以先输入英文试试。on_click表示点击按钮后触发的事件,entity_id后填入智能灯开关的实体id即可,实体id在HA设备里获取。烧录到esp32,点击按钮就能开关灯了。

lvgl:

displays: tft_display

touchscreens: tft_touch

widgets:

- button:

id: my_btn

x: 100

y: 200

width: 200

height: 80

text: "click me"

on_click:

- homeassistant.service:

service: switch.toggle

data:

entity_id: 灯开关实体id

以上只是最简单的例子,要实现开发完整的固件还需要做很多工作,不断的排查,这里就不能一一介绍了,要不然再写十篇都写不完,稍微知道原理和大概流程就行了。

七、ESPhome固件实际体验和缺点

最后谈谈这个固件的实际体验吧。

1.固件开发无法实现“0代码”,有一定门槛。

举个最简单的例子,比如我首页显示的“空气质量10 优”,需要自己写代码做判断,因为我的空气净化器只返回了PM2.5=10这个值,这个值你不做判断的话就只显示10这个数字,就只能自己写一段lambda代码块去做判断,比如低于35就输出“优”。lambda代码只能用c++语言编写,因为ESPHome的yaml文件只是"配置壳",里面用!lambda包起来的那段,会被ESPHome原样塞进生成的C++ 功程,用C++编译器(ESP-IDF/Arduino工具链)编译烧进ESP32。用到lambda代码块的地方特别多,像人在人不在状态、电费余额低提醒等等都需要用到。遇到特殊协议时也只能被迫写C++代码,比如我上面提到的用esp32蓝牙连接墨水屏,把智能家居信息推送到墨水屏,都是用lambda实现的。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

2.界面UI无图形化,需要摸黑像素级编写。

这个上边提到过,你需要画标签和按钮的时候,只能写YAML指定标签坐标位置,还要给它定义背景颜色、文字,不像图形化编程界面那样拖一个按钮控件进去就OK了。这种摸黑式操作特别累,特别是对齐图标和文字时,只能反复烧录调试,通过像素级精调实现。虽然LVGL官方有个LVGL UI Editor可以实现可视化,但它生成的是原生C工程代码,没办法给ESPhome用。比如我上面的“场景”页面照片就可以看到文字还有一点没对齐,暂时懒得管了,有空再弄。

3.固件依赖Home Assistant

个人感觉ESPHome最大的问题是必须依赖Home Assistant服务,且与Home Assistant进行强绑定,离了HA智能面板将一无是处,连基本信息都读不到;设备配置不灵活,需要在写代码阶段就将设备硬绑,一点点改动都需要重新刷写固件,这样写好的固件没法分享给其他人用,这也是目前这个固件国内比较冷门、设备不好卖的主要原因,每个人都需要重复造轮子。我尝试过用网页配置等方式保存设置、进行设备动态绑定,虽然实现了一部分,但后来发现实施起来太麻烦了,有些设置需要写入固件、有一些需要在HA实体里改、有一些需要手动改HA的configuration.yaml文件,东一块西一块,时间长了自己都会把架构忘光,需要自己写详细备注,维护成本高。

4.lambda不是万能的,一些想法无法实现

上面可以通过lambda代码块加入C++代码写ESPhome不具备的功能,比如给墨水屏推送数据,但lambda也有局限,遇到需要几百上千行的模块执行效率极低,很容易耗光资源卡死面板,且lambda代码只能通过事件触发。遇到复杂交互、高性能、第三方硬件,灵活度不如直接PlatformIO/Arduino原生写。

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~

八、总结

通过本文你应该对ESP32开发板和ESPhome固件有了一定了解,总结如下:

这套方案的本质是:用一百出头的成品esp32带屏控制板、加上ESPHome自定义固件,把Home Assistant里的家庭数据做成一块自己想要的控制面板。它不是开箱即用的商品,更像是一个可以无限DIY的控制中枢。

适合谁玩:已经有24小时开机的NAS或服务器、跑着Home Assistant、愿意折腾YAML的人。成品台墙两用、功耗低、响应快,做出来的界面比任何量产家庭屏都更贴合自己家。

不适合谁:不想碰代码、只想买回家上墙即用、家里没有Home Assistant的人。ESPHome号称“0 代码”其实是营销话术,真实情况是“配置搭积木+关键地方写C++”,界面要靠像素级坐标一点点调,离了HA面板就是一块砖。

我的建议:先从Docker装 ESPHome、用板载组件点亮一块屏开始跑通流程,再慢慢加卡片和按钮,别一上来就想做全套。这套方案国内还小众、资料少,最大的成本不是钱,是折腾时查不到答案、要自己啃的那份耐心。暂时不想折腾的朋友,提供个0成本方案:自己搭一个HA仪表盘,加入需要关注的信息、需要控制的设备,并且编一些场景和自动化条目,用淘汰的平板或者手机浏览器全屏显示即可(我之前就这样用了一年)~

用ESP32开发板打造智能家居控制屏~ESPhome固件实战~
展开 收起
28评论

  • 精彩
  • 最新
  • 大部分属于感动自己,用到最后都是极简模式,能靠嘴的不动手,能动手的不用眼,万不得已还得看还得动手的才勉为其难看一下,因此我的结论是这类面板属于感动自己实则意义不大

    校验提示文案

    提交
    设备多想集中控制还是很方便的,你看很多人都直接把小米智能开关接220v摆桌面上控制了

    校验提示文案

    提交
    ha我也用,但核心是生态聚合和流程自动化,甚至我用它实现服务器的风扇“变频”控温控速。只是中控面板之类的其实越用越繁琐,越不爱用。有自动化指令之后,都是语音控制,或者类似米家的灵动开关,而之前社区看起来炫酷的全家 3d 建模和动态响应,其实就做的时候帅气,后面都懒得看了🌚不如直接小爱同学,看电影

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 语音控制嘛

    校验提示文案

    提交
    大半夜你在卧室里语音控制你老婆不骂你啊,而且很多设备不是米家的,控制不到

    校验提示文案

    提交
    收起所有回复
  • 求大佬开源

    校验提示文案

    提交
    可以的,只是这个要绑定ha,需要改的地方多,很繁琐。我目前正在弄,到时写好备注,把文件扔给ai,让ai去操作,省的反复调试界面

    校验提示文案

    提交
    收起所有回复
  • 有没有大墨水屏可以动态显示图片,当挂画摆设?

    校验提示文案

    提交
    有的,只是普通墨水屏显示图片效果不佳,颜色数有限

    校验提示文案

    提交
    收起所有回复
  • 我这个好像和你一模一样 你知道后面那些接口都是接什么的吗

    校验提示文案

    提交
    后面接口你看文里有张图标注出来了

    校验提示文案

    提交
    哦 原来你把盖拆了 你试过加电池吗

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 要100多?领普的智能面板也没贵多少吧,可以加个3D打印的底座变成桌面版,已经是成熟的方案了。当然,支持折腾!不在于结果在于享受过程。 [赞一个]

    校验提示文案

    提交
    领普的有一个,他那点功能咋能和我这个比 [脸红]

    校验提示文案

    提交
    收起所有回复
  • 请问一下这个有yaml代码分享一下吗

    校验提示文案

    提交
    可以的,稍后点我写好所有备注

    校验提示文案

    提交
    谢谢老师

    校验提示文案

    提交
    收起所有回复
  • 正好近期比较忙,等大佬开源后我再抄作业 [高兴]

    校验提示文案

    提交
    哈哈,确实啊

    校验提示文案

    提交
    可以的

    校验提示文案

    提交
    收起所有回复
  • 大学是电信院的,没想到现在跑马灯都不会弄了

    校验提示文案

    提交
  • 好是好 但是新手有米家 直接手机操作 不想搞得直接门口装个智能面板的事

    校验提示文案

    提交
  • 这个是实打实的

    校验提示文案

    提交
  • 这个最近也太智能了吧

    校验提示文案

    提交
  • 这信息集成度是真高啊

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
京东京享红包
距结束::
领京东现金红包 天天领3次 最高26888元
红包按钮
最新文章 热门文章
206
扫一下,分享更方便,购买更轻松