IIC协议读取温湿度数据
一、12C协议相关
1.12C协议简介
I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备(那些电平转化芯片),现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
I2C只有一跟数据总线 SDA(Serial Data Line),串行数据总线,只能一位一位的发送数据,属于串行通信,采用半双工通信。对于I2C通讯协议把它分为物理层和协议层物理层规定通讯系统中具有机械、电子功能部分的特性(硬件部分),确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准(软件层面)。
2.硬件12C
硬件I2C是指使用专门的I2C硬件控制器来实现I2C通信的方式。这些硬件控制器通常集成在微控制器、微处理器或其他专用芯片中。硬件I2C的特点包括:
- 高效性:由于使用硬件控制器,硬件I2C通常更为高效,能够在较高的时钟频率下工作,实现更快的数据传输。
- 实时性: 硬件I2C通常具有更好的实时性能,适用于对时间要求较为严格的应用场景。
- 占用硬件资源: 硬件I2C需要专门的硬件控制器,因此可能占用一定的芯片空间和资源。
- 适用于复杂任务: 由于其高效性和实时性,硬件I2C适用于需要大量数据传输或对通信速度要求较高的场景。
3.软件12C
软件I2C是通过编程方式模拟实现I2C通信的方式,通常使用通用输入输出(GPIO)引脚来模拟I2C的SDA和SCL线。软件I2C的特点包括:
- 灵活性: 软件I2C具有较高的灵活性,因为它可以通过编程调整实现细节,适应不同的硬件环境。
- 资源消耗较小:由于不需要专门的硬件控制器,软件I2C通常占用的硬件资源较少。
- 适用于简单任务: 软件I2C通常适用于较为简单的数据传输任务,例如连接一些简单的传感器或执行基本的通信功能。
- 低成本: 由于不需要专门的硬件支持,软件I2C在成本上可能相对较低。
二、实验工具
1.AHT20简介
2020年上市,奥松生产;
3mmx3mmx1mm 超小体积;
经过标定的数字信号,标准I2C输出格式;
由一个电容式湿度传感元件和一个标准的片上温度传感元件组成;
采用SMD封装适于回流焊;
响应迅速、抗干扰能力强;
*AHT20 的供电范围为 2.0-5.5V, 推荐电压为3.3V。
2.keil5软件
3.STM32芯片
三、编程实现
1:下载驱动函数
驱动函数官网有,包括.c和.h文件。 AHT20集成式温湿度传感器-温湿度传感器-温湿度传感器 温湿度芯片 温湿度变送器模块 气体传感器 流量传感器 广州奥松电子股份有限公司 (aosong.com)
2:修改相应引脚号
我使用的是正点原子的精英版,其SCL和SDL分别对应的就是PB6和PB7,我们用普通IO口来模拟I2C的功能,来实现功能。我们需要修改其引脚函数
以下为主要程序
`#include “stm32f10x.h”
#include “AHT20.h”
#include “myiic.h”
#include “usart.h”
#include “delay.h”
int32_t main(void)
{
uint32_t CT_data[2];
volatile int c1,t1;
SensorDelay_us(40000);//刚上电,延时40ms才可以读取状态
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
delay_ms(40);//刚上电,延时40ms才可以读取状态
if(!((AHT20_Read_Status()&0x80)==0x80))//首先发0x71读取状态字bit[3],如果=1,为校准输出,无须初始化!!! 正常情况下读回来的状态是0x1C或者是0x18,读回来是0x80表示忙状态;
{
AHT20_Init(); //初始化AHT20
}
while(1)
{
AHT20_Read_CTdata(CT_data); //不经过CRC校验,直接读取AHT20的温度和湿度数据 推荐每隔大于1S读一次
c1 = CT_data[0]10010/1024/1024; //计算得到湿度值(放大了10倍)
t1 = CT_data[1]20010/1024/1024-500;//计算得到温度值(放大了10倍)
printf("湿度:%d ",(c1/10));
printf(“温度:%d\n”,(t1/10));
delay_ms(20000);
}
}`
4硬件连接及实验结果