这是一个基于 ESP32 的「传感器检测 + 屏幕显示 + 驱动输出」系统。ESP32 是大脑,读取传感器的信号,在 OLED 屏幕上显示出来,同时控制外部模块做出响应。
一个核心 -- ESP32 开发板(中间的大黑板子),所有模块都以它为中心连接。
一个显示 -- OLED 屏幕(上方小屏幕),用 I2C 协议通信。
两个输入 -- 传感器模块(右侧),给 ESP32 提供检测信号。
一个输出 -- 驱动模块(右下),ESP32 控制它来驱动马达/蜂鸣器。
I2C 只需要两根线就能让设备之间交换数据。这两根线各有分工:
| 缩写 | 全称 | 作用 |
|---|---|---|
| SDA | Serial Data Line | 串行数据线 -- 传输实际数据(比如要显示的内容、命令字节) |
| SCL | Serial Clock Line | 串行时钟线 -- 同步通信节奏,保证收发不乱套 |
如果不用 I2C,控制一块屏幕可能要接 10+ 根线(并行接口),既麻烦又占引脚。I2C 的好处:
省引脚 -- 只需要 SDA + SCL 两根线,就能挂载多个设备(屏幕、传感器都接同一组线上)。
通用标准 -- 几乎所有小型 OLED、传感器都支持 I2C,接线逻辑固定。
接线简单 -- SDA/SCL 接到 ESP32 指定引脚,再加 VCC (3.3V) 和 GND 就行。
| 线色 | 信号 | 接 ESP32 引脚 | 作用 |
|---|---|---|---|
| 绿色 | SDA | GPIO8 | 数据线,传显示内容 |
| 紫色 | SCL | GPIO9 | 时钟线,同步节奏 |
| 红色 | VCC | 3.3V | 供电正极 |
| 黑色 | GND | GND | 公共地线 |
代码里必须和接线一致,否则屏幕不会亮:
// 初始化 I2C,指定 SDA=GPIO8,SCL=GPIO9
Wire.begin(/*SDA=*/8, /*SCL=*/9);这句代码告诉 ESP32:"GPIO8 当数据线,GPIO9 当时钟线"。
翻译过来就是「通用输入/输出引脚」。它是 ESP32 开发板上的一个个可编程接口,功能由你写的代码决定。
输出模式 ESP32 通过它输出高电平 (3.3V) 或低电平 (0V),用来控制 LED 亮灭、马达启停。
输入模式 ESP32 读取外部电压信号(比如按键按下、传感器变化),来感知外部世界。
GPIO 引脚的功能不是固定的。你可以让 GPIO8 做普通数字输出(控制 LED),也可以让它做 I2C 通信的数据线(接 SDA),甚至让它做模拟输入(读电压)。在这张图里,GPIO8 被代码定义为 I2C 的 SDA 引脚。
理论上 ESP32 的大部分 GPIO 都可以当 I2C 引脚(这叫「软件模拟 I2C」)。选 GPIO8/9 通常因为:
开发板设计 -- 很多 ESP32 开发板把这俩引脚作为默认 I2C 接口预留,接线方便。
避免冲突 -- 有些引脚有特殊用途(GPIO0 是下载模式引脚,GPIO2 常接板载 LED),用 8/9 更稳定。
教程通用 -- 网上大量示例代码用这组引脚,照着接就能跑通。
| GPIO 编号 | 连接的模块 | 模式 | 作用 |
|---|---|---|---|
GPIO5 | 驱动模块 | 输出 | 发信号控制马达/蜂鸣器 |
GPIO7 | 振动传感器 | 输入 | 读取振动检测信号 |
GPIO8 | OLED SDA | I2C 数据 | I2C 通信的数据线 |
GPIO9 | OLED SCL | I2C 时钟 | I2C 通信的时钟线 |
GPIO10 | 压电传感器 | 输入 | 读取压电片振动信号 |
给模块供电,有电才能工作。这块电路统一接 3.3V,不能接 5V,会烧坏零件。
切记:OLED 屏幕等模块的 VCC 只接 3.3V,接错可能直接烧毁。
电流必须走一圈才通(从正极出发,经过负载,回到负极)。GND 就是电流回家的路。所有模块的 GND 必须连在一起,信号才不乱、设备才正常。
| 信号 | 线色习惯 | 接到 ESP32 哪里 | 说明 |
|---|---|---|---|
| VCC | 红色线 | 3.3V 引脚 | 供电正极 |
| GND | 黑色线 | GND 引脚 | 公共地线 |
0.96 寸 OLED 屏幕(SSD1306 驱动),分辨率 128x64,I2C 接口。把振动强度用柱状图或波形显示出来,让你直观看到传感器数据。
| 线色 | 引脚名 | 接 ESP32 | 全称 & 作用 |
|---|---|---|---|
| 绿 | SDA | GPIO8 | 数据线,传显示内容给屏幕 |
| 紫 | SCL | GPIO9 | 时钟线,同步通信节奏 |
| 红 | VCC | 3.3V | 供电正极(不可接 5V) |
| 黑 | GND | GND | 公共地线 |
压电陶瓷片就像一个微型发电机 -- 被振动或敲击时,OUT 引脚会输出随振动变化的电压信号,ESP32 读取这个电压就能判断振动强度。
| 线色 | 引脚名 | 接 ESP32 | 作用 |
|---|---|---|---|
| 蓝 | OUT | GPIO10 | 输出振动信号给 ESP32 读取 |
| 黑 | GND | GND | 公共地线 |
这是一个标准振动/敲击检测模块,和压电片是两种不同的输入方式。它输出的是数字信号(高低电平),更容易读取。图中同时接了两种传感器,实际使用选一个就够了。
| 线色 | 引脚名 | 接 ESP32 | 作用 |
|---|---|---|---|
| 橙 | OUT | GPIO7 | 输出检测信号 |
| 红 | VCC | 3.3V | 供电 |
| 黑 | GND | GND | 公共地线 |
ESP32 通过 GPIO5 输出高低电平信号,驱动模块收到后启动马达或蜂鸣器。比如检测到敲击就震动一下,给出触觉反馈。
| 线色 | 引脚名 | 接 ESP32 | 作用 |
|---|---|---|---|
| 蓝 | IN | GPIO5 | 接收 ESP32 的控制信号 |
| 红 | VCC | 3.3V | 供电 |
| 黑 | GND | GND | 公共地线 |
ESP32 是整个系统的核心。它做的事情:
| 职责 | 说明 |
|---|---|
| 供电 | 通过 3.3V 和 GND 引脚给所有模块提供电源 |
| 读取输入 | 通过 GPIO7/10 读取传感器信号,判断振动强度 |
| 驱动显示 | 通过 GPIO8/9 (I2C) 把数据发送给 OLED 屏幕显示 |
| 控制输出 | 通过 GPIO5 发信号给驱动模块,控制马达/蜂鸣器 |
所有模块的 VCC 都接 3.3V,不能接 5V。ESP32 和大部分外设模块都是 3.3V 逻辑,接 5V 可能直接烧毁。
所有模块的 GND 必须和 ESP32 的 GND 接在一起。如果某个模块的 GND 没接,信号会乱飘,设备表现异常甚至完全不工作。
比如 OLED 的 SDA 接了 GPIO8,代码里就要写 Wire.begin(8, 9)。接线换了但代码没改(或反过来),屏幕不会亮。
压电片和蓝色振动模块都是检测输入,图里同时画了两种接法,但实际使用时选一个就够。同时接两个没有意义,还会增加接线复杂度。
| ESP32 引脚 | 线色 | 目标模块 | 目标引脚 | 信号类型 |
|---|---|---|---|---|
GPIO5 | 蓝 | 驱动模块 | IN | 数字输出 |
GPIO7 | 橙 | 振动传感器 | OUT | 数字输入 |
GPIO8 | 绿 | OLED | SDA | I2C 数据 |
GPIO9 | 紫 | OLED | SCL | I2C 时钟 |
GPIO10 | 蓝 | 压电传感器 | OUT | 模拟输入 |
3.3V | 红 | 所有模块 | VCC | 电源 |
GND | 黑 | 所有模块 | GND | 地线 |
是什么:通电就响的圆形发声器件,"滴-滴-滴" 声音输出。3V/5V/12V 都能工作,这里用 3.3V 供电。
在项目里的角色:声音版的「触觉反馈」。检测到振动/敲击时,除了马达震动,蜂鸣器还能响一声,双重提醒。
接线方式:和马达类似 -- 正极接 VCC (3.3V),控制脚接 ESP32 的 GPIO 引脚,用高低电平控制响不响。
是什么:扁平振动马达 + 驱动电路的小模块。收到信号就震动,手机震动就是它。
在项目里的角色:就是电路图里那个驱动模块。给你触觉反馈,检测到敲击就震动一下。
接线方式:和电路图完全一致 -- VCC 接 3.3V,GND 接 GND,IN 脚接 ESP32 的 GPIO5。
| 引脚名 | 接到哪里 | 作用 |
|---|---|---|
| IN | ESP32 GPIO5 | 接收控制信号 |
| VCC | 3.3V | 供电 |
| GND | GND | 公共地线 |
是什么:ESP32-C3 SuperMini 开发板,自带 WiFi/BLE,是整个项目的控制中心。扩展板把引脚都引出来,方便接线。
在项目里的角色:就是电路图中间那块核心板子。读取传感器信号、控制屏幕显示、驱动蜂鸣器和马达,全靠它。
扩展板的好处:开发板本身引脚很密,扩展板把每个引脚都「翻译」成排针座,像电路图里那样用杜邦线直接插就行,不用自己焊接。
注意:这个是 ESP32-C3,和电路图里的 ESP32-S3 是不同型号。C3 引脚数量少一些,但核心功能(GPIO、I2C)完全一样,这个入门项目完全够用。
是什么:电容式触摸开关模块,手指碰一下就触发。比机械按键灵敏,不需要按下去,碰到就行。
在项目里的角色:额外的输入模块,和振动传感器是同一类东西。可以加到项目里实现更多交互:
接线方式:和振动传感器完全一样的模式 -- VCC 接 3.3V,GND 接 GND,OUT 接 ESP32 的任意 GPIO。
| 引脚名 | 接到哪里 | 作用 |
|---|---|---|
| OUT | ESP32 任意 GPIO | 输出触摸信号 |
| VCC | 3.3V | 供电 |
| GND | GND | 公共地线 |
| 零件 | 单价 | 数量 | 小计 |
|---|---|---|---|
| 有源蜂鸣器 | 0.4 元 | 2 | 0.8 元 |
| 震动马达模块 | 1.6 元 | 1 | 1.6 元 |
| ESP32-C3 开发板 | 9.3 元 | 1 | 9.3 元 |
| ESP32-C3 扩展板 | 7 元 | 1 | 7 元 |
| 触摸按键模块 | 0.7 元 | 2 | 1.4 元 |
| 合计 | 20.1 元 | ||
用你手里的零件,可以搭一个比原始电路图更完整的系统:
| ESP32 GPIO | 连接设备 | 功能 | 类型 |
|---|---|---|---|
GPIO5 | 震动马达模块 IN | 控制马达震动 | 输出 |
GPIO6 | 蜂鸣器控制脚 | 控制蜂鸣器发声 | 输出 |
GPIO7 | 触摸按键 1 OUT | 读取按键 1 信号 | 输入 |
GPIO8 | OLED SDA | I2C 数据线 | I2C |
GPIO9 | OLED SCL | I2C 时钟线 | I2C |
GPIO10 | 触摸按键 2 OUT | 读取按键 2 信号 | 输入 |
| 所有模块 VCC → 3.3V | 所有模块 GND → GND | |||