第一章:课程导论与硬件准备
各位同学,欢迎来到《ESP32 I2C传感器数据采集与低功耗模式优化实战》的第一课。
做物联网这些年,我最大的感触是:选对主控、吃透协议、挑好传感器,项目就成功了一半。ESP32 这颗芯片,说实话,是我见过性价比最高的无线 MCU 之一。双核、Wi-Fi + BLE、丰富的外设接口,功耗还能做到微安级别——这在五年前简直不敢想。
这一章,我们先打好地基。把 ESP32 是什么、I2C 怎么玩、传感器怎么选、环境怎么搭,一次性理清楚。
1.1 ESP32 开发板:你手里的瑞士军刀
ESP32 由乐鑫科技推出,双核 Tensilica LX6 处理器,主频最高 240 MHz。我最早用 ESP8266 做项目,后来换成 ESP32,感觉就像从自行车换成了摩托车——性能翻倍,外设接口也丰富得多。
| 特性 | ESP32 | ESP8266 |
|---|---|---|
| 核心数 | 双核 | 单核 |
| 主频 | 240 MHz | 80 MHz |
| SRAM | 520 KB | 160 KB |
| Wi-Fi | 802.11 b/g/n | 802.11 b/g/n |
| 蓝牙 | BLE 4.2 + Classic | 无 |
| I2C 接口 | 2 个硬件 I2C | 软件模拟 |
| Deep Sleep 功耗 | ~5 μA | ~20 μA |
我个人习惯用 ESP32-DevKitC 或者 NodeMCU-32S 做原型验证。这两种板子都引出了大部分 GPIO,焊好排针就能直接插面包板,非常方便。
1.2 I2C 协议基础:两根线搞定一切
I2C 总线,说白了就是一根时钟线(SCL)加一根数据线(SDA),却能挂载上百个设备。每个设备有自己的地址,主设备发起通信,从设备响应。
为什么在物联网项目里 I2C 这么流行?原因很简单:
- 引脚少: 只占两个 GPIO,省下的引脚可以接按键、LED 或者别的传感器。
- 支持多设备: 一条总线上可以挂多个传感器,地址不冲突就行。
- 速度够用: 标准模式 100 kHz,快速模式 400 kHz,采集温湿度、气压、加速度这些数据绰绰有余。
我记得有一次做环境监测节点,一条 I2C 总线上挂了 BME280(温湿度气压)、BH1750(光照)和 SSD1306(OLED 显示),三颗芯片共用两根线,代码写起来也清爽。
1. 主设备发送起始条件(SCL 高电平时 SDA 从高拉低)
2. 发送 7 位从设备地址 + 读写位
3. 从设备应答(ACK)
4. 传输数据(每字节后跟 ACK)
5. 主设备发送停止条件(SCL 高电平时 SDA 从低拉高)
ESP32 有两个硬件 I2C 控制器,分别映射到不同的 GPIO 引脚。默认情况下,I2C0 用 GPIO21(SDA)和 GPIO22(SCL),I2C1 用 GPIO18(SDA)和 GPIO19(SCL)。当然,你也可以用 Wire.begin() 重新指定引脚。
1.3 常用低功耗传感器选型
做电池供电的物联网设备,传感器选型第一条:功耗要低。第二条:接口要简单。I2C 接口的传感器天然适合低功耗场景——通信时耗电,空闲时可以直接关断或进入睡眠模式。
下面是我在项目中用得最多的三款传感器:
| 传感器 | 测量参数 | 工作电流 | 待机电流 | I2C 地址 |
|---|---|---|---|---|
| BME280 | 温度、湿度、气压 | 2.8 μA(1 Hz 采样) | 0.1 μA | 0x76 / 0x77 |
| MPU6050 | 三轴加速度、三轴陀螺仪 | 3.6 mA(全部开启) | 5 μA | 0x68 |
| BH1750 | 环境光照强度 | 120 μA(高分辨率模式) | 0.01 μA | 0x23 / 0x5C |
BME280 是我做气象站和室内环境监测的首选。一颗芯片搞定温度、湿度、气压三个参数,精度还不错。而且它的功耗极低,连续采样时也就几个微安,非常适合电池供电的场景。
MPU6050 自带数字运动处理器(DMP),可以直接输出姿态角,省去了在 MCU 上跑姿态解算算法的麻烦。不过要注意,它的工作电流比 BME280 大不少,如果不需要连续监测运动,记得让它进入待机模式。
1.4 开发环境搭建:Arduino IDE vs ESP-IDF
ESP32 的开发环境主要有两个选择:Arduino IDE 和 ESP-IDF。我个人的建议是:
- 快速原型验证、学习阶段: 用 Arduino IDE。库丰富,上手快,写几行代码就能读取传感器数据。
- 产品级开发、深度优化: 用 ESP-IDF。对底层控制更强,功耗管理更精细,代码体积也更小。
这门课程里,我们会以 Arduino IDE 为主,方便大家快速上手。但在低功耗优化章节,我会切换到 ESP-IDF 演示一些底层技巧。
Arduino IDE 安装步骤
- 下载并安装 Arduino IDE(建议 2.x 版本)
- 打开 文件 → 首选项,在“附加开发板管理器网址”中添加:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - 打开 工具 → 开发板 → 开发板管理器,搜索“ESP32”并安装
- 选择开发板:工具 → 开发板 → ESP32 Arduino → ESP32 Dev Module
- 选择端口:工具 → 端口 → 选择对应的 COM 口
ESP-IDF 安装(可选)
如果你打算深入低功耗优化,建议也装一下 ESP-IDF。乐鑫官方提供了 VS Code 插件,安装起来很方便:
- 安装 VS Code 和 Python 3
- 在 VS Code 扩展中搜索“ESP-IDF”并安装
- 按 F1 输入“ESP-IDF: Configure ESP-IDF Extension”,选择自动下载
- 等待安装完成,选择目标芯片为 ESP32
1.5 本章知识体系总览
下面这张图,把第一章的核心知识点串了起来。你可以把它当作整个课程的导航图:
这张图把本章四个核心模块串在了一起。从左到右,从上到下,就是我们这门课的技术路线。ESP32 是大脑,I2C 是神经,传感器是感官,开发环境是手术台——四者缺一不可。
1.6 硬件清单与准备工作
在进入下一章之前,我建议你准备好以下硬件:
- ESP32 开发板 × 1(推荐 ESP32-DevKitC 或 NodeMCU-32S)
- BME280 传感器模块 × 1(I2C 接口,3.3V 供电)
- MPU6050 传感器模块 × 1(可选,用于后续章节)
- 面包板 × 1 + 杜邦线若干
- Micro USB 数据线 × 1(注意:要能传数据,不是充电线)