基于I2C协议的AHT20温湿度传感器的数据采集
文章目录
- 一、I2C相关
- 1、I2C总线简介
- 工作原理
- 总线特征
- 2、I2C协议简介
- 软件I2C
- 硬件I2C
- 二者比较
- 二、基于I2C的AHT20温湿度采集实验
- AHT20简介
- 1、实验要求
- 2、实验元件
- 3、实验过程
- 连接实验元件
- 实验代码
- 烧录程序
- 温湿度采集
- 四、总结
一、I2C相关
1、I2C总线简介
- I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
- I2C总线物理拓扑结构
I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
工作原理
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出,需通过上拉电阻接电源VCC。
当总线空闲时,两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路。在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容,而线路中电容会影响总线传输速度。当电容过大时,有可能造成传输错误。所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
总线特征
在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为I2C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。
I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。
I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时间。
连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。
总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。
2、I2C协议简介
I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
I2C协议包括“软件I2C”和“硬件I2C”
软件I2C
将芯片的两个GPIO引脚分别用作SCL及SDA,按照I2C的时序要求,直接控制引脚的输出信号(若是接收数据时则读取 SDA 电平),就可以实现I2C通讯。由于是直接控制GPIO引脚的高低电平产生通讯时序,需要由CPU控制每个时刻的引脚状态,所以称为“软件模拟协议”方式即软件I2C方式。
硬件I2C
硬件I2C对应芯片上的I2C外设,具有相应的I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C,但是程序较为繁琐。硬件I2C是直接调用内部寄存器进行配置。
对于硬件I2C来说,它需要I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生I2C的通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作负担,并且使软件开发更简单。
二者比较
- 硬件I2C用法比较复杂,模拟I2C的流程更清楚一些。
- 硬件I2C速度比模拟快,并且可以用DMA。
- 硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
- 模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册。因为固件I2C的端口是固定的,所以会有所区别。
- 模拟I2C可以在任何管脚上,而硬件只能在固定管脚上。
软件I2C是程序员使用程序控制SCL、SDA线输出高低电平,模拟I2C协议的时序。一般较硬件I2C稳定,但是程序较为繁琐,但不难。 硬件I2C程序员只要调用I2C的控制函数即可,不用直接的去控制SCL、SDA高低电平的输出。但是有些单片机的硬件I2C不太稳定,调试问题较多。
如何区分软件I2C和硬件I2C
- 可以看底层配置,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否则就是模拟。
- 可以看IIC写函数,看里面有没有调用现成的函数或者给某个寄存器赋值,如果有,则肯定是固件IIC功能,没有的话肯定是数据一个bit一个bit模拟发生送的,肯定用到了循环,则为模拟。
- 根据代码量判断,模拟的代码量肯定比固件的要大。
二、基于I2C的AHT20温湿度采集实验
AHT20简介
AHT20是国内奥松生成的I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。
由于AHT10/15/20 具有国产化、体积小、精度高、成本低等特点,可以替代 DHT11/DHT12/AM2320/SHT20/SHT30,单芯片价格在¥2~3,体积小巧很轻松嵌入到产品上。
1、实验要求
每隔2秒钟采集一次温湿度数据
并通过串口发送到上位机(win10)
2、实验元件
AHT20集成式温湿度传感器
野火指南者开发板
3、实验过程
连接实验元件
将AHT20温湿度传感器与野火指南者开发板连接
管脚连接:
连接好后如下
实验代码
源代码地址链接:https://github.com/Thee24LYJ/STM32_AHT20
打开USER文件中的keil文件
main.c程序如下
#include "led.h"
#include "delay.h"
#include "temhum.h"
#include "sys.h"
#include "usart.h"int main(void){ u32 CT_data[2]={0};volatile float hum=0,tem=0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口初始化为115200LED_Init(); //LED端口初始化temphum_init(); //ATH20初始化 while(1){AHT20_Read_CTdata(CT_data); //不经过CRC校验,直接读取AHT20的温度和湿度数据 hum = CT_data[0]*100*10/1024/1024; //计算得到湿度值(放大了10倍)tem = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)printf("湿度:%.1f%%\r\n",(hum/10));printf("温度:%.1f度\r\n",(tem/10));printf("\r\n");//延时2s,LED闪烁提示串口发送状态LED=0;delay_ms(1000);LED=1;delay_ms(1000);}
}
编译运行,生成.hex文件
烧录程序
用USB线将指南者开发板与电脑相连
打开mcuisp烧录软件,选中要进行烧录的.hex文件,进行如下设置
烧录成功
温湿度采集
打开串口调试助手查看温湿度
每隔2秒钟采集一次温湿度数据:
捂住温湿度传感器,数据发生改变:
四、总结
以上便完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。
基于I2C协议的AHT20温湿度传感器的数据采集相关推荐
- STM32F103基于I2C协议的AHT20温湿度传感器的数据采集
目录 一.I2C 1.I2C 协议简介 2.I2C 物理层 3.协议层 通讯的起始和停止信号 数据有效性 响应 4. 软件I2C"和"硬件I2C 二.实现AHT20采集程序 1.A ...
- STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集
文章目录 一.I2C总线通讯协议 1.I2C总线简介 2.I2C 协议的物理层和协议层 2.1物理层 2.2协议层 3.I2C的两种方式--硬件I2C和软件I2C 3.1硬件I2C 3.2软件I2C ...
- STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出
文章目录 前言 一.I2C总线通信协议 1.I2C总线 2.工作原理 3.I2C特点 4.I2C模式选择 5.软件I2C和硬件I2C 二.串口输出温湿度传感器的数据 1.核心代码分析 2.硬件实操连接 ...
- STM32F103完成基于I2C协议的AHT20温湿度传感器数据采集
目录 一.I2C总线协议 二.实现AHT20采集程序 三.总结 一.I2C总线协议 1.什么是I2C总线? I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在 ...
- 用STM32F103达成基于I2C协议的AHT20温湿度传感器和OLED屏显示汉字
目录 一 I2C协议简介 硬件I2C与软件I2C 二 代码和ATH20芯片实现温湿度的串口显示 三 用stm32f103芯片的SPI和IIC接口接上OLED屏显示中文姓名温湿度 1 先用文字字模生成器 ...
- 基于I2C硬件协议的AHT20温湿度传感器的数据采集
基于I2C的温湿度采集 硬件I2C和软件I2C 温湿度采集 任务要求 硬件连接 添加代码 最终效果 硬件I2C和软件I2C 硬件I2C对应芯片上的baiI2C外设,有相应I2C驱动电路,其所使用的I2 ...
- 基于I2C的AHT20温湿度传感器的数据采集
一.I2C简介 二.软件I2C和硬件I2C 三.AHT20简介 四.基于stm32的AHT20温湿度传感器的数据采集 五.总结 一.I2C简介 I2C(芯片间)总线接口连接微控制器和串行I2C总线.它 ...
- AHT20温湿度传感器的数据采集
目录 一.AHT20温度传感器数据采集 1.目的 2.准备条件 3.1实现代码 3.2连接器件 3.3编译烧录 3.4运行结果 二.OLED屏显和汉字点阵编码 1.目的 使用STM32F103的SPI ...
- 基于I2C硬件协议的AH20温湿度传感器的数据采集
目录 I2C 温湿度传感器数据采集 实验准备 实验步骤: 实验结果: I2C I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实 ...
最新文章
- html中的两种标记,如何在html选项标记中实现两种不同的对齐?
- 把XML文件转换为字符串
- layui fixbar 返回顶部_FANUC 数控系统机床返回参考点功能的应用研究
- linux中python编译器的配置_linux下配置python3详解
- 递归-递归实现数字累加
- Whois查询接口文档
- arcgis api for js入门开发系列十八风向流动图
- 怎么压缩图片大小,压缩图片大小的小妙招
- HDU-3533 Escape
- 软件需求分析——非功能性需求
- android查看签名工具,签名获取工具app_apk签名工具安卓版_手机apk签名工具安卓版-多特软件站安卓网...
- 触发器:建立时间和保持时间
- 大数据应用型产品设计方法及行业案例介绍(附110页PPT)
- 良心推荐:看完这10部豆瓣高分美剧,英语水平提升几个Level!
- SOA 快速指南 1 2 3(转IBM developerWorks 中国) 4
- python实现最大独立集算法_2018校招总结(外企,国内大公司,国内创业公司)...
- [Transformer]On the Relationship between Self-Attention and Convolutional Layers
- c 语言常用的注释方法,注释方法用法 _C语言-w3school教程
- 基于Vue.js 的天天影视云视听平台的设计
- 求栈中元素个数算法_精妙的算法——计算二进制中1的个数
热门文章
- Spring 数据处理中的事务级别
- ggplot2画组合图
- 时间比较方法DateTime.Compare
- 服务器直接可以做无盘系统吗,云服务器支持无盘系统吗
- 向量加减法运算及其几何意义
- android画板控件,GitHub - imaiya/PainterView: Android画板控件,可以写字画画并生成图片...
- QML 地图修改插件源码(一)解决Map使用Open Street Map(OSM)无法加载在线地图的解决办法
- Phoenix常用命令
- 126邮箱发送邮件含超链接
- Java函数式编程神器 VAVR(vavr - turns java™ upside down)