当前位置: 首页 > article >正文

STM32U575RIT6单片机(四)

作业:  

使用I2C获取SHT20传感器温湿度

使用I2C获取AP3216C三合一传感器:  光照, 接近, 红外 三个功能 合并的传感器

#ifndef SHT20_H
#define SHT20_H#include "stdint.h"
#include "i2c.h"
#include "stdio.h"
//1、确定从机的设备地址(代码不需要)
#define SHT20_ADDR 0x40
//2、确定主机的读写地址
#define SHT20_READ_ADDR 0x81
#define SHT20_WRITE_ADDR 0x80
//3、测量温度和湿度的命令
#define T_CMD 0xf3		//温度测量
#define RH_CMD 0xf5	//湿度测量
float SHT20_Send(uint8_t cmd);
void T_RH();#endif
#include "sht20.h"
/****************************************************************
函数名:SHT20_Send(uint8_t Devaddr,uint8_t cmd)
功能:SHT20的发送函数
参数1:设备地址
参数2:发送的命令
返回值:成功返回测量的数据,失败返回0
****************************************************************/
float SHT20_Send(uint8_t cmd)
{uint8_t buff[2]={0};HAL_StatusTypeDef ret;ret = HAL_I2C_Master_Transmit(&hi2c1,SHT20_WRITE_ADDR,&cmd,1,100);		//发送写命令if(ret==HAL_OK){HAL_Delay(85);HAL_I2C_Master_Receive(&hi2c1,SHT20_READ_ADDR,buff,2,100);			//接受数据uint16_t val = buff[0]<<8|buff[1];return val;}return 0;		//失败返回 0
}
/****************************************************************
函数名:T_RH()
功能:读取温度湿度
参数:无
返回值:无
****************************************************************/
void T_RH()
{float S_T = SHT20_Send(T_CMD);		//测量温度float S_RH = SHT20_Send(RH_CMD);		//测量湿度float rh = -6+125*(S_RH/65536);float t = -46.85+175.72*(S_T/65535);printf("温度:%.2f℃\t湿度:%.2f%%\n",t,rh);//换算成数据输出即可
}
int fputc(int ch,FILE *FP)
{while(!(USART1->ISR&1<<7));USART1->TDR = ch;return ch;
}
#ifndef AP3216C_H
#define AP3216C_H#include "stdint.h"
#include "i2c.h"
#include "stdio.h"
//1、确定从机的设备地址
#define AP3216C_ADDR 0x1e
//2、确定主机的读写地址
#define AP3216C_WRITE_ADDR  (AP3216C_ADDR << 1)      		// 写地址:0x3C
#define AP3216C_READ_ADDR   ((AP3216C_ADDR << 1) | 1)		// 读地址:0x3D
//3、测量温度和湿度的命令
#define SYS_CFG_REG 0x00			// 系统配置寄存器
#define ALS_CMD 0x0c					//环境光测量
#define PS_CMD 0x0e					//接近测量
#define IRLED_CMD 0x0a				//红外测量
//相关函数声明
void AP3216C_Init(void);			//初始化AP3216C
void ALS_PS_IRLED();					//读取环境光、接近、红外#endif
#include "ap3216c.h"
// 初始化传感器为ALS+PS+IR模式
void AP3216C_Init(void) 
{uint8_t cfg_cmd[2] = {SYS_CFG_REG, 0x03};  // 模式011: ALS+PS+IRHAL_I2C_Master_Transmit(&hi2c1, AP3216C_WRITE_ADDR, cfg_cmd, 2, 100);HAL_Delay(100);  // 等待传感器稳定
}
// 读取ALS原始值(16位)
static uint16_t ReadALS(void) 
{uint8_t buff[2];HAL_I2C_Mem_Read(&hi2c1, AP3216C_READ_ADDR, ALS_CMD, I2C_MEMADD_SIZE_8BIT, buff, 2, 100);return (buff[1] << 8) | buff[0];  // 合并高低字节
}
// 读取PS原始值(10位)
static uint16_t ReadPS(void) 
{uint8_t buff[2];HAL_I2C_Mem_Read(&hi2c1, AP3216C_READ_ADDR, PS_CMD, I2C_MEMADD_SIZE_8BIT, buff, 2, 100);return ((buff[1] & 0x3F) << 4) | (buff[0] & 0x0F);  // 提取10位数据
}
// 读取IR原始值(10位)
static uint16_t ReadIRLED(void) 
{uint8_t buff[2];HAL_I2C_Mem_Read(&hi2c1, AP3216C_READ_ADDR, IRLED_CMD, I2C_MEMADD_SIZE_8BIT, buff, 2, 100);return (buff[1] << 2) | buff[0]&0x03;		// 提取10位数据
}
//读取环境光、温度、湿度
void ALS_PS_IRLED()
{float S_ALS = ReadALS();		//测量环境光uint16_t S_PS = ReadPS();		//测量接近uint16_t S_IRLED = ReadIRLED();		//测量红外float ALS_lux = S_ALS * 0.36f;  // 转换为lux(默认范围1)printf("环境光:%8.2f lux\t接近:%-4d\t红外:%-4d\n",ALS_lux,S_PS,S_IRLED);//换算成数据输出即可
}
  /* USER CODE BEGIN Includes */#include "sht20.h"#include "ap3216c.h"/* USER CODE END Includes *//* USER CODE BEGIN 2 */AP3216C_Init();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_Delay(500);T_RH();						//读取温度、湿度ALS_PS_IRLED();		//读取环境光、接近、红外}/* USER CODE END 3 */

相关文章:

STM32U575RIT6单片机(四)

作业: 使用I2C获取SHT20传感器温湿度 使用I2C获取AP3216C三合一传感器: 光照, 接近, 红外 三个功能 合并的传感器 #ifndef SHT20_H #define SHT20_H#include "stdint.h" #include "i2c.h" #include "stdio.h" //1、确定从机的设备地址(代码不…...

EMQX安装与配置

EMQX安装与配置 EMQX安装与配置 https://www.emqx.com/zh/downloads-and-install/broker?osUbuntucd /usr/local/srcwget https://www.emqx.com/zh/downloads/broker/4.4.19/emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb sudo apt install ./emqx-4.4.19-otp24.3.4.2-1…...

JVM逃逸分析作用和原理

JVM逃逸分析作用和原理 在JVM的性能优化中&#xff0c;我们通常会关注内存分配、垃圾回收等问题。而逃逸分析&#xff08;Escape Analysis&#xff09;是JVM中一种精妙的优化技术&#xff0c;它可以在对象分配时判断该对象是否会在方法或线程之外被访问&#xff0c;从而影响其…...

拓展 Coco AI 功能 - 智能检索 Hexo 博客

在之前的文章中&#xff0c;我们成功让 Coco AI 检索 Hugo 博客&#xff0c;这对于博客作者来说是一大福音。然而&#xff0c;从 Hexo 迁移到 Hugo 的成本不容小觑&#xff0c;毕竟大多数开发者对 Node.js 更熟悉&#xff0c;而 Golang 相对陌生。那么&#xff0c;既然 Coco AI…...

爬虫基础之爬取猫眼Top100 可视化

网站: TOP100榜 - 猫眼电影 - 一网打尽好电影 本次案例所需用到的模块 requests (发送HTTP请求) pandas(数据处理和分析 保存数据) parsel(解析HTML数据) pyecharts(数据可视化图表) pymysql(连接和操作MySQL数据库) lxml(数据解析模块) 确定爬取的内容: 电影名称 电影主演…...

ffmpeg库视频硬解码使用流程

FFmpeg 的硬解码&#xff08;Hardware Decoding&#xff09;通过调用 GPU 或专用硬件的编解码能力实现&#xff0c;能显著降低 CPU 占用率。 ‌一、FFmpeg 支持的硬件解码类型‌ FFmpeg 原生支持多种硬件加速类型&#xff0c;具体由 AVHWDeviceType 定义&#xff0c;包括&…...

LS-NET-006-思科MDS 9148S 查看内存

LS-NET-006-思科MDS 9148S 查看内存 方法一&#xff1a;使用 show version​ 命令 该命令可显示设备的基本系统信息&#xff0c;包括内存总量。 登录交换机的CLI&#xff08;通过控制台或SSH连接&#xff09;。输入命令&#xff1a; show version 在输出中查找类似以下内容…...

小程序API —— 54 路由与通信 - 编程式导航

在小程序中实现页面的跳转&#xff0c;有两种方式&#xff1a; 声明式导航&#xff1a;navigator 组件编程式导航&#xff1a;使用小程序提供的 API 编程式导航 API 提供了五个常用的 API 方法&#xff1a; wx.navigateTo()&#xff1a;保留当前页面&#xff0c;跳转到应用内…...

关于金融开发领域的一些专业知识总结

目录 1. 交易生命周期 1.1 证券交易所 1.1.1 交易前 1) 订单生成&#xff08;Order Generation&#xff09; 2) 订单管理&#xff08;Order Management&#xff09; 1.1.2 交易执行 3) 交易匹配&#xff08;Trade Matching&#xff09; 1.1.3 交易后 4) 交易确认&…...

使用 `pytest` 框架时,可以通过极限封装将 YAML 文件的读取、解析

在使用 pytest 框架时,可以通过极限封装将 YAML 文件的读取、解析和测试用例的通用逻辑封装成共享的方法或 fixture,从而减少重复代码。以下是详细的实现步骤和示例。 1. 封装 YAML 文件读取和解析 将 YAML 文件的读取和解析逻辑封装到一个工具函数中,供所有测试用例调用。…...

蓝桥杯练习day3:反转字符串

一、题意 写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s [“h”,“e”,“…...

DeepSeek-R1深度解读

deepseek提出了一种通过强化学习&#xff08;RL&#xff09;激励大语言模型&#xff08;LLMs&#xff09;推理能力的方法&#xff0c;个人认为最让人兴奋的点是&#xff1a;通过RL发现了一个叫“Aha Moment”的现象&#xff0c;这个时刻发生在模型的中间版本中。在这个阶段&…...

15-双链表-双链表基本操作

题目 来源 827. 双链表 - AcWing题库 思路 此题我只想说&#xff0c;千万千万别漏了头结点和尾结点&#xff0c;不然根本查不出来是哪里出了问题&#xff0c;因为传入的k会有问题&#xff1b;最左边插入&#xff0c;相当于是在头结点的右边插入&#xff08;也就是0号节点的右…...

正则表达式详解(regular expression)

&#x1f4a1; 正则表达式&#xff08;Regular Expression, regex&#xff09;知识点总结 &#x1f4a1; 正则表达式是一种用于匹配字符串的模式&#xff0c;广泛用于搜索、替换、验证等操作。 &#x1f4cc; 正则表达式的主要作用 1️⃣ 字符串匹配 &#x1f9d0; 检查一个…...

经典面试题:C/C++中static关键字的三大核心作用与实战应用

一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...

笔记:代码随想录算法训练营day57:99.岛屿数量 深搜、岛屿数量 广搜、100.岛屿的最大面积

学习资料&#xff1a;代码随想录 注&#xff1a;文中含大模型生成内容 99. 岛屿数量 卡码网题目链接&#xff08;ACM模式&#xff09; 先看深搜方法&#xff1a;找到未标标记过的说明找到一片陆地的或者一片陆地的一个角落&#xff0c;dfs搜索是寻找相连接的陆地其余部分并…...

【小也的Java之旅系列】01 分布式、集群、微服务的区别

前言 做Java开发多年&#xff0c;一直以来都有想把Java做成一个系列的想法&#xff0c;最近整理自己的笔记发现有很多值得写的内容&#xff0c;但这些内容又往往杂乱不堪。CSDN上有很多高质量的Java博客&#xff0c;但大多不是从一个人成长的角度去写的。而我们——一个技术人…...

基于视觉的核桃分级与套膜装置研究(大纲)

基于视觉的核桃分级与套膜装置研究&#xff1a;从设计到实现的完整指南 &#xff08;SolidWorks、OpenCV、STM32开发实践&#xff09; &#x1f31f; 项目背景与目标 1.1 为什么选择视觉分级与套膜&#xff1f; 产业痛点&#xff1a; 中国核桃年产量全球第一&#xff0c;但…...

JimuReport与deepseek结合,颠覆现有BI模式

在数字化转型的浪潮中&#xff0c;企业对数据的依赖程度越来越高&#xff0c;如何高效地分析和利用数据成为关键。JimuReport凭借其强大的报表设计能力和灵活的数据处理功能&#xff0c;已经成为众多企业的首选工具。如今&#xff0c;它即将与DeepSeek深度结合&#xff0c;为企…...

大白话详细解读函数之柯里化

1. 函数柯里化是什么&#xff1f; 函数柯里化是一种将多参数函数转换成一系列单参数函数的技术。简单来说&#xff0c;就是把一个接收多个参数的函数&#xff0c;变成每次只接收一个参数&#xff0c;并返回一个新函数&#xff0c;直到所有参数都接收完毕&#xff0c;最后返回结…...

11、STL中的set使用方法

一、了解 set 是 C 标准模板库&#xff08;STL&#xff09;中提供的有序关联容器之一。基于红黑树&#xff08;Red-Black Tree&#xff09;实现&#xff0c;用于存储一组唯一的元素&#xff0c;并按照元素的值进行排序。 set的特性 唯一性 键是唯一的。无重复。 有序性 按升序…...

git 子模块的使用

1. 子模块的核心概念 独立性&#xff1a;子模块是一个独立的 Git 仓库&#xff0c;有自己的提交历史和分支。 指针机制&#xff1a;主仓库仅记录子模块的特定提交&#xff08;而不是分支&#xff09;&#xff0c;确保代码版本可控。 适用场景&#xff1a;依赖第三方库、多项目…...

vsftpd服务权限配置

主配置文件&#xff1a;/etc/vsftpd/vsftpd.conf anonymous_enableYES   #是否启用匿名用户 no_anon_passwordYES   #匿名用户login时不询问口令 anon_upload_enableyes | no # 匿名用户对文件&#xff08;非目录&#xff09;上传权限。 anon_world_readable_onlyyes | …...

遥感数据获取、处理、分析到模型搭建全流程学习!DeepSeek、Python、OpenCV驱动空天地遥感数据分析

【扔进数据&#xff0c;直接出结果】在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专…...

操作系统——(管程、线程、进程通信)

目录 一、管程机制 &#xff08;1&#xff09;管程定义 &#xff08;2&#xff09;特点&#xff1a; 二、进程通信 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;高级通信机制 三、线程 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;与进程比较…...

Sqlserver安全篇之_启用和禁用Named Pipes的案列介绍

https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/named-pipes-properties?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/client-protocols-named-pipes-properties-protocol-tab?viewsql-server-ver16 默认…...

Redis 本地安装

首先安装&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…...

外卖订单如何教会我变量与数据类型?

目录 前言一、现实场景1.1 你点的每一碗&#xff0c;都是程序员的KPI1.2 关键数据角色扮演 二、技术映射三、知识点呈现3.1 变量——你的数字日记本3.2 数据类型——数值的「职业规划」3.3 运算符——数学老师的黑板擦 四、代码实现4.1 基础版&#xff1a;计算器の复仇4.2 进阶…...

HOW - 平时如何保持学习和成长?

目录 前言数字时代的系统性学习方法论一、场景驱动的实战学习&#xff1a;从工具赋能到知识沉淀二、结构化的系统学习&#xff1a;构建知识体系的方法论&#xff08;一&#xff09;精准学习策略&#xff08;二&#xff09;学习成效评估体系&#xff08;三&#xff09;专项研究 …...

Web开发-JS应用原生代码前端数据加密CryptoJS库jsencrypt库代码混淆

知识点&#xff1a; 1、安全开发-原生JS-数据加密&代码混淆 2、安全开发-原生JS-数据解密安全案例 一、演示案例-WEB开发-原生JS&第三方库-数据加密 前端技术JS实现&#xff1a; 1、非加密数据大致流程&#xff1a; 客户端发送->明文数据传输-服务端接受数据->…...