STM32103C8通过IIC采集温度(基于AHT20)

2023-10-11 05:40

本文主要是介绍STM32103C8通过IIC采集温度(基于AHT20),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过IIC采集温度

  • 一、IIC
    • 1.1 IIC介绍
    • 1.2 通信原理
    • 1.3 分类
  • 二、实现采集
  • 三、屏显
  • 四、总结
  • 五、参考资料

一、IIC

1.1 IIC介绍

IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”(“I-squared-C”),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。

1.2 通信原理

  1. 主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止
  2. 条件结束。起始条件和停止条件都是在主模式下由软件控制产生。
  3. 从模式时,I2C接口能识别它自己的地址(7位或10位)和广播呼叫地址。软件能够控制开启或禁止广播呼叫地址的识别。
  4. 数据和地址按8位/字节进进行传输,高位在前。跟在起始条件后的1或2个字节是地址(7位模式为1个字节,10位模式为2个字节)。地址只在主模式发送。
  5. 在一个字节传输的8个时钟后的第9个时钟期间,接收器必须回送一个应答位(ACK)给发送器。

1.3 分类

在使用IIC时,有两种使用方法,第一种是硬件IIC,即通过硬件上的IIC接口发送数据,第二种是软件IIC,通过控制GPIO接口的输出来模拟IIC,就如通信原理图一般这次使用的软件IIC,硬件IIC速度更快,但软件IIC更灵活。

二、实现采集

实现代码是使用的是学姐的代码,她用的是rct6需要更换设备和更改内存大小
这个方法不再赘述,在我的另一篇文章当中有讲:

https://blog.csdn.net/qq_54658073/article/details/121566301?spm=1001.2014.3001.5501

然后我们看一下代码

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");
}

这里的注释已经写得很明显了,读取温湿度并通过usart串口发送信息回来
再看一下bsp_i2c.h里面关于SDA和SCL的定义,这两个就是对应要接的引脚

PB6接SCL
PB7接SDA

运行结果:
在这里插入图片描述

三、屏显

这个实验其实就是将oled显示的实验中的显示屏显示与这个实验相结合。
增加一个屏显函数

void show_info(){GUI_ShowCHinese(10,10,16,"温湿度显示",1);GUI_ShowString(5,50,"温度显示:",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,"湿度显示:",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);}
}

显示效果
在这里插入图片描述

四、总结

I2C总线是一种简单双向二进制同步串行总线,只需两根双向I/O线即可以实现连接在总线上的器件之间的信息传递。这是非常简单的。但是对于代码的理解还是没有特别深入。特别是对于两个实验相结合的时候,我一直不行。还好是在学长学姐的博客的帮助下,还是解决了这个问题。原来是没有吧OLED显示实验的头文件什么的导入进来,导致了两个实验的冲突。

五、参考资料

https://blog.csdn.net/qq_43279579/article/details/111597278?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163713884016780357227434%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163713884016780357227434&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-3-111597278.pc_v2_rank_blog_default&utm_term=%E6%B8%A9%E6%B9%BF%E5%BA%A6&spm=1018.2226.3001.4450
https://blog.csdn.net/junseven164/article/details/121384743?spm=1001.2014.3001.5501

这篇关于STM32103C8通过IIC采集温度(基于AHT20)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185943

相关文章

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬

Python 爬虫入门 - 基础数据采集流程拓展

在网络爬虫的世界里,数据就是一切。通过爬虫技术,你可以自动化地收集各种类型的公开数据,从文本和图片到复杂的结构化信息,这些数据为各类分析和应用提供了基础。 本教程将引导你深入了解爬虫可以采集的数据种类,如何有效地获取这些数据,并探讨如何使用代理服务来规避限制与增强爬虫的灵活性。无论是初学者还是有经验的开发者,这些知识都将帮助你在网络数据采集中更加游刃有余。 文章目录 可采集的数据基本操作

景联文科技:专业图像采集服务,助力智能图像分析

景联文科技是专业数据服务公司,致力于为人工智能企业提供从数据采集、清洗到标注的全流程解决方案。协助客户解决AI开发过程中数据处理环节的关键问题,助力企业实现智能化转型。 1.多样化的图像采集服务 景联文科技提供多样化的图像采集服务,涵盖不同应用场景和需求: •高分辨率图像采集:适用于高质量图像需求,如医学影像、工业检测等。 •实时图像采集:适用于需要实时处理的应用场景,如安防监

大隈设备采集

大隈(OKUMA)荣一在名古屋东区成立自己的私人公司,开始制造、销售制面机械。下面是社长的一些介绍:我司自1898年生产·销售制面机开始创业以来,秉承若所需之物世间尚无,必不妥协,独自创造的“破土创新”精神,并将其一脉相承,于1904年开始进行机床的生产。自创业以来,历经120余年,从未间断对先进技术和产品的开发。1963年,作为日本机床制造商,首次自主研发出数控装置“OSP”,利

优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策略

当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如 temperature 和 top_p 等参数进行精确控制。但是你是否曾深入思考过temperature和top_p参数的具体作用? 本文将详细解析并可视化定义LLM输出行为的

【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264

转载自:http://www.cnblogs.com/CoderTian/p/6224605.html MainActivity.java import android.app.Activity;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera

飓风算法2.0上线,百度熊掌号官方说严厉打击恶劣采集行为

飓风算法2.0上线,百度熊掌号官方说严厉打击恶劣采集行为 2018年9月13日百度搜索资源平台发文百度搜索将严厉打击恶劣采集行为,推出飓风算法 2.0。 飓风算法由来 飓风算法是当年百度官方针对恶劣采集为内容主要来源的网站,而推出的一种搜索引擎算法。 飓风算法2.0上线 为了营造良好的搜索内容生态,保护搜索用户的阅读浏览体验,保障优质内容生产方在百度搜索中的权益,百度搜索官方公告将于

【STM32+HAL库】---- 硬件IIC驱动0.96OLED

硬件开发板:STM32G0B1RET6软件平台:cubemax+keil+VScode 内容原著声明 代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置引脚 1.3 导出工程 略… 2 代码 2.1 OLED_IIC_Config.h /*** **