基于I2C硬件协议的AHT20温湿度传感器的数据采集

news/2024/6/3 17:00:57 标签: 嵌入式, 传感器, 单片机, 物联网, stm32

基于I2C硬件协议的AHT20温湿度传感器的数据采集

    • 一、I2C协议简介
      • 1、I2C物理层
      • 2、I2C协议层
    • 二、软件I2C和硬件I2C
      • (1)软件I2C
      • (2)硬件I2C
    • 三、AHT20温湿度传感器的数据采集
    • 四、参考资料

一、I2C协议简介

2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件 实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛 地使用在系统内多个集成电路(IC)间的通讯。

1、I2C物理层

I2C 通讯设备之间的常用连接方式见图

在这里插入图片描述

它的物理层有如下特点:

(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线 中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。

(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之 间的访问。

(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空 闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用 总线。

(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式 下可达 3.4Mbit/s,但目前大多 I 2C 设备尚不支持高速模式。

(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

2、I2C协议层

I2C 的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地 址广播等环节。

I2C 通讯过程的基本结构

在这里插入图片描述

二、软件I2C和硬件I2C

(1)软件I2C

所谓软件模拟,即直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平。 如控制产生 I2C 的起始信号时,见图 24-5,先控制作为 SCL 线的 GPIO 引脚输出高电平, 然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制 SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

(2)硬件I2C

硬件 I2C 是指直接利用 STM32 芯片中的硬件 I2C 外设,该硬件 I2C 外设跟 USART 串口外设类似,只要配置好对应的寄存器,外设就会产生标准串口协议的时序。使用它的 I2C 外设则可以方便地通过外设寄存器产生 I2C 协议方式的通讯,如初始化好 I2C 外设后, 只需要把某寄存器位置 1,那么外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号, 而不需要内核直接控制引脚的电平。

三、AHT20温湿度传感器的数据采集

(1)实验工具

——温湿度传感器AHT20

——单片机:STM32F103系列单片机(野火mini)

(2)主要代码

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);	 //串口初始化为115200
    LED_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);
	 }
}

代码参考:

AHT20的DEMO板的例程资料

(3)实验结果在这里插入图片描述

对着传感器呼气有明显的温湿度变化,说明实验成功

在这里插入图片描述

四、参考资料

《零死角玩转STM32——MINI》

基于I2C通信协议的温湿度采集


http://www.niftyadmin.cn/n/1295183.html

相关文章

eclipse java文件中ServletActionContext.getServletContext()报找不到getServletContext()方法

在eclipse中ServletActionContext.getServletContext()报找不到getServletContext()方法。 我在我导入的struts2-core.jar中找到了getServletContext()但还是提示ServletActionContext里没有getServletContext()方法。后来经过搜索才知道原来是少了servl…

使用Ardunio IDE实现STM32的串口通信

使用Ardunio IDE实现STM32的串口通信一、安装Ardunio IDE二、Ardunio IDE配置STM32F10X的开发环境及配置三、Ardunio IDE的串口通信四、实验结果展示五、参考链接一、安装Ardunio IDE 不知道在哪儿下载Ardunio IDE的同学们可以直接通过网盘进行下载 链接:https://…

大数据的存储和管理

任何机器都会有物理上的限制:内存容量、硬盘容量、处理器速度等等,我们需要在这些硬件的限制和性能之间做出取舍,比如内存的读取速度比硬盘快得多,因此内存数据库比硬盘数据库性能好,但是内存为2GB的机器不可能将大小为…

计算机网络验证性实验

计算机网络验证性实验一、使用ipconfig命令二、使用ping命令三、使用tarcert命令四、使用ARP命令五、DHCP六、netstat七、DNS八、cache一、使用ipconfig命令 ①使用ipconfig命令查看本机的网络配置 ②使用ipconfig命令查看旁边电脑的网络配置 要判断是否在同一子网下&#x…

C# 图片与byte[]之间以及byte[]与string之间的转换

using System; using System.IO; using System.Drawing; using System.Windows.Forms; using System.Drawing.Imaging;public class ImageConvert {//主要通过Stream作为中间桥梁public static Image ByteArrayToImage(byte[] iamgebytes){MemoryStream ms new MemoryStream(i…

Wireshark实验

Wireshark实验一、数据链路层二、网络层三、传输层四、应用层参考链接一、数据链路层 ①熟悉Ethernet帧结构 使用wireshark进行任意抓包,熟悉Ethernet帧结构 其中我们会发现wireshark展现给我们的帧中没有校验字段,是因为wireshark抓取的包会自动丢弃掉…

Amdahl

阿姆达尔定律(Amdahl誷 Law) 阿姆达尔定律是由IBM公司的计算机体系结构师吉恩阿姆达尔在1967年发表的论文中提出的。这一定律与供求定律(Low of Supply and Demand)具有同样的意义:如前面的方程式所示,它描…

PCB

PCB图一、软件破解使用二、创建stm32最小系统元件库三、完成管脚绘制四、封装(一)、芯片PCB的封装(二)、芯片SCH的封装(三)、自定义元器件PCB的封装(四)、自定义元器件SCH的封装使用…