1. 项目概述与硬件准备:ESP32智能窗帘的起点
大家好,我是你们的老朋友。今天咱们正式开启《ESP32智能窗帘》这个项目。说实话,每次带学生做这个项目,我都挺兴奋的——因为它把光感、电机控制、无线通信全串起来了,特别适合练手。
这一章,我们先搞清楚两件事:智能窗帘到底怎么工作?以及我们需要哪些硬件?别急着焊电路,先把原理吃透,后面才不容易翻车。
1.1 智能窗帘的工作原理
说白了,智能窗帘就是让窗帘自己知道什么时候该开、什么时候该关。我最早做这个项目时,用的是最简单的光控方案——天亮了就开,天黑了就关。但后来发现,用户的需求远不止这么简单。
咱们这个课程要实现两个核心功能:
- 光感跟随模式:窗帘根据环境光照强度自动调节开合角度。比如,阳光太强时自动关小,阴天时自动开大。
- 场景模式设计:预设几种场景(比如“起床模式”、“观影模式”),一键切换窗帘状态。
你想想看,这两个需求其实对应了两种控制逻辑:
- 闭环控制:光敏电阻采集光照 → ESP32读取数据 → 计算目标角度 → 驱动舵机转动 → 光照变化 → 再次采集... 这是一个典型的反馈系统。
- 开环控制:用户按下场景按钮 → ESP32直接发送固定角度指令 → 舵机转到预设位置。没有反馈,但胜在简单可靠。
嗯,这里要注意:实际项目中,我们往往把两者结合起来。比如场景模式里也加入光感校准,防止“大白天开窗帘”这种尴尬情况。
1.2 核心硬件介绍
好,原理讲完了,咱们看看手里要拿什么家伙。我列个清单,你对照着准备:
| 硬件名称 | 数量 | 作用 | 备注 |
|---|---|---|---|
| ESP32开发板 | 1块 | 主控芯片,处理数据、控制舵机、连接WiFi | 推荐ESP32-DevKitC或NodeMCU-32S |
| 光敏电阻模块 | 1个 | 采集环境光照强度 | 带模拟输出(AO)的模块更方便 |
| 舵机SG90 | 1个 | 驱动窗帘开合 | 180度版本即可,扭矩够用 |
| 杜邦线 | 若干 | 连接各模块 | 公对母、公对公各备一些 |
| 面包板 | 1块 | 搭建电路原型 | 830孔或400孔都行 |
1.3 ESP32开发板:为什么选它?
我个人习惯用ESP32做物联网项目,原因有三:
- 双核处理器:一个核跑控制逻辑,一个核跑WiFi/蓝牙,互不干扰。我在项目中遇到过单核芯片处理网络请求时舵机抖动的坑,换了ESP32就稳了。
- 内置WiFi+蓝牙:省去外接模块的麻烦,而且功耗控制得不错。
- 引脚丰富:有ADC(模数转换)引脚可以直接读光敏电阻,有PWM(脉宽调制)引脚可以直接控制舵机。
你拿到开发板后,先确认一下引脚图。不同厂家的ESP32板子引脚编号可能不一样,但核心功能都一样。我建议你重点关注这几个引脚:
- ADC引脚:比如GPIO34、GPIO35、GPIO36等,用来接光敏模块的AO口。
- PWM引脚:几乎所有GPIO都支持PWM输出,但注意别和ADC引脚冲突。
- 3.3V和GND:给舵机和光敏模块供电。
1.4 光敏电阻模块:窗帘的“眼睛”
光敏电阻模块,说白了就是一个可变电阻。光照越强,电阻越小;光照越弱,电阻越大。模块上一般有两个输出:
- DO(数字输出):输出高/低电平,只能判断“亮”或“暗”。
- AO(模拟输出):输出0~3.3V的模拟电压,可以精确反映光照强度。
咱们这个项目要用AO口,因为需要知道具体的光照数值,而不是简单的亮暗判断。你想想看,如果只用DO口,那窗帘只有“全开”和“全关”两种状态,多没意思。
接线很简单:
- VCC → ESP32的3.3V
- GND → ESP32的GND
- AO → ESP32的ADC引脚(比如GPIO34)
1.5 舵机SG90:窗帘的“手臂”
SG90是市面上最常见的微型舵机,扭矩不大,但驱动一个轻质窗帘绰绰有余。它有三根线:
- 红线:电源正极(5V)
- 棕线:电源负极(GND)
- 橙线:信号线(PWM控制)
控制原理很简单:给信号线一个50Hz的PWM波,通过改变脉冲宽度(0.5ms~2.5ms)来控制舵机角度。0.5ms对应0度,1.5ms对应90度,2.5ms对应180度。
1.6 面包板与杜邦线:搭建你的第一个电路
面包板这东西,说白了就是一块带孔洞的塑料板,内部有金属条连接。你只要把元件插进去,就能快速搭建电路,不用焊接。
我建议你按这个顺序搭建:
- 先把ESP32插在面包板中间,注意两侧引脚要露出来。
- 用杜邦线连接ESP32的3.3V和GND到面包板的电源轨(红色和蓝色条)。
- 把光敏模块插好,VCC接电源轨正极,GND接负极,AO接ESP32的ADC引脚。
- 把舵机的红线接5V电源(可以用外部电源或面包板电源轨),棕线接GND,橙线接ESP32的PWM引脚。
1.7 避坑指南:我踩过的那些坑
最后,分享几个我当年做这个项目时遇到的坑,你提前避开:
- 电源问题:我曾经用ESP32的3.3V直接给舵机供电,结果舵机转不动,还导致ESP32重启。后来老老实实加了外部5V电源。
- 光敏电阻的响应速度:光敏电阻不是瞬间响应的,它有个几十毫秒的延迟。所以读取数据时,我习惯加一个50ms的延时,或者做多次采样取平均值。
- 舵机的机械限位:SG90的物理转动范围是0~180度,但实际安装窗帘时,可能只需要0~90度。记得在代码里做角度限制,别让舵机硬转,容易损坏齿轮。
好了,这一章的内容就到这里。硬件准备齐了,原理也清楚了,下一章咱们就开始写代码,让窗帘动起来!