I2C通信原理

简介: I2C通信原理

I2C通信原理

 I2C(Inter-Integrated Circuit)通信协议是一种用于连接微控制器、传感器、存储器等设备的串行通信协议。它采用双线制,包括数据线(SDA)和时钟线(SCL),允许多个设备通过同一总线进行通信。在 I2C 中,每个设备都有一个唯一的地址,用于在总线上进行识别和通信。

I2C 通信基于主从架构,其中一个设备充当主设备(通常是微控制器),负责控制总线上的通信和传输数据,而其他设备则充当从设备,通过主设备发送的命令来执行操作或提供数据。

通信过程包括起始信号、地址传输、数据传输和停止信号等阶段:

² 起始信号(Start): 主设备发出一个低电平的 SDA 信号,同时 SCL 信号保持高电平,表示通信即将开始。

 

² 地址传输: 主设备发送从设备的地址和读写位,指示要与哪个设备通信以及是读操作还是写操作。

 

² 数据传输: 根据读写位的状态,主设备或从设备发送或接收数据。在每个时钟周期中,数据都在 SDA 线上被传输,并由 SCL 信号控制时序。

 

² 停止信号(Stop): 主设备发出一个高电平的 SDA 信号,同时 SCL 信号保持高电平,表示通信结束。

 

以下是一个基本的 Python 示例代码,演示了如何使用 Raspberry Pi 进行 I2C 通信来读取连接的温度传感器(BMP180)的数据:

image.png

image.png

首先,我们导入了两个必要的库:smbus 用于访问系统总线,以及 time 用于添加一些延时

image.png

接着,我们定义了连接的 BMP180 温度传感器的设备地址:

image.png

然后,我们创建了一个 SMBus 对象,它代表着系统总线。在树莓派上,通常是总线编号 1(Raspberry Pi 3及以后的版本),但如果你使用的是较早的版本,可能需要将 1 改为0;

image.png

接下来,我们定义了初始化 BMP180 的函数 init_bmp180()。在这个函数中,我们通过向控制寄存器写入 0x2E 命令,启动温度测量。之后,我们通过 time.sleep(0.005) 延时 5 毫秒,以确保传感器有足够的时间完成温度测量。

image.png

最后,在主程序中,我们通过调用 init_bmp180() 初始化传感器,然后调用 read_temperature() 读取温度值。请注意,这里的打印语句只是简单地输出原始的温度数据,实际上你可能需要根据 BMP180 数据手册中的说明来进行进一步的转换和处理。

image.png

这个代码示例提供了一个基本框架,用于通过 I2C 通信读取连接到树莓派上的 BMP180 温度传感器的原始数据。在实际应用中,你可能需要根据传感器的规格,将原始数据转换为实际的温度值,这通常需要查阅传感器的数据手册。希望这能帮助你更好地理解 I2C 通信原理和代码实现。

目录
相关文章
|
1月前
|
数据采集 传感器 运维
T-BOX怎么选不踩坑?2025年主流品牌评测与推荐指南
在工业设备智能网联化加速背景下,T-BOX选型成关键。本文基于实测与应用反馈,解析2025年主流品牌表现,聚焦树根科技T-BOX方案:硬件多型号适配、软硬一体协同、平台易用性强、全球合规认证齐全,助力企业实现设备远程管理、预防性维护与全球化部署,提供高性价比、低运维成本的数智化路径,是避免数据孤岛、提升资产效率的优选参考。
116 0
|
移动开发 Linux 开发工具
git diff ^M不同操作系统下换行符统一的小知识
不同操作系统下的换行不一致,当一个项目的开发者分别再linux/mac/win下做了代码提交改动之后,使用git diff命令时,可能会发现,即便啥也没改,当时有很多变动,显示^M的差别 主要原因就是换行的问题 解决这个问题的一个办法就是统一换行 今天介绍的一个小技巧就是通过设置全局的换行来实现多操作系统的换行符统一
1617 0
|
9月前
|
人工智能 安全 测试技术
本周 AI Benchmark 方向论文推荐
由北京大学和微软亚洲研究院的魏李等人提出的 FEA-Bench,是一个专为评估大型语言模型(LLMs)在代码库级别进行增量开发能力的基准测试。它从 83 个 GitHub 仓库中收集了 1,401 个任务实例,专注于新功能的实现。研究表明,即使是先进的 LLMs 在此任务中的表现仍远低于预期,揭示了仓库级代码开发的重大挑战。
477 0
|
8月前
|
数据采集 人工智能 自然语言处理
AI终于能听懂宝宝说话了!ChildMandarin:智源研究院开源的低幼儿童中文语音数据集,覆盖22省方言
ChildMandarin是由智源研究院与南开大学联合推出的开源语音数据集,包含41.25小时3-5岁儿童普通话语音数据,覆盖中国22个省级行政区,为儿童语音识别和语言发展研究提供高质量数据支持。
930 20
AI终于能听懂宝宝说话了!ChildMandarin:智源研究院开源的低幼儿童中文语音数据集,覆盖22省方言
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(二):CKPT 转换成 PB格式文件
将TensorFlow的CKPT模型格式转换为PB格式文件,包括保存模型的代码示例和将ckpt固化为pb模型的详细步骤。
304 2
深度学习之格式转换笔记(二):CKPT 转换成 PB格式文件
|
传感器 安全 Java
了解SENT协议及其应用
了解SENT协议及其应用
532 15
|
传感器 存储 Java
一起玩转树莓派(17)——BMP180数字压力传感器应用
BMP180是一款高级的温度气压传感器,通过测量的气压值也可以计算出当前海拔高度。其压力测量范围为300-1100hPa,对应的海拔高度为正9000m-负500m。工作电压在1.8V到3.6V之间。体积小,精度高,采用I2C接口,使用非常方便。BMP180传感器在GPS导航,天气检测,海拔测量和垂直方向速度检测等方面有广泛的应用。本实验,我们尝试使用树莓派的I2C接口来读取BMP180的温度和气压值,并进行海拔高度的计算。
18361 0
|
Shell Windows
vscode添加gitbash终端(最新)
vscode添加gitbash终端(最新)
1248 1
|
Windows
HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.
HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.
494 0
|
存储 资源调度 JavaScript
深入浅出Node.js中的node_modules(三)
深入浅出Node.js中的node_modules