HOWTO · Arduino

Arduino Uno 上 I2c 的引脚选择

本文将详细阐述 I2C 通信总线所需的引脚。

本页内容

在 Arduino Uno 上,将 I2C 设备的 SDA 线连接到 A4,将 SCL 线连接到 A5。把设备地线与开发板地线连接在一起,并根据设备要求供电,然后在 Arduino 草图中使用 Wire 库初始化总线。不同开发板的标记和布局可能有所不同,接线前请检查你的 Uno 上的标记。

Arduino Uno 上的 I2C 引脚

Uno 通常使用 SDA 接 A4、SCL 接 A5 的 I2C 引脚映射。有些引脚资料也将这两个信号分别标为 PC4(SDA)和 PC5(SCL);在 Uno 上,实际接线时可使用模拟引脚标记 A4 和 A5。有些 Uno 开发板还会单独标出 SDA 和 SCL。这些标记对应同一组总线信号,并不代表另有一条 I2C 总线。

SDA 和 SCL 的作用

I2C 使用两条信号线。SDA 在控制器与所连接的设备之间传输串行数据;SCL 则传输用于协调数据传输的时钟信号。总线上的每个设备都连接到同一组 SDA 和 SCL 线路。按照标记对应连接各条信号线;如果把两条线接反,设备就无法按预期通信。

如何将 I2C 设备连接到 Arduino Uno

先让开发板断电,再将 Uno 的 A4/SDA 引脚连接到设备的 SDA 引脚,并将 A5/SCL 连接到设备的 SCL 引脚。把 Uno 的 GND 与设备的 GND 相连,使两者共地。设备的电源输入只能连接到该模块支持的电压。不要假设所有 I2C 设备都能接受 5 V;请查看设备上的标记或文档。如果设备的逻辑电压与 Uno 不兼容,请使用合适的电平转换器。

I2C 线路通常需要上拉电阻。许多模块已经内置上拉电阻,因此应先查阅模块文档或检查电路。如果总线上没有合适的上拉电阻,可分别在 SDA 与总线逻辑电源之间、SCL 与该电源之间添加上拉电阻。约 4.7 kΩ 是常见的起始值,但并非适用于所有情况;合适的阻值还取决于总线速度、接线和设备。添加多个阻值较低的上拉电阻前,请先检查它们组合后的电路。

使用 Wire 库初始化 I2C

Arduino IDE 内含用于 I2C 的 Wire 库。在草图中使用 #include <Wire.h> 引入该库,然后在 setup() 中调用 Wire.begin();,将 Uno 初始化为总线控制器。这一步只负责初始化;它本身不会读取传感器,也不能确认设备已连接。针对特定设备编写的代码,还必须使用该设备文档中规定的 I2C 地址以及寄存器或命令序列。

例如,Arduino 草图中的相关语句是 Wire.begin();。这条与硬件相关的草图语句并未作为由主机运行的示例提供:数据包中没有 Arduino 工具链或已连接 Uno 的执行结果。使用 Wire.h 的程序还需要 Arduino 核心和相应的开发板配置。

检查开发板标记并排查接线问题

如果设备没有响应,请依次检查以下项目:

  1. 确认 SDA 接 SDA(Uno 上为 A4),SCL 接 SCL(Uno 上为 A5);如果两条线接反,请更正。
  2. 确认 Uno 和设备的地线相连,并且设备获得其规定的电源电压。
  3. 检查是否安装了上拉电阻,以及它们是否连接到两个设备都能承受的逻辑电压。不要把 4.7 kΩ 当作适用于所有总线的固定规则。
  4. 根据设备文档确认地址和通信顺序。Wire.begin() 会启动总线,但不会选择设备地址。
  5. 查看开发板本身的引脚标记。如果板上有 SDA/SCL 排针,请将这些标记视为同一组 I2C 信号;不要根据其他 Uno 版本推断当前开发板的引脚布局。