AHT20温湿度传感器的数据采集及OLED屏显和汉字点阵编码

目录

一、了解I2C总线协议

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

1.目的

2.准备条件

3.实现代码

4.线路连接

5.烧录

三、OLED屏显和汉字点阵编码

1.目的

2.准备

3.功能实现

3.1  显示自己的学号和姓名

 3.2   显示AHT20的温度和湿度

3.3   上下或左右的滑动显示长字符

四、总结

五、参考资料


一、了解I2C总线协议

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

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

在这里插入图片描述

②协议层

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

通讯的起始和停止信号

在这里插入图片描述

数据有效性

在这里插入图片描述

从图中可以看出I2C在通讯的时候,只有在SCL处于高电平时,SDA的数据传输才是有效的。SDA 信号线是用于传输数据,SCL 信号线是保证数据同步。
响应

在这里插入图片描述

当SDA传输数据后,接收方对接受到的数据进行一个应答。如果希望继续进行传输数据,则回应应答信号(低电平),否则回应非应答信号(高电平)。

3、I2C的两种方式——硬件I2C和软件I2C
①硬件I2C
直接利用 STM32 芯片中的硬件 I2C 外设。

硬件I2C的使用
只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。

②软件I2C
直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

软件I2C的使用
需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

③两者的差别
硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。对于硬件I2C用法比较复杂,软件I2C的流程更清楚一些。如果要详细了解I2C的协议,使用软件I2C可能更好的理解这个过程。在使用I2C过程,硬件I2C可能通信更加快,更加稳定。
 

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

1.目的

使用STM32F103完成基于I2C协议(硬件I2C完成)的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)

2.准备条件

STM32F103C8T6芯片、 AHT20温度传感器、pc机、串口调试助手

3.实现代码

链接:https://pan.baidu.com/s/1TZNBqkWH_aRGktK8Wk8cTA 
提取码:qwer

4.线路连接

GND — GND
5v — 3v3   (左边USB接口一定要接5v接口,否则显示的温湿度为0)
TXD — A10
RXD — A9

 其中SDA接B7;  SCL接B6

5.烧录

烧录结果:

打开串口运行 

 对着芯片呼气,可以发现温湿度都明显提高,实验成功

三、OLED屏显和汉字点阵编码

1.目的

使用STM32F103的SPI或IIC接口实现以下功能

1) 显示自己的学号和姓名; 

2) 显示AHT20的温度和湿度;

3) 上下或左右的滑动显示长字符

2.准备

在上个项目基础上加一块OLED显示屏

 

3.功能实现

3.1  显示自己的学号和姓名

1、实现代码

链接:https://pan.baidu.com/s/1vawtPaudZmzuWdMjImrF3Q 
提取码:qwer

2、修改代码

打开test.c,输入自己的名字和学号

 3、添加点阵字

取模

 修改字体代码

 4、编译烧录并运行

结果:

 3.2   显示AHT20的温度和湿度

1、实现代码

链接:https://pan.baidu.com/s/1fwpkkrHpujE57SGZBOXlmQ 
提取码:qwer

2、编译烧录并运行

结果:

​  ​   

可以看到温湿度有明显变化

3.3   上下或左右的滑动显示长字符

 1、实现代码

链接:https://pan.baidu.com/s/1KhdrhXcBWLVsky-pVAXH_A 
提取码:qwer

2、修改代码

打开test.c,输入自己的一句话

 添加点阵字按照上面步骤即可,这里不再重复

修改点阵字代码

 3、编译烧录并运行

 结果:

四、总结

        在第一个串口显示温湿度实验时,一开始的时候那个USB我接的是3v3接口,结果显示的温湿度全部为0,刚开始我还以为是代码或者是芯片的问题,但通过我逐一排查才发现,USB应该是要接5v接口的,于是我又更改这个接口,然后烧录并运行串口,结果显示的温湿度都正常,这才解决了这个问题。总的来说,本次实验个人觉得是非常有意思的,收获也不少,感觉很棒。

五、参考资料

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

基于STM32的0.96寸OLED显示屏显示数据_HarrietLH的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值