0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C总线与Arduino的接口示例

科技绿洲 来源:网络整理 作者:网络整理 2025-01-17 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在现代电子设计中,I2C总线因其简单性和灵活性而广受欢迎。它允许多个设备共享同一通信线路,从而节省空间和成本。Arduino,作为一个多功能的微控制器平台,自然也支持I2C通信。

I2C总线基础

I2C总线由两条线组成:数据线(SDA)和时钟线(SCL)。SDA用于传输数据,而SCL用于同步数据传输。I2C设备可以是主设备或从设备。主设备生成时钟信号并启动数据传输,从设备响应主设备的请求。

Arduino与I2C

Arduino板通常有两个I2C引脚:A4(SDA)和A5(SCL)。这些引脚可以直接连接到I2C设备的相应引脚。Arduino的软件库提供了对I2C通信的支持,使得与I2C设备的通信变得简单。

硬件连接

为了演示I2C通信,我们将使用一个常见的I2C设备:MCP9808温度传感器。以下是连接步骤:

  1. 将MCP9808的VCC引脚连接到Arduino的5V。
  2. 将MCP9808的GND引脚连接到Arduino的GND。
  3. 将MCP9808的SDA引脚连接到Arduino的A4引脚。
  4. 将MCP9808的SCL引脚连接到Arduino的A5引脚。

软件实现

在Arduino IDE中,我们需要包含Wire库,这是Arduino提供的用于I2C通信的库。以下是读取MCP9808温度的示例代码:

#include

// MCP9808 I2C地址
#define MCP9808_ADDRESS 0x18

void setup() {
// 初始化串口通信
Serial.begin(9600);
// 初始化I2C通信
Wire.begin();
}

void loop() {
// 读取温度
float temp = readTemperature();
// 打印温度
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" C");
// 等待一秒钟
delay(1000);
}

float readTemperature() {
// 启动I2C通信
Wire.beginTransmission(MCP9808_ADDRESS);
// 发送温度寄存器地址
Wire.write(0x05);
// 停止I2C通信
Wire.endTransmission();

// 请求两个字节的数据
Wire.requestFrom(MCP9808_ADDRESS, 2);

// 等待数据准备就绪
if (Wire.available() == 2) {
// 读取两个字节的数据
byte msb = Wire.read();
byte lsb = Wire.read();

// 将两个字节合并为一个16位的值
int16_t raw = (msb < < 8) | lsb;

// 将原始值转换为摄氏度
return raw / 16.0;
}

// 如果没有数据,返回0
return 0;
}

代码解释

  1. 包含Wire库#include 引入Arduino的I2C通信库。
  2. 定义I2C地址#define MCP9808_ADDRESS 0x18 定义MCP9808的I2C地址。
  3. 初始化setup() 函数中初始化串口和I2C通信。
  4. 主循环loop() 函数中读取温度并打印到串口。
  5. 读取温度readTemperature() 函数中实现与MCP9808的I2C通信,读取温度值。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9588

    浏览量

    157591
  • 数据
    +关注

    关注

    8

    文章

    7347

    浏览量

    95004
  • I2C总线
    +关注

    关注

    8

    文章

    422

    浏览量

    63488
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197431
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM4541 I2C总线过压保护器:设计与应用的详细解析

    SGM4541 I2C总线过压保护器:设计与应用的详细解析 在如今的电子设备设计中,保护电路免受过电压的损害是至关重要的。SG Micro Corp推出的SGM4541 I2C总线过压
    的头像 发表于 03-17 16:30 361次阅读

    SGM4541A:I2C总线过压保护的理想之选

    SGM4541A:I2C总线过压保护的理想之选 在电子设备的设计中,I2C总线的稳定运行至关重要。而SGM4541A作为一款低IQ I2C
    的头像 发表于 03-17 16:30 199次阅读

    I2C总线-通信线缆长度的影响及改进措施

    I2C总线确实不适合远距离通信,尤其是需要使用线缆与I2C接口器件进行通信,这里的“不适合”并不是说不可以,这也是本文的重点。一般使用I2C
    发表于 01-21 06:03

    探索PCF8584:I2C总线控制器的卓越之选

    以作为标准高速并行总线与串行I2C总线之间的接口设备,兼容8049、8051、6800、68000和Z80等多种并行总线微控制器/微
    的头像 发表于 12-28 15:40 740次阅读

    P82B715:I2C总线扩展的得力助手

    P82B715:I2C总线扩展的得力助手 在电子设计领域,I2C总线是一种常用的通信协议,但它的总线电容限制往往会影响实际通信距离和系统设计
    的头像 发表于 12-26 10:20 1394次阅读

    基于FPGA的I2C控制模块设计

    I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的头像 发表于 12-26 09:48 5849次阅读
    基于FPGA的<b class='flag-5'>I2C</b>控制模块设计

    深入解析TCA9617B:I2C总线中继器的卓越之选

    深入解析TCA9617B:I2C总线中继器的卓越之选 在电子工程师的日常设计工作中,I2C总线和SMBus系统的应用极为广泛。而TCA9617B作为一款BiCMOS双双向缓冲器,专为
    的头像 发表于 12-22 15:20 615次阅读

    AS32X601的I2C模块操作EEPROM详解

    国科安芯推出的AS32X601系列MCU芯片内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设备的通讯。I2C总线
    的头像 发表于 12-21 21:39 1535次阅读
    AS32X601的<b class='flag-5'>I2C</b>模块操作EEPROM详解

    I2C总线协议

    I2C 总线使用两根信号线(数据线 SDA 和时钟线 SCL)在设备间传输数据。SCL 为单向时钟线,固定由主机驱动。SDA 为双向数据线,在数据传输过程中由收发两端分时驱动。 I2C 总线
    发表于 12-15 08:07

    I2C死锁的问题

    的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。 而对于I2C主设备来说,复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL
    发表于 12-04 06:00

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议属于半双工协议(即同一时刻,数据单向流动)。此外
    的头像 发表于 08-21 15:10 3860次阅读
    深入剖析<b class='flag-5'>I2C</b>协议

    嵌入式接口通识知识之I2C接口

    4.1 基本概念I2C的全称是Inter-Integrated Circuit,译为集成电路总线,是一种同步、双向、半双工的两线式串行接口总线。连接到
    发表于 08-14 14:46

    I2C总线通信,为什么要进行电气隔离?

    I2C总线采用双向二线制,支持多主机多从机通信,具备高可靠性、抗干扰能力强,广泛应用于嵌入式系统中。
    的头像 发表于 08-11 11:04 2648次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b>通信,为什么要进行电气隔离?

    高效率、6通道、白光LED驱动器,带I2C接口 skyworksinc

    电子发烧友网为你提供()高效率、6通道、白光LED驱动器,带I2C接口相关产品参数、数据手册,更有高效率、6通道、白光LED驱动器,带I2C接口的引脚图、接线图、封装手册、中文资料、英
    发表于 07-30 18:31
    高效率、6通道、白光LED驱动器,带<b class='flag-5'>I2C</b><b class='flag-5'>接口</b> skyworksinc

    简单了解I2C接口

    在电子电路的复杂世界里,各种电路模块设备需要相互通信才能协同工作 ,I2C接口就像是电路模块设备间的沟通桥梁,今天就带大家深入了解它。
    的头像 发表于 05-08 14:15 2790次阅读
    简单了解<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>