1. 项目概述与硬件准备:ESP32智能窗帘的起点

大家好,我是你们的老朋友。今天咱们正式开启《ESP32智能窗帘》这个项目。说实话,每次带学生做这个项目,我都挺兴奋的——因为它把光感、电机控制、无线通信全串起来了,特别适合练手。

这一章,我们先搞清楚两件事:智能窗帘到底怎么工作?以及我们需要哪些硬件?别急着焊电路,先把原理吃透,后面才不容易翻车。

1.1 智能窗帘的工作原理

说白了,智能窗帘就是让窗帘自己知道什么时候该开、什么时候该关。我最早做这个项目时,用的是最简单的光控方案——天亮了就开,天黑了就关。但后来发现,用户的需求远不止这么简单。

咱们这个课程要实现两个核心功能:

  • 光感跟随模式:窗帘根据环境光照强度自动调节开合角度。比如,阳光太强时自动关小,阴天时自动开大。
  • 场景模式设计:预设几种场景(比如“起床模式”、“观影模式”),一键切换窗帘状态。

你想想看,这两个需求其实对应了两种控制逻辑:

  1. 闭环控制:光敏电阻采集光照 → ESP32读取数据 → 计算目标角度 → 驱动舵机转动 → 光照变化 → 再次采集... 这是一个典型的反馈系统。
  2. 开环控制:用户按下场景按钮 → 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:给舵机和光敏模块供电。
注意:ESP32的GPIO输出电流有限,直接驱动舵机可能不够。我建议舵机的电源线单独接外部5V电源,或者用面包板上的电源轨供电。千万别直接从ESP32的3.3V引脚取电给舵机,容易烧板子——我曾经就因为这个烧过一块板子,心疼了好几天。

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度。

小技巧:我刚开始做时,直接用delay()函数控制舵机,结果发现舵机转得一顿一顿的。后来改用ESP32的LEDC库(PWM控制库),设置好频率和分辨率,舵机转动就平滑多了。后面章节我会详细讲代码实现。

1.6 面包板与杜邦线:搭建你的第一个电路

面包板这东西,说白了就是一块带孔洞的塑料板,内部有金属条连接。你只要把元件插进去,就能快速搭建电路,不用焊接。

我建议你按这个顺序搭建:

  1. 先把ESP32插在面包板中间,注意两侧引脚要露出来。
  2. 用杜邦线连接ESP32的3.3V和GND到面包板的电源轨(红色和蓝色条)。
  3. 把光敏模块插好,VCC接电源轨正极,GND接负极,AO接ESP32的ADC引脚。
  4. 把舵机的红线接5V电源(可以用外部电源或面包板电源轨),棕线接GND,橙线接ESP32的PWM引脚。
核心要点:智能窗帘的本质,就是“传感器采集数据 → 主控处理数据 → 执行器响应”。光敏电阻是传感器,ESP32是主控,舵机是执行器。把这个逻辑链刻在脑子里,后面所有代码都是围绕它展开的。

1.7 避坑指南:我踩过的那些坑

最后,分享几个我当年做这个项目时遇到的坑,你提前避开:

  • 电源问题:我曾经用ESP32的3.3V直接给舵机供电,结果舵机转不动,还导致ESP32重启。后来老老实实加了外部5V电源。
  • 光敏电阻的响应速度:光敏电阻不是瞬间响应的,它有个几十毫秒的延迟。所以读取数据时,我习惯加一个50ms的延时,或者做多次采样取平均值。
  • 舵机的机械限位:SG90的物理转动范围是0~180度,但实际安装窗帘时,可能只需要0~90度。记得在代码里做角度限制,别让舵机硬转,容易损坏齿轮。

好了,这一章的内容就到这里。硬件准备齐了,原理也清楚了,下一章咱们就开始写代码,让窗帘动起来!