跳转至

ESP32

驱动安装

ESP32 内部使用的是 TTL 串口通讯,而电脑使用的是 USB 标准协议。这两者是无法直接对话的。因此,开发板上通常焊接了一颗“USB 转串口”芯片(常见的有 CP2102 或 CH340)。对应驱动识别到这颗芯片时,把它虚拟成一个 COM 口(通信端口)

Windows可以在设备管理器中查看到这个 COM 口,点击自动搜索并安装驱动即可。

GPIO

  • 作为 Input(输入)时:读取外部状态。比如读取按键是否按下,或者读取传感器传来的高低电平。
  • 作为 Output(输出)时:控制外部设备。比如输出高电平点亮 LED,或者输出 PWM 信号控制电机转速。

  • 在标准的 ESP32 库(如 Arduino 框架)中,GPIO 21 被预设为 SDAGPIO 22 被预设为 SCL

供电

VCC(3.3V)

3.3V 引脚是 ESP32 的电源输出/输入口,为 ESP32 芯片本身以及连接在它上面的外设(如传感器、LED、显示屏)提供电能。早期的数字电路多用 5V(比如 Arduino UNO),但为了降低功耗并提高芯片集成度,现代芯片(如 ESP32、STM32)普遍采用更低的 3.3V 逻辑电压。

GND

GND 是 Ground 的缩写,中文叫“地”或“地线”。它是电流流回电源的路径。在电路中,电流必须从高电位(3.3V)流向低电位(GND)才能形成回路。GND 通常被定义为 0V。所有的电压测量都是以 GND 为基准的。就像测山峰的高度是以海平面为 0 米一样,GND 就是电路里的“海平面”。如果你用 ESP32 控制一个外部传感器,两者的 GND 必须连接在一起。如果“海平面”不在同一个高度,信号就会乱套。

VIN

VIN 负责接收外部电压,为传感器内部的电路供电。

  • 电压范围:通常这个模块支持 3.3V 到 5V 的输入。
  • 内部转换:MAX30102 芯片内部其实需要两种电压:一种是给逻辑电路用的(1.8V),一种是给内部红光/红外 LED 用的(3.3V),它通常自带了稳压器(LDO)。当你把 ESP32 的 3.3V 接到模块的 VIN 时,板载稳压器会确保芯片得到它想要的精确电压。

通信

I2C是一种只需要两根线的通信协议:

  • SDA (Serial Data):数据线,传输具体的数据。
  • SCL (Serial Clock):时钟线,由主设备(Master)控制,决定传输速率。

这两根线必须通过上拉电阻连接到电源(VCC)。这是因为 I2C 接口通常是“开漏输出”(Open-Drain),平时处于高电平。只有当设备拉低电平时,才会产生逻辑 0。

一次完整的 I2C 通信通常遵循以下顺序:

  1. 主设备将 SDA 线从高电平拉低,随后将 SCL 线拉低,通知总线上所有设备。

  2. 主设备发送 7 位(或 10 位)从机地址,紧接着发送 1 位读/写位(0 表示写,1 表示读)。

  3. 每发送完 8 位数据,接收方必须反馈一个 ACK(应答)。它会把 SDA 线拉低。如果没拉低,则是 NACK(非应答),通常意味着传输结束或出错。

  4. 根据前面的读/写位,数据由主传向从,或由从传向主。每次传输 8 位。

  5. 主设备先放开 SCL(回到高电平),再将 SDA 从低电平拉高。这表示总线现在空闲了。

开发环境

使用PlatformIO作为开发环境,需要在根目录下创建platformio.ini。

;PlatformIO 项目配置文件,使用arduino框架,相比原生ESP32更快
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino

; 串口监视器波特率(和代码里 Serial.begin 的值要一致)
monitor_speed = 115200

; MAX30102 驱动库
lib_deps =
    sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor Library@^1.1.2