ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板
项目简介
在生活品质日益提升的今天,智能家居系统已经走进了千家万户,并逐渐成为现代生活的一部份。与此同时,一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板,已经成为众多家庭的新宠。这种高效、直观的智能化的解决方案,以一种前所未有的便捷方式,极大地提升了居住的舒适度,让智能生活变得更加轻松。
ESP-HaloPanel 是一款基于 ESP32-C2 系列模组(ESP8684-WROOM-02C-N4)开发的超低成本智能家居面板,面板中央配备一个圆形屏幕用于显示信息,屏幕周围均匀分布了 6 个触摸按键,用于控制操作。它通过 Wi-Fi 接入 Home Assistant 智能家居系统来实现对多设备的快捷控制。同时具备三个功能界面,分别用于洗衣机控制、灯光控制和温度控制。
视频展示
ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板
供电方式
ESP-HaloPanel 支持磁吸底座 、锂电池和 USB 三种供电方式。它既可以长时间吸附在墙壁上,作为智能家居的控制中心;也可以取下随身携带,当作遥控器使用。此外,通过 USB 线连接,ESP-HaloPanel 可以实现持续供电。这种多样化的供电选项不仅增强了产品的实用性,也为用户提供了更多的使用场景和便利性。
功能演示
ESP-HaloPanel 通过其触摸按键技术,为用户提供了一种直观且便捷的智能家居设备控制方式,确保了快速响应,使得智能生活体验更加流畅和高效。
- 控灯演示
相较于传统开关,ESP-HaloPanel 提供了更为灵活的灯光控制功能,用户可以轻松调节灯光的亮度和色温,以适应不同的环境和个性化需求,从而实现更加个性化和舒适的照明环境。
- UI 交互
乐鑫的先进屏幕优化方案,利用分段解码和内存映射技术,在低成本的 ESP32-C2 上实现了流畅的 UI 动画效果,同时保持了帧率的稳定性。用户可以根据个人需求,自定义 UI 界面和交互逻辑,从而为产品带来更加个性化的用户体验,这一方案在提升设备性能的同时,也为用户的创造力提供了广阔的空间。
- 模式切换
通过长按静音键,用户可以关闭按键提示音,实现在不同环境下的模式切换,享受更为宁静的操作体验。再次长按该键即可恢复提示音,操作简单,随时满足用户不同的需求。
- 睡眠唤醒
ESP32-C2 在节能方面表现卓越,支持高节能的低功耗模式。在轻睡眠 (Light-Sleep) 模式下,设备能够保持Wi-Fi连接;而在深度睡眠 (Deep-Sleep) 模式下,设备的平均电流消耗可降至仅 5 μA,有效延长电池寿命。
此外,ESP32-C2 通过检测 RTC GPIO 的电平实现快速唤醒。并结合 Wi-Fi 快连功能,支持从深度睡眠(Deep-Sleep)模式唤醒并成功建立 Wi-Fi 连接仅需 300 毫秒,为用户提供了高效且流畅的功耗管理体验。
硬件设计
ESP-HaloPanel 完整的硬件开源资料可在【嘉立创-乐鑫小铁匠】ESP-HaloPanel 获取。ESP 硬件设计指南请参考 《ESP 硬件设计指南》,
ESP-HaloPanel 的硬件系统由以下部分组成:
-
主 MCU : ESP8684-WROOM-02C-N4
-
USB & Auto Download(自动下载电路):通过 USB 连接器的 D+ 和 D- 引脚连接到 USB-to-UART (CP2101) 芯片的 USB 管脚,然后转接到 ESP8684-WROOM-02C-N4 模组的 UART0 管脚上。通过 UART0 的 DTR 和 RST 信号管脚来控制 EN 和 GPIO9 的电平状态为 ESP-HaloPanel 产品提供自动控制电路以进入下载模式,可用于固件下载,同时支持为 ESP-HaloPanel 产品进行常供电,并支持通过 USB 接口实现充电功能。如果是量产产品,自动下载电路可以省去。用户可直接使用外部的 USB-to-TTL 串口工具连接至 ESP8684-WROOM-02C-N4 模组的 UART0 (GPIO19 和 GPIO20) 管脚进行固件下载。另外,乐鑫也提供了 ESP-Module-Prog-SUB-02 烧录底板,可直接为 ESP8684-WROOM-02C-N4 模组烧录固件。
-
LDO:HE9073A33M5R 是一颗低压差稳压器 (LDO) 芯片,具有宽压输入的特性,支持的输入电压范围为 3.3V~7V, 然后将输入电压稳定在 3.3V 输出,为 ESP-HaloPanel 产品提供稳定的供电环境。
-
Power Manage(电源管理):电源管理电路支持磁吸底座的 5V 输入和 3.7V 锂电池(满电状态下为 4.2V)输入的完美切换。当使用 ESP-HaloPanel 磁吸底座时,ESP-HaloPanel 由 5V 磁吸底座供电,此时锂电池不参与供电工作,并且锂电池将由底座的 5V 经过充电 IC 进行充电。当 ESP-HaloPanel 从磁吸底座离开后,ESP-HaloPanel 将由锂电池继续供电。
-
Lithium Battery Charging(锂电池充电模块):使用专用的充电管理芯片 (TP4056),支持控制充电电流和充电状态。与电源管理电路配合工作,确保 ESP-HaloPanel 产品可以使用锂电池供电并安全充电。
-
LCD 模块:使用 ESP8684-WROOM-02C-N4 模组的 GPIO0~GPIO4 作为 SPI 接口,为 LCD 屏幕提供信号控制,用于显示文本、图形等信息,同时支持背光控制,通过一个 S8050 和 AO3401A 进行组合,然后使用 GPIO8(高电平亮;低电平灭)进行屏幕背光控制。
-
Touch Button(触摸按键):使用 BS8112A-3 电容式触摸按键控制芯片(最多支持 12 个 Touch Pad),通过 ESP8684-WROOM-02C-N4 模组的 I2C 外设管脚读取多个触摸按键的电极(KEY1 到 KEY6,其他 Touch 管脚接 GND)感应来实现按键控制开关机、菜单选择、音量加减和静音的功能。 BS8112A-3 芯片的 IRQ 管脚可用于检测 Touch Pad 的触摸状态。当任意一个按键被触摸时,IRQ 管脚为低电平;当所有触摸按键无触摸时,IRQ 管脚为高电平。在这里我们将 BS8112A-3 芯片的 IRQ 管脚与 ESP32-C2 芯片的 GPIO5 进行连接,用于将 ESP32-C2 芯片从 Deep-Sleep 模式唤醒,以实现低功耗。
-
WS2812B 模块(按键背光模块):使用 6 颗智能 WS2812B-2020 串接组成 ,通过 ESP32-C2 的 GPIO18 (RGB_CTRL) 轻松控制每个 RGB LED 的颜色和亮度,可实现炫酷的按键背光效果。考虑到低功耗需求,所有的 WS2812B 供电都可控制掉电和上电,和 LCD 的背光控制部分一样,由一个三级管和一个 PMOS 管组合控制,和 LCD 背光控制共同使用 ESP32-C2 的 GPIO8 (POWER_CTRL) 管脚控制。
-
Button(按钮):使用一个简单的物理按钮电路,连接到 ESP32-C2 芯片的 GPIO9 和 EN 管脚,用于ESP-HaloPanel 产品硬件复位和手动切换 ESP32-C2 的启动模式 (SPI Flash Boot 或 Download Boot)。如果是量产产品,按钮可以省去。
-
Buzzer(蜂鸣器模块):通过 ESP32-C2 芯片的 GPIO10 引脚控制电路中的三极管导通或截止,从而驱动蜂鸣器发声,用于播放提示音。
-
GPIO Mapping(GPIO 映射):列出了 ESP32-C2 芯片各个外设(如 LCD、 RGB LED、按键等)管脚的 GPIO 映射关系,便于开发者了解不同管脚的功能。
软件实现
基于 ESP-HaloPanel 的硬件系统构成,需要配套的软件开发以激活产品丰富的功能。 ESP-HaloPanel 的软件设计以深度集成的 ESP-IDF SDK 库为基础,并借助简洁高效的单任务组件为核心,全面实现了产品多功能展示,为用户带来了高效且可靠的软件开发体验。
- Deep-Sleep 唤醒 : ESP-HaloPanel 的省电模式通过进入 Deep-Sleep 模式来实现,同时使用 RTC GPIO5 作为唤醒源,以触发 ESP32-C2 芯片的唤醒。用户可以参考 esp-idf/examples/system/deep_sleep 例程来实现 Deep-Sleep 睡眠、唤醒的功能。此例程集成多种唤醒源方式来唤醒芯片,但 ESP32-C2 在 Deep-Sleep 模式下仅支持 RTC GPIO 和 RTC Timer 两种唤醒源。ESP32-C2 芯片支持的唤醒源方式可以参见《ESP8684 技术参考手册》中的 “唤醒源” 章节说明。如下:
-
Wi-Fi 快连: ESP-HaloPanel 通过 Wi-Fi 连接路由器,使用 MQTT 上层协议连接 HomeAssistant 云以实现对智能家居设备的远程控制。MQTT 连云的应用例程可以参考:esp-idf/examples/protocols/mqtt , 对应软件编程指南参见:ESP-MQTT
-
声音提示:ESP-HaloPanel 使用 ESP32-C2 的 GPIO10 作为 LEDC PWM 接口,通过调节 GPIO10 输出的 LED PWM 占空比来驱动蜂鸣器以实现声音控制功能。乐鑫提供的 LEDC 示例 演示了如何使用 LED PWM 接口,软件使用说明参见:LEDC 编程指南
-
触摸按键:ESP-HaloPanel 上的触摸按键通过 I2C 总线驱动 BS8112A 芯片(需参考 BS8112A 的芯片规格书 来配置触摸通道的灵敏度等参数),并借助 espressif /i2c_bus 组件轻松读取每个 BS8112A 触摸通道的触摸状态。同时使用 espressif/button 组件实现按键事件的注册。
-
UI 显示: ESP-HaloPanel 使用 ESP32-C2 的 SPI 接口来驱动 LCD 模块,通过 LVGL 图形化工具创建优美的 UI 界面。并通过移植 esp-bsp/ BSP/ esp32_c3_lcdkit 代码来实现 UI 界面显示。在 ESP32-C2 有限的内存上,为了达到更流畅的 UI 显示效果,ESP-HaloPanel 使用 espressif/esp_mmap_assets 组件来减少 ESP32-C2 芯片内存的使用,使用此组件可以在编译时自动实现图片的分割功能。把图片、字体等这些资源自动打包成二进制的 .bin 文件,然后生成头文件,并自动集成到项目,组件使用说明参见:esp_mmap_assets
使用 espressif/esp_mmap_assets 组件的优势有:
- 使用源文件进行文件管理,便于维护;
- 实现 APP bin 与资源文件的解耦,减少升级包的体积;
- 支持映射多个分区,可将资源文件按需分开管理,如音频、图片、字库等;
- Freetype、thorvg 等库提供便捷的 memory load 接口,简化调用过程;
- 针对 Flash XIP , 优化 .rodata 占用,减少对 PSRAM 的内存消耗。
-
背光控制:
由于 ESP32-C2 不支持 RMT 外设,同时可供用户使用的唯一的一组 SPI 接口也用于了 LCD 屏幕显示。在 WS2812 灯光控制应用上, ESP-HaloPanel 使用了一个 GPIO18 来模拟 WS2812 通信时序,以实现灯光调控的功能。软件实现可参考 esp-iot-solution/components/led/led_indicator 组件,文档说明参见:LED 指示灯
物料清单
- ESP8684-WROOM-02C-N4 * 1
- 1.28 寸圆形 LCD * 1
- BS8112A-3 触摸 IC * 1
- WS2812B-2020 * 6
- 蜂鸣器 * 1
- HE9073A33M5R LDO * 1
- 锂电池充电 IC TP4056 * 1
- 亚克力面板 * 1
- 其他物料(电阻、电容、MOS 管、三极管等)
3D 展示
PCB
相关文章:

ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板
项目简介 在生活品质日益提升的今天,智能家居系统已经走进了千家万户,并逐渐成为现代生活的一部份。与此同时,一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板,已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…...
CSS3新增盒子属性(三)
1、CSS3新增盒子属性 1.1 box-sizing 设置盒子的大小。 content-box:设置内容区的大小;border-box:设置盒子的总大小。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><t…...

Manus在虚拟现实仿真模拟中的应用案例分享
Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Ma…...

大数据-201 数据挖掘 机器学习理论 - 决策树 局部最优 剪枝 分裂 二叉分裂
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
Scala 的trait
在Scala中,trait是一种特殊概念。trait可以作为接口,同时也可以定义抽象方法。类使用extends继承trait,在Scala中,无论继承类还是继承trait都用extends关键字。在Scala中, 类继承trait后必须实现其中的抽象方法&#x…...

vue3官方示例-简单的 markdown 编辑器。
官方示例不能直接粘贴使用,故自己补了些代码。方便初学者学习,节省时间,提高学习效率。 1、html代码: <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta nam…...

Linux标准I/O库汇总整理
Linux标准I/O库(Standard I/O Library)是C标准库的一部分,提供了一系列用于文件输入输出的高级接口。这些接口通常比低级别的系统调用更易于使用,但也可能带来额外的性能开销。下面是Linux标准I/O库的汇总整理,包括常见…...

BGP路由优选+EVPN
BGP 的路由优选规则是一套多步决策链,用来确定在多个可行路由中选择最优的路由。BGP 是一种路径向量协议,通过这些优选规则,网络管理员可以控制数据流量的流向,确保网络的稳定性和效率。下面以一个实例来详细说明 BGP 的优选规则及…...
牛客练习赛131(未补)
A-小H学语文 题意:木板数量为m,想让mmh(min)最大,找出这几块木板 分析:让木板从大到小排序,找到最大的体积,将之前的木板按序列输出 代码: #include<bits/stdc.h> using n…...

功能更新丨AI黑科技助燃VR全景新势能
随着VR全景市场需求不断扩大, 为更好地赋能合作商业务发展, 酷雷曼积极推进产品技术迭代, 融合VR虚拟现实和AI人工智能, 重磅推出6大AI黑科技, 让VR全景内容更丰富、创作更加高效! 新功能怎么用&#…...
JavaCV学习第一课
1、 JavaCV [1] 是一款基于JavaCPP [2]调用方式(JNI的一层封装),由多种开源计算机视觉库组成的包装库,封装了包含FFmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算…...

Java第二阶段---16字符串---第一节 String
1.特性介绍 String 类位于 java.lang 包中,无需引入,直接使用即可。 String 类是由 final 修饰的,表示String 类是一个最终类,不能够被继承。 String 类构建的对象不可再被更改 示例 package com.cyx.string;public class Ex…...

<十六>Ceph mon 运维
Ceph 集群有故障了,你执行的第一个运维命令是什么? 我猜测是ceph -s 。无论执行的第一个命令是什么,都肯定是先检查Mon。 在开始之前我们有必要介绍下Paxos协议,毕竟Mon就是靠它来实现数据唯一性。 一: Paxos 协议 1…...

【网络安全初识】——互联网发展史
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络安全】 本专栏旨在分享学习网络安全的一些学习笔记,欢迎大家在评论区交流讨论💌 ipconfig:显示当…...
Windows和Linux内存共享机制
Windows和Linux内存共享机制 引言1.Windows写操作读操作 2.Linux写操作读操作 3.Shell使用 tmux 运行 write 和 read说明 引言 在嵌入式开发领域,内存共享机制作为不同操作系统间实现高效数据交换的重要手段,尤其在对实时性和可靠性要求极高的环境中更为…...
windows@命令行中获取环境变量取值不展开取值(原值)
文章目录 命令行中获取环境变量取值获取不展开的值具体实现注解 封装为函数版本1版本2 命令行中获取环境变量取值 这里主要讨论获取未展开的值本来获取未展开的值应该作为默认选项,至少有合适的api方便直接调用,但是不知道微软怎么想的,让这个任务变得不直接 获取不展开的值 …...

如何找到多平台内容爆款进行批量复刻?
为了进一步扩大品牌社媒影响力,在消费者做决策的时候,能够第一时间出现在首选位置。持续在抖音、小红书、b站、公众号等各大社媒平台,产生连续的、正向的高质量品牌曝光,是非常重要的。如何进行这种多平台品牌影响力的提升呢&…...

【UML】- 用例图(结合银行案例解释其中的奥义)
目录 一、相关介绍 作用: 组成: 关系 二、使用具体银行案例解释各组成部分的含义 1、系统 2、参与者 3、用例 4、关联关系 5、扩展关系 6、泛化(继承)关系 三、成品 一、相关介绍 作用: 用例图可以描述一个…...

浅谈UI自动化
⭐️前言⭐️ 本篇文章围绕UI自动化来展开,主要内容包括什么是UI自动化,常用的UI自动化框架,UI自动化原理等。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题…...
三、k8s快速入门之Kubectl 命令基础操作
⭐️创建Pod [rootmaster ~]# kubectl run nginx --imageharbor.tanc.com/library/ngix:latest kubectl run --generatordeployment/apps.v1 is DEPRECATED and will be rmoved in a future version. Use kubectl run --generatorrun-pod/v1 or kbectl create instead. deplo…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...