硬件选型与电路设计:主控芯片选型(ESP32 vs Arduino)
做智能照明项目,第一步就是选“大脑”。
我个人习惯,先看需求再定芯片。你想想看,一个智能灯要联网、要调光、要感应,还得稳定跑几年。选错了,后面全是坑。
ESP32 vs Arduino:怎么选?
先说结论:做智能照明,我推荐ESP32。为什么?
- WiFi + 蓝牙双模:ESP32自带无线,Arduino要外挂模块。我在项目中遇到过,外挂WiFi模块的Arduino,调试时总掉线,查了三天发现是电源纹波干扰。ESP32集成度高,省心。
- 性能碾压:ESP32是双核240MHz,Arduino Uno才16MHz。你要做PWM调光、传感器读取、MQTT通信,Arduino跑起来吃力。ESP32轻松搞定。
- 价格差不多:ESP32开发板20-30元,Arduino Uno也要20多。但ESP32省了WiFi模块钱,性价比更高。
选型建议:如果项目只做本地控制、不联网,用Arduino也行。但智能照明肯定要联网,直接上ESP32。
不过Arduino也有优势——生态成熟,资料多。初学者上手快。但说句实话,ESP32的生态现在也很完善了,Arduino IDE也能开发ESP32。
光照传感器:BH1750
光照传感器,说白了就是让灯知道“现在天亮还是天黑”。
BH1750是我用过最省心的传感器。数字输出,I2C接口,直接读光照强度(单位:lux)。
我记得第一次用光敏电阻,模拟信号还要自己算,精度还差。BH1750直接给数字,误差小,省了ADC转换。
接线注意:BH1750的VCC接3.3V,SCL接ESP32的GPIO22,SDA接GPIO21。别接反了,我烧过一片。
代码示例:
#include <Wire.h>
#include <BH1750.h>
BH1750 lightMeter;
void setup() {
Serial.begin(115200);
Wire.begin();
lightMeter.begin();
}
void loop() {
float lux = lightMeter.readLightLevel();
Serial.print("光照强度: ");
Serial.print(lux);
Serial.println(" lx");
delay(1000);
}
人体红外传感器:HC-SR501
这个传感器用来检测“有没有人”。
HC-SR501是热释电红外传感器,检测人体移动。注意,是移动。人坐着不动,它检测不到。
我曾经踩过这个坑:客户说灯老灭,明明人在。后来发现是传感器安装位置不对,人刚好在检测盲区。调整角度后就好了。
重要提醒:HC-SR501输出是3.3V电平,但有些模块是5V供电。ESP32的GPIO是3.3V耐受,直接接没问题。但如果你用5V供电的模块,输出可能也是5V,需要电平转换。
接线:
- VCC → 5V(或3.3V,看模块规格)
- GND → GND
- OUT → ESP32的GPIO(比如GPIO4)
代码很简单:
int pirPin = 4;
int pirState = LOW;
void setup() {
pinMode(pirPin, INPUT);
Serial.begin(115200);
}
void loop() {
int val = digitalRead(pirPin);
if (val == HIGH) {
if (pirState == LOW) {
Serial.println("有人来了!");
pirState = HIGH;
}
} else {
if (pirState == HIGH) {
Serial.println("人走了。");
pirState = LOW;
}
}
delay(200);
}
继电器模块
继电器就是开关。ESP32的GPIO输出电流小,带不动灯带。继电器负责“以小控大”。
选型注意两点:
- 电压:继电器线圈电压有3.3V、5V、12V。ESP32用3.3V或5V的。我习惯用5V的,稳定。
- 电流:触点电流要大于灯带最大电流。一般10A够用。
避坑指南:继电器线圈是感性负载,断电时会产生反向电动势。一定要在继电器线圈两端并联一个续流二极管(1N4007),否则可能烧ESP32的GPIO。我曾经没加,烧了三个GPIO口才反应过来。
接线:
- IN → ESP32的GPIO(比如GPIO5)
- VCC → 5V
- GND → GND
- COM → 灯带电源正极
- NO → 灯带正极
LED灯带选型
灯带分两种:普通灯带和可寻址灯带。
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 普通灯带(单色) | 只能整体亮灭、调光 | 基础照明 |
| 可寻址灯带(WS2812B等) | 每个灯珠独立控制,RGB变色 | 氛围灯、彩灯 |
我建议初学者先用普通灯带,简单。WS2812B虽然炫酷,但时序要求严格,调试起来麻烦。
灯带电压常见12V或24V。注意:灯带越长,压降越明显。超过5米,建议两端供电。
电源电路设计
电源是整个系统的命脉。设计不好,灯闪、重启、烧芯片。
我的经验:
- ESP32和传感器用3.3V:ESP32自带LDO稳压,输入5V即可。但注意,ESP32瞬间电流可达500mA,电源要留余量。
- 继电器和灯带用12V:灯带功率大,单独供电。继电器线圈用5V,从12V降压得到。
- 共地:所有模块的GND必须连在一起。否则信号乱飞。
电源方案:用一个12V/2A电源适配器,12V直接给灯带。再用一个LM2596降压模块,12V转5V给继电器和ESP32。ESP32板载LDO再转3.3V给传感器。这样最稳定。
电路连接示意:
12V电源 → 灯带(正极)
→ LM2596输入 → LM2596输出5V → ESP32 VIN
→ 继电器VCC
→ HC-SR501 VCC(如果模块支持5V)
ESP32 3.3V → BH1750 VCC
→ HC-SR501 VCC(如果模块支持3.3V)
所有GND连在一起
嗯,这里要注意:电源线尽量粗,特别是灯带供电线。我见过有人用细杜邦线接12V灯带,线都烧化了。
最后总结一下:ESP32做主控,BH1750测光,HC-SR501测人,继电器控灯,12V供电。这套方案我做了好几个项目,稳定运行两年没问题。