硬件选型与电路设计:主控芯片选型(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供电。这套方案我做了好几个项目,稳定运行两年没问题。