第五课:I2C通信 - 单片机与传感器的对话
📌 学习目标
- 理解什么是 I2C 协议
- 了解 I2C 的硬件连接
- 学会启用 I2C 传感器
- 读取温度传感器数据
🎯 什么是 I2C?
I2C (读作 I-squared-C) = Inter-Integrated Circuit = 集成电路总线
形象的比喻
想象一条有很多站点的公共汽车路线:
- 总线 = 公共汽车路线
- 设备 = 各个站点
- 地址 = 每个站点的编号
所有设备共用两条线,通过地址来区分!
🔌 I2C 的硬件连接
只需要 2 条线 + 电源和地线:
| 线名 | 功能 |
|---|---|
| SCL | 时钟线(Clock) |
| SDA | 数据线(Data) |
| VCC | 电源(3.3V 或 5V) |
| GND | 地线 |
连接示意图
单片机 温度传感器 OLED屏幕
│ │ │
├─ SCL ──────┼─ SCL ────────┤
├─ SDA ──────┼─ SDA ────────┤
├─ VCC ──────┼─ VCC ────────┤
└─ GND ──────┴─ GND ────────┘
📮 I2C 的工作原理
1. 每个设备有地址
| 传感器 | I2C地址 |
|---|---|
| BMP280 | 0x76 |
| ADS1115 | 0x48 |
| TCS34725 | 0x29 |
| OLED | 0x3C |
2. 通信过程
- 单片机发送地址
- 对应设备响应
- 发送或接收数据
- 结束通信
🔧 JoyKit 中的 I2C 指令
| 指令 | 功能 |
|---|---|
0xC0 | 启用外设 |
0xC3 | 启用温湿度传感器(BMP280/BME280) |
0xC7 | 启用 WS2812B |
🔬 课堂演示项目:温度监测
项目目标
读取温度传感器数据并显示。
硬件需求
- 板载 BMP280/BME280 传感器
- 屏幕(可选)
参考程序
; 温度监测项目
000 C3 0001 0000 ; 启用温湿度传感器
001 02 03E8 0000 ; 等待传感器稳定
002 0E 0000 0000 ; 循环(数据会自动显示在屏幕)
进阶:用温度控制 LED
; 根据温度改变 LED 颜色
000 C3 0001 0000 ; 启用传感器
001 C7 0001 0000 ; 启用 LED
002 02 03E8 0000 ; 延时
003 06 000A 001E ; 如果温度 > 30°C,跳转
004 E4 00FF 0000 ; 绿色(正常)
005 0E 0002 0000 ; 跳回
006 E4 0000 00FF ; 红色(太热警告)
007 0E 0002 0000 ; 跳回
💡 I2C 的优势
| 特点 | 说明 |
|---|---|
| 省线 | 只需要2条线 |
| 多设备 | 可以同时挂多个传感器 |
| 简单 | 协议相对简单 |
🎯 与 SPI 的区别
| I2C | SPI |
|---|---|
| 2条线 | 4条线 |
| 有地址 | 无地址,用片选 |
| 稍慢 | 较快 |
| 半双工 | 全双工 |
🎉 小结
今天我们学到了:
- ✅ I2C 是一种总线协议
- ✅ 需要 SCL 和 SDA 两条线
- ✅ 每个设备有地址
- ✅ JoyKit 用 0xC0 系列指令启用传感器
- ✅ 完成了温度监测项目
下一课我们将学习 SPI 协议,然后进入综合实战项目!