STM32-I2C通讯-AHT20温湿度检测

非常感谢,提供的视频学习
https://www.bilibili.com/video/BV1QN411D7ak/?spm_id_from=333.788&vd_source=8ca4826038edd44bb618801808a5e076

该文章注意:串口显示中文会乱码,必须选用支持ASCII的串口助手,才能正常显示中文。

图形化界面配置好,串口,和I2C
在这里插入图片描述

在这里插入图片描述

首先,给每个外设,都生成.h和.c文件

在这里插入图片描述
在相应文件夹中,建立.h和.c文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
建立ATH20.C文件



#include "AHT20.h"

#define AHT20_ADDRESS 0x70
//这里定义从机地址,由于AHT20从机为0x38。
//因为这个AHT20 ,从机地址为7位,所以需要左移一位,变成8位。
//所以,0x38,左移一位后,变成了0x70


void AHT20_Int()
{
	uint8_t readBuffer;//用来存放,AHT20工作状态是否正常的数据。是否为0x38
	HAL_Delay(50);//由于模块启动,需要等待40ms
	HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);
	//&&hi2c1,表示需要操作的i2c的端口。
	//AHT20_ADDRESS,表示需要操作的从机地址。因为是读取数据,这个函数,会将AHT20——ADDRESS变成0x71
	//&readBuffer,读取到的数据,需要放的地方。
	//1,表示,需要读取1位数据
	// HAL_MAX_DELAY,一直等待下去,直到接收完成。





	if((readBuffer & 0x08)==0x00)	//判断,AHT20,bit[3]是否为1。不为1,就进入程序进行初始化。
	{
		uint8_t sendBuffer[3]={0xBE,0x08,0x00};//需要定义这个数组,存放,初始化的数据。
		HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer,3, HAL_MAX_DELAY);
		//&&hi2c1,表示需要操作的i2c的端口。
		//AHT20_ADDRESS,表示需要操作的从机地址。
		//sendBuffe,需要发送的数据,读取到的数据,需要放的地方。
		//3,表示,需要发送3位数据
		// HAL_MAX_DELAY,一直等待下去,直到发送完成。
	}

}


void AHT20_Red(float *Temperature , float *Humidity)
{
	uint8_t sendBuffer[3]={0xAC,0x33,0x00};
	uint8_t readBuffer[6];

	HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
	//&hi2c1,需要操作I2c的设备
	// AHT20_ADDRESS.温度传感器的I2C地址
	//sendBuffer,需要发送的指令(发送后就可以获得数据)
	// 3,需要发送的数据长度
	//HAL_MAX_DELAY,一直等待发送完成
	HAL_Delay(100);//--------AHT20 接收到信息后,需要等待100ms,让其完成测量

	HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);
	//&hi2c1.获取这个接口的数据。
	//AHT20_ADDRESS,需要获取的从机地址。
	//readBuffer,需要保存到的地址。
	//6,需要保存的数据长度。
	//HAL_MAX_DELAY,一直等待6个数据,保存完成。


	if((readBuffer[0] & 0x80)==0x00)
	{
		uint32_t data=0;
		data=((uint32_t)readBuffer[3]>>4)+((uint32_t)readBuffer[2]<<4)+((uint32_t)readBuffer[1]<<12);
		*Humidity = data * 100.0f / (1<<20);

		data=(((uint32_t)readBuffer[3]& 0xf)<<16)+((uint32_t)readBuffer[4]<<8)+(uint32_t)readBuffer[5];
		*Temperature=data * 200.0f/(1<<20)-50;

	}
}

再建立,AHT20.h这个头文件。



#ifndef INC_AHT20_H_
#define INC_AHT20_H_

#include "i2c.h"	//这个库文件,是这个软件自带的,所以直接引用就好。因为我们的程序种,会用到这个库函数里的内容。
void AHT20_Red(float *Temperature , float *Humidity);
void AHT20_Int();




#endif /* INC_AHT20_H_ */


主程序

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "AHT20.h"
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
//AHT20_Int();
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  AHT20_Int();


  float temperature,humidity;
  char txt[50];



  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

		 AHT20_Red(&temperature, &humidity);
		 sprintf(txt,"温度:%.1f,湿度:%.1f %%",temperature,humidity);
		 HAL_UART_Transmit(&huart2, (uint8_t*)txt, strlen(txt), HAL_MAX_DELAY);

		 HAL_Delay(1000);


	//  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
	//  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

针对这两个趋势,3.0全新新零售商业模式可以采取以下策略:

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

ROS学习笔记(七)---参数服务器

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序&#xff08;简例&#xff09; 03. ROS学习笔记(三)—好用的终端Terminator 04. ROS学习笔记(四)—使用 VScode 启动launch文件运行多个节点 05. ROS学习笔…

Golang(壹)

爱情不需要华丽的言语&#xff0c;只需要默默的行动。 简介 应用领域&#xff1a; 下载vscode 使用vscode Go下载 - Go语言中文网 - Golang中文社区 下载sdk 解压到文件中&#xff0c;打开sdk解压文件 穿插dos操作系统知识点&#xff1a; 测试go语言环境 看到vscode 的目录结…

Redis学习笔记(二)

1. 说一说Redis集群的应用和优劣势 参考答案 优势&#xff1a; Redis Cluster是Redis的分布式解决方案&#xff0c;在3.0版本正式推出&#xff0c;有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时&#xff0c;可以采用Cluster架构方案达到负载均衡的…

智能优化算法应用:基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电连接过程算法4.实验参数设定…

Idea远程debugger调试

当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的Remote JVM Debug 创建Remote JVM Debug服务器启动jar打断点进入断点 当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的 Remote JVM Debug) 创建Rem…

UE5 水材质注意要点

1、两个法线反向交替流动&#xff0c;可以去观感假的现象 2、水面延边的透明度低 3、增加水面延边的浪花 4、增加折射 折射要整体质量至少在High才有效果 改为半透明材质没有法线信息&#xff1f; 5、处理反射效果 勾选为true 找到这个放在水域 勾为false&#xff0c;即可有非…

FPGA 实现 LeNet-5 卷积神经网络 数字识别,提供工程源码和技术支持

目录 1、前言LeNet-5简洁基于Zynq7020 的设计说明PL 端 FPGA 逻辑设计PS 端 SDK 软件设计免责声明 2、相关方案推荐卷积神经网络解决方案FPGA图像处理方案 3、详细设计方案PL端&#xff1a;ov7725摄像头及图像采集PL端&#xff1a;图像预处理PL端&#xff1a;Xilinx推荐的图像缓…

CentOS:Docker 创建及镜像删除

1、安装docker 远程连接服务器&#xff0c;可以直接下载netsarang比较好用 家庭/学校免费 - NetSarang Website 如果有残留docker未删除干净&#xff0c;请使用 sudo yum -y remove docker docker-common docker-selinux docker-engine Step1&#xff1a;安装必要的一些…

scrapy的入门和使用

scrapy的入门使用 学习目标&#xff1a; 掌握 scrapy的安装应用 创建scrapy的项目应用 创建scrapy爬虫应用 运行scrapy爬虫应用 scrapy定位以及提取数据或属性值的方法掌握 response响应对象的常用属性 1 安装scrapy 命令:     sudo apt-get install scrapy 或者&#x…

警惕!5本剔除!中科院1区TOP,IF8.8,预警高风险期刊更名!

期刊动态&#xff1a;2023年12月SCI、SSCI期刊目录更新 2023年12月19日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次11月WOS期刊目录剔除5本SCIE&SSCI期刊之后&#xff0c;此次12月更新又有5本期刊发生变动&#xff0c;其中有4本SCIE期刊被改名&#xff0c;1…

WIN10安装gurobi给matlab使用(记录)

https://www.gurobi.com/downloads/gurobi-software/ 这是以前的matlab路径&#xff0c;需要修改成新的 使用校园网激活一下 运行gurobi_setup Google报错信息&#xff0c;发现mathwork官方的解释是&#xff1a;找不到相关的dll文件&#xff0c;所以mex无效。 解决方案&…

司铭宇老师:电话销售技巧培训之如何提升电话销售技巧

电话销售是一项需要不断学习和提升技能的工作。无论你是刚刚进入这个行业的新手&#xff0c;还是已经有一些经验的销售人员&#xff0c;不断提高自己的电话销售技巧都是非常必要的。在本篇文章中&#xff0c;我将分享一些实用的技巧和案例&#xff0c;帮助大家更好地完成电话销…

重新配置torch1.8 cuda11.1 torchtext0.9.0虚拟Pytorch开发环境

这里写目录标题 起因发现选择安装cuda 11.1核对下自己的显卡是否支持下载该版本的CUDACUDA下载地址CUDA安装过程在anaconda中创建一个虚拟环境1.以下是环境的配置过程2.查看虚拟环境列表3.激活虚拟环境4.输入这句代码&#xff0c;没想到就可以直接安装torch和torchtext了[网站在…

【深度学习】语言模型与注意力机制以及Bert实战指引之一

文章目录 统计语言模型和神经网络语言模型注意力机制和Bert实战Bert-配置环境 统计语言模型和神经网络语言模型 区别&#xff1a;统计语言模型的本质是基于词与词共现频次的统计&#xff0c;而神经网络语言模型则是给每个词赋予了向量空间的位置作为表征&#xff0c;从而计算它…

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

力扣题:子序列-12.28

力扣题-12.28 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;521. 最长特殊序列 Ⅰ 解题思想&#xff1a;若两字符串不相同&#xff0c;可以选择较长的字符串作为最长特殊序列&#xff0c;显然它不会是较短的字符串的子序列。 class Solution(ob…

从零开始制作一个Douban图像下载器:Wt库的基础知识和操作指南

引言 欢迎来到本文&#xff0c;如果你希望从豆瓣下载海量的高清图像、学习使用现代C web应用程序框架Wt库开发web应用程序&#xff0c;或者了解如何利用代理IP和多线程技术提高爬虫效率和稳定性&#xff0c;那么你来对地方了。在接下来的内容中&#xff0c;我们将为你提供一个…

vue3 使用<script lang=“ts“ setup>加上lang=“ts“后编译错误

报错信息 报错原因 加上了langts解决 下载typescript和loader npm install typescript ts-loader --save-dev配置vue.config.js 添加下面的代码 configureWebpack: { resolve: { extensions: [".ts", ".tsx", ".js", ".json"] }…

【网络安全】—Shell编程入门(1)

文章目录 基础变量概念介绍特殊变量进阶数值计算实践条件测试比较条件判断语句流程控制语句循环语句应用 Shell 是 Unix/Linux 操作系统下的一种命令行解释器&#xff0c;它接收用户输入的命令然后调用相应的程序。我们可以通过 Shell 脚本来自动执行一系列的命令。接下来&…