第二章 核心硬件选型:从零搭建设备的“骨架”

好,咱们正式开始动手了。第一章聊了整体架构,这一章我带你挑“零件”。

说白了,EMS控制系统的硬件,就像人的骨架和感官。ESP32是大脑,传感器是眼睛和耳朵,继电器是手脚,电源是心脏。选错了,后面全白搭。

核心原则:低成本 ≠ 低性能。我们要在10块钱的芯片上,榨出100块的效果。

2.1 主控芯片:ESP32 开发板

为什么选ESP32?我直接说结论:这玩意儿是嵌入式界的“瑞士军刀”。

  • 双核处理器:一个核跑通信,一个核跑控制逻辑,互不干扰。我在项目里试过单核芯片,WiFi一卡,继电器就乱跳,那叫一个头疼。
  • 内置WiFi + 蓝牙:省掉一个外挂通信模块,成本直接砍半。
  • 12位ADC:虽然精度一般,但配合外部ADC(后面讲ADS1115)就够用了。
  • 价格:淘宝上15块钱包邮,你想想看,这价格还要啥自行车?

我个人习惯用ESP32-DevKitC V4版本,引脚多,资料全。新手别买那种几块钱的“裸片”,焊接起来能让你怀疑人生。

避坑指南:我曾经买过一批“超低价”ESP32,结果WiFi信号弱得连路由器都搜不到。后来发现是PCB天线设计缩水了。记住:买带“IPEX天线接口”的版本,信号稳得多。

2.2 电流/电压传感器:ACS712 与 ADS1115

测电流和电压,是EMS的核心功能。这里我推荐两套方案,你根据预算选。

2.2.1 电流传感器:ACS712

ACS712是霍尔效应传感器,说白了就是非接触测量。你把它串在电路里,它输出一个模拟电压,ESP32读这个电压就能算出电流。

  • 量程选择:有5A、20A、30A三个版本。家庭用选20A,工业用选30A。
  • 精度:典型误差±1.5%,够用了。我测过几次,和万用表对比,偏差在0.1A以内。
  • 注意:输出是模拟信号,ESP32的ADC只有12位,直接读会有点噪声。怎么办?看下一节。

2.2.2 ADC扩展:ADS1115

ESP32自带的ADC,说实话,有点“糙”。线性度不好,噪声也大。我建议加一个ADS1115,16位精度,I2C接口,4通道。

  • 为什么选它?因为便宜(5块钱),而且能同时测4路信号。比如一路测电流,一路测电压,一路测温度。
  • 接线:VCC接3.3V,GND接地,SCL/SDA接ESP32的I2C引脚(默认GPIO21/22)。
  • 代码示例:
#include <Wire.h>
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;

void setup() {
  Serial.begin(115200);
  ads.begin();  // 默认地址0x48
  ads.setGain(GAIN_TWOTHIRDS);  // ±6.144V范围
}

void loop() {
  int16_t adc0 = ads.readADC_SingleEnded(0);
  float voltage = adc0 * 0.1875 / 1000;  // 每单位0.1875mV
  float current = (voltage - 2.5) / 0.185;  // ACS712灵敏度185mV/A
  Serial.print("电流: "); Serial.println(current);
  delay(1000);
}

注意:ACS712输出在无电流时是2.5V(VCC/2)。所以代码里要减去2.5V再除以灵敏度。我第一次用的时候忘了这个偏移量,测出来全是负数,查了半天才发现。

2.3 执行机构:继电器模块

继电器就是开关。ESP32的GPIO输出3.3V,控制继电器线圈,继电器再控制220V交流电的通断。

  • 选型:买“光耦隔离”版本的继电器模块。为什么?因为220V和3.3V之间要有电气隔离,否则一旦继电器打火,ESP32直接烧掉。
  • 驱动能力:一般选10A/250V的,控制个灯、水泵、空调绰绰有余。
  • 接线:IN引脚接ESP32的GPIO,VCC接5V(注意不是3.3V),GND共地。

个人经验:继电器吸合瞬间会有电流尖峰,我建议在继电器线圈两端并联一个1N4007二极管(反向),吸收反向电动势。很多模块已经内置了,但买的时候问清楚。

2.4 电源模块:给系统“喂饱电”

整个系统需要两种电压:5V(给继电器和传感器)和3.3V(给ESP32)。

  • 方案一:用12V/24V开关电源,加一个LM2596降压模块转5V,再用AMS1117-3.3转3.3V。效率高,但体积大。
  • 方案二:直接用手机充电器(5V/2A),加一个AMS1117-3.3。简单,但功率有限。
  • 我推荐方案一:因为EMS系统里可能还有别的设备(比如风扇、屏幕),12V供电更灵活。

警告:千万别把220V直接接到ESP32上!我见过有人这么干,结果“嘭”一声,板子直接冒烟。记住:强电和弱电必须隔离。

2.5 通信模块:WiFi 与 RS485

EMS系统需要和外界通信。这里有两种场景:

  • WiFi:ESP32自带,用于连接路由器,把数据上传到云平台(比如MQTT)。
  • RS485:用于和电表、逆变器等工业设备通信。ESP32没有原生RS485,需要加一个MAX485模块。

RS485接线:MAX485的A接A,B接B,RE/DE引脚接ESP32的GPIO(控制收发方向)。

// RS485发送示例
void sendRS485(String data) {
  digitalWrite(RE_DE, HIGH);  // 使能发送
  Serial2.print(data);
  delay(10);
  digitalWrite(RE_DE, LOW);   // 切换回接收
}

避坑指南:RS485通信时,记得在A和B之间加一个120欧姆的终端电阻。我曾经没加,结果通信距离超过50米就丢包,加了电阻后稳如老狗。

2.6 知识体系总览

下面这张图,把本章的核心硬件关系串起来了。你一看就明白:

ESP32 主控 ACS712 电流传感器 ADS1115 ADC扩展 继电器模块 WiFi / RS485 电源模块 (12V→5V→3.3V) I2C/模拟 GPIO控制 供电

嗯,这张图里,ESP32是核心,所有模块都围着它转。传感器采集数据,继电器执行动作,通信模块负责上传下达,电源模块保证一切正常运转。

选型就到这里。下一章,咱们开始画电路原理图,把今天选的这些“零件”焊在一起。


专注资料整理