文章目录

  • 一、了解I2C总线协议
  • 二、实现AHT20采集程序
  • 三、温湿度采集——OLED显示
  • 三、总结
  • 四、参考链接

一、了解I2C总线协议

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

2.I2C 协议的物理层和协议层
物理层
I2C是一个支持设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。对于I2C 总线,只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。

协议层

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

通讯的起始和停止信号

数据有效性

(1)从图中可以看出I2C在通讯的时候,只有在SCL处于高电平时,SDA的数据传输才是有效的。SDA 信号线是用于传输数据,SCL 信号线是保证数据同步。
(2)当SDA传输数据后,接收方对接受到的数据进行一个应答。如果希望继续进行传输数据,则回应应答信号(低电平),否则回应非应答信号(高电平)。
3.I2C的两种方式——硬件I2C和软件I2C
硬件I2C
直接利用 STM32 芯片中的硬件 I2C 外设。
软件I2C
直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

二、实现AHT20采集程序

1.了解AHT20芯片的相关信息
具体信息请到官方下载对应产品介绍文档,资料链接如下
http://www.aosong.com/class-36.html
2.具体代码添加过程
在野火提供的示例代码中,打开一个只包含固件库的空项目。向工程中添加相关代码,添加代码的具体内容请参考下面链接:https://blog.csdn.net/hhhhhh277523/article/details/111397514

完整代码

3主要代码的分析
AHT20芯片的使用过程

void  read_AHT20_once(void)
{delay_ms(10);reset_AHT20();//重置AHT20芯片delay_ms(10);init_AHT20();//初始化AHT20芯片delay_ms(10);startMeasure_AHT20();//开始测试AHT20芯片delay_ms(80);read_AHT20();//读取AHT20采集的到的数据delay_ms(5);
}

AHT20芯片读取数据

void read_AHT20(void)
{uint8_t   i;for(i=0; i<6; i++){readByte[i]=0;}I2C_Start();//I2C启动I2C_WriteByte(0x71);//I2C写数据ack_status = Receive_ACK();//收到的应答信息readByte[0]= I2C_ReadByte();//I2C读取数据Send_ACK();//发送应答信息readByte[1]= I2C_ReadByte();Send_ACK();readByte[2]= I2C_ReadByte();Send_ACK();readByte[3]= I2C_ReadByte();Send_ACK();readByte[4]= I2C_ReadByte();Send_ACK();readByte[5]= I2C_ReadByte();SendNot_Ack();//Send_ACK();I2C_Stop();//I2C停止函数//判断读取到的第一个字节是不是0x08,0x08是该芯片读取流程中规定的,如果读取过程没有问题,就对读到的数据进行相应的处理if( (readByte[0] & 0x68) == 0x08 ){H1 = readByte[1];H1 = (H1<<8) | readByte[2];H1 = (H1<<8) | readByte[3];H1 = H1>>4;H1 = (H1*1000)/1024/1024;T1 = readByte[3];T1 = T1 & 0x0000000F;T1 = (T1<<8) | readByte[4];T1 = (T1<<8) | readByte[5];T1 = (T1*2000)/1024/1024 - 500;AHT20_OutData[0] = (H1>>8) & 0x000000FF;AHT20_OutData[1] = H1 & 0x000000FF;AHT20_OutData[2] = (T1>>8) & 0x000000FF;AHT20_OutData[3] = T1 & 0x000000FF;}else{AHT20_OutData[0] = 0xFF;AHT20_OutData[1] = 0xFF;AHT20_OutData[2] = 0xFF;AHT20_OutData[3] = 0xFF;printf("读取失败!!!");}printf("\r\n");//根据AHT20芯片中,温度和湿度的计算公式,得到最终的结果,通过串口显示printf("温度:%d%d.%d",T1/100,(T1/10)%10,T1%10);printf("湿度:%d%d.%d",H1/100,(H1/10)%10,H1%10);printf("\r\n");
}

结果

三、温湿度采集——OLED显示

1. 添加OLED显示代码

下载链接:https://github.com/Sunlight-Dazzling/stm32_AHT20_OLED/tree/main/User/usart
2添加功能代码
bsp_i2c.c中添加:

#include "bsp_i2c.h"
#include "delay.h"uint8_t   ack_status=0;
uint8_t   readByte[6];
uint8_t   AHT20_status=0;uint32_t  H1=0;  //Humility
uint32_t  T1=0;  //Temperatureuint8_t  AHT20_OutData[4];
uint8_t  AHT20sendOutData[10] = {0xFA, 0x06, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF};

增加show_info函数,这个函数是将信息显示到OLED屏上的。

void show_info(){GUI_ShowCHinese(10,10,16,"张赟",1);GUI_ShowString(10,30,"631907060331",16,1);GUI_ShowString(5,50,"tem:",16,1);GUI_ShowNum(40,50,T1/100,1,16,1);GUI_ShowNum(49,50,(T1/10)%10,1,16,1);GUI_ShowString(56,50,".",16,1);GUI_ShowNum(58,50,T1%10,1,16,1);GUI_ShowString(70,50,"wet:",16,1);GUI_ShowNum(100,50,H1/100,1,16,1);GUI_ShowNum(109,50,(H1/10)%10,1,16,1);GUI_ShowString(116,50,".",16,1);GUI_ShowNum(118,50,H1%10,1,16,1);
}

main函数

int main(void)
{   delay_init();         uart_init(115200);     IIC_Init();NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     OLED_Init();                     //初始化OLED  OLED_Clear(0);             //清屏(全黑)while(1){printf("温度湿度显示");read_AHT20_once();//读取温湿度show_info();//显示delay_ms(5000);//延时OLED_Clear(0);//清屏read_AHT20_once();//读取温湿度show_info();delay_ms(5000);OLED_Clear(0);}
}

3.显示自己的学号和姓名
点阵字库生成工具:https://pan.baidu.com/s/1bBjj-yzrJO-8J3yq8Jlohg
提取码:2000

用工具生成字模,张赟存储代码:

实现显示代码,放在gui.c的oledfont.h里面。

运行结果

三、总结

本实验主要是学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。

四、参考链接

https://blog.csdn.net/qq_43279579/article/details/111597278

https://blog.csdn.net/qq_55691662/article/details/121570226?spm=1001.2014.3001.5501

STM32通过I2C接口实现温湿度(AHT20)的采集与OLED显示及显示姓名学号相关推荐

  1. STM32通过I2C接口采集温湿度

    目录 一.I2C总线协议 1. I2C总线简介 1.1 物理接口 1.2 通讯特征 1.3 I2C总线状态 2. I2C总线通信协议 2.1 起始位和结束位 2.2 数据格式与应答 2.3 数据传输通 ...

  2. 10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据

    10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据.

  3. 树莓派体验12 - 树莓派I2C接口获取温湿度

    i2c-tools工具安装 apt-get install i2c-tools i2c-tools包含如下命令: i2cdetect  i2cdump    i2cget     i2cset 通过r ...

  4. stm32f10x通过I2C接口实现温湿度(AHT20)的采集及显示

    目录 一.I2C通信协议 1.协议简介 2.I2C总线特点 3.I2C工作原理 二. I2C实现方式 1.软件I2C 2.硬件I2C 3.硬软件I2C比较 三.温湿度数据采集 1.实验要求 2.主要代 ...

  5. STM32基于I2C温湿度采集

    目录 一.题目要求 二.关于I2C 1.什么IIC 2.IIC的主要特点 3.IIC协议数据传输过程 三.关于DHT20 1.概述 2.引脚参数 四.DHT20温湿度采集 1.程序代码分析 2.实验效 ...

  6. STM32基于SPI接口的OLED数据显示

    文章目录 一.SPI简介 1.1 什么是SPI 1.2 SPI原理 1.3 SPI的连接方式 1.4 协议层 二.OLED 2.1 OLED原理 2.2 点阵编码原理与显示 三.OLED显示实验 3. ...

  7. 基于IIC和SPI协议的温湿度采集与OLED显示

    前言 环境 KEIL:5.0 FIyMcu:V0.993 开发板:STM32F103C8T6 器件 AHT-20 温湿度传感器 0.96英寸OLED屏幕 任务1内容 学习I2C总线通信协议,使用STM ...

  8. stm32通过I2C实现温湿度(AHT20)采集

    目录 一.I2C总线通信协议 1.1 I2C介绍 1.2 I2C物理层 1.3.I2C协议层 1.4.软件IIC和硬件IIC 1.5 IIC数据传送 1.6 IIC发送数据 1.7 IIC读数据: 二 ...

  9. I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集

    I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集 一实验要求 二.12C总线通信协议 1.12C介绍 2.I2C物理层 3.I2C协议层 4.软件IIC和硬件IIC 三.STM ...

最新文章

  1. 文件控制块的三类信息
  2. Asp.net 性能监控之压测接口“卡住” 分析
  3. poj 2079(旋转卡壳)
  4. Windows的空格预览神器 | QuickLook
  5. ios学习:Xcode工具
  6. MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制
  7. 【密码学基础】05 有限域
  8. TCP 报文段首部格式讲解
  9. 中国交通标志检测数据集
  10. 马克思主义基本原理知识框架图——政治经济学中各种资本的划分
  11. 在项目中如何做图片优化
  12. 一文详解elasticsearch的索引生命周期管理—rollover+curator—ilm
  13. jsoup的简单实用兼谈一个简单的汇率查询(原创)
  14. 0.96OLED图标取模,包括信号图标,蓝牙图标,闹钟,电池
  15. 【Spring框架一】——Spring框架简介
  16. 《吃透 MQ 系列》之扒开 Kafka 的神秘面纱
  17. qLabel 字体大小不受控制
  18. iOS学习—iOS长按手势事件
  19. 724便利店系统完整项目及讲解
  20. 【设计模式】我终于读懂了观察者模式。。。

热门文章

  1. Novavax向美国提交新冠疫苗紧急使用授权申请;西门子医疗发布最新业绩 | 医药健闻...
  2. C++循环输出M * N 的螺旋矩阵
  3. 新加坡内推 | Motional新加坡分部招聘自动驾驶感知算法实习生
  4. 两个字符串首尾相连,查看是否相同
  5. YOLOV3 网络结构学习笔记
  6. 操作系统文件管理之FCB
  7. hadoop和spark HA部署
  8. opencv 图像上画出目标运动的轨迹_OpenCV视频分析-Meanshift、Camshift运动轨迹绘制...
  9. 【42】android Context深度剖析
  10. hadoop设置java环境_Hadoop环境安装设置