Arduino Uno 中的 I2C/Wire
I2C 代表集成电路间通信。它是一种流行的通信协议,被许多外设使用,例如加速度计和陀螺仪、OLED 显示屏等。Arduino 将 I2C 称为 Wire,这是 Atmel 使用的术语(双线接口或 TWI)的简写形式。以下是 I2C 的一些主要特性:
它仅使用两条线:一条用于数据 (SDA),一条用于时钟 (SCL)。I2C 是同步的,因为它使用时钟。
从机不是通过从机选择线来选择的,而是通过地址位来选择的。
主设备发送的第一个字节包含一个 7 位地址和一个读/写位,指示后续字节将来自主设备还是来自从机。因此,最多 127 个具有唯一地址的从机可以连接到单个主设备。
在每个字节之后,接收机必须发送一个 0 来确认字节的接收。
如果主设备想要接收数据,它只需生成时钟脉冲。从机必须确保在时钟脉冲到达时准备好下一个位。
数据和时钟线被上拉,即两个电阻将总线拉至高电平,设备仅发送低电平。如果他们想要发送高电平,他们只需释放总线。
需要开始/停止序列来表示通信的开始和结束。
Arduino Uno 支持 I2C。以下引脚通常用于 SPI:
SDA - A4
SCL - A5
Arduino 具有内置的 Wire 库。该库的重要函数如下所示:
Wire.begin() - 初始化 Wire
Wire.beginTransmission(address) - 与由 address 标识的从机启动传输
Wire.endTransmission() - 结束由 beginTransmission() 启动的传输
Wire.SetClock(frequency) - 将时钟速度设置为 frequency(以 Hz 为单位)
Wire.write(byte) - 将字节排队以从主设备传输到从机,或在响应主设备的请求时写入从机的数据
Wire.read() - 如果主设备向从机发送 requestFrom(),则它将使用此函数读取返回的字节。或者,如果主设备向从机传输了字节,则从机上的此函数将用于读取这些字节
要了解有关这些函数的不同参数的更多信息,以及了解与 Wire 相关的其他重要函数,您可以查看 Arduino 关于 Wire 的参考文档。
建议您浏览与 Wire 相关的内置示例,可以从 文件 → 示例 → Wire 访问这些示例。