基于LORA的一主多从监测系统_AHT20温湿度传感器

news2024/11/24 4:56:24

1)AHT20温湿度传感器

这个传感器,网上能找到的资料还是比较多的,我们使用的是HAL硬件i2c,相比于模拟i2c,我们不需要过于关注时序问题,我们只需要关心如何获取数据以及数据如何处理,下面以数据手册为主:

上图来源与数据手册

通过上述截图我们可以看出需要获取温湿度值,我们需要先给传感器发送0x70 0xAC 0x33 0x00四个字节的测量命令字段,然后读取总线数据,返回的数据格式为Status+20位相对湿度+20位温度数据以及CRC校验值一共就是7个字节,不过实际使用的时候可以不用管这个CRC

这个是传感器的状态字说明表格通过这个,我们可以判断当前传感器的状态,也就是我们读到的七个字节的第一个字节

通过手册,我们可以知道当传感器上电后需要等到五ms才能读取,这个一般可以不用管,但是再发送完测量命令后需要等待80ms测量完成,我们需要做一些延时操作

当然,最重要的是我们如何将获取的数据转换为实际的温度和湿度,通过查看手册,我们可以得到转换的具体公式

//为了能将数据传递到AHT20——Read函数的调用方,需要将数据定义为指针类型
void AHT20_Read(float *Temperature, float *Humidity)
{
    uint8_t sendBuffer[3] = { 0xAC, 0x33, 0x00};
    //要触发测量,需要直接发送0xAC命令,此命令参数有两个字节:0x33,0x00
    uint8_t readBUffer[6];

    HAL_I2C_Master_Transmit(&hi2c2,AHT20_ADDRESS,sendBuffer,3,HAL_MAX_DELAY);
    HAL_Delay(75);
    //等待75ms待测量完成
    HAL_I2C_Master_Receive(&hi2c2,AHT20_ADDRESS,readBUffer,6,HAL_MAX_DELAY);
    //读取六个字节(发送0x71可以读取)

    if((readBUffer[0] & 0x80) == 0x00)
        //如果第0字节的第7位位0,就说明获取的数据确实是刚刚测量完成的数据,就可以开始温湿度的计算
    {
        //AHT20的数据手册指出温度数据和湿度数据各占两个半字节,定义data用于数据拼接
        uint32_t data = 0;
        //第3字节的高4位是湿度数据,低4位是温度数据;第2字节和第1字节为湿度数据

        // 0000 xxxx + xxxx xxxx 0000+ xxxx xxxx 0000 0000 0000
        data = ((uint32_t)readBUffer[3] >> 4) + ((uint32_t)readBUffer[2] << 4) + ((uint32_t)readBUffer[1] << 12);
        //要将uint8_t的数据改为uint32_t,否则会出现溢出而导致数据丢失
        *Humidity = data * 100.0f / (1 << 20);
        //相对湿度(%)=(SDA输出的相对湿度信号/2的20次方)*100%,转换为浮点数计算,避免丢失掉小数部分

        //xxxx 0000 0000 0000 0000 + xxxx xxxx 0000 0000 + xxxx xxxx
        data = (((uint32_t)readBUffer[3] & 0x0F) << 16) + ((uint32_t)readBUffer[4] << 8) + (uint32_t)readBUffer[5];
        *Temperature = data * 200.0f / (1 << 20) - 50;
        // 温度 = (温度输出信号 / 2的20次方)* 200 - 50
    }
}

通过简单的代码测试后,我们在debug下可以看到已经能正常读到数据了,其中0x1C为状态字节 00011100,通过第4个bit为1表示OTP 存储器数据完整性测试(CRC)通过,说明我们温湿度数据获取成功

这个实际数据值看着也差不多,说明获取无误

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指针——指针数组、数组指针

&#xff08;一&#xff09;指针数组 1、本质&#xff1a;指针数组的本质任然是数组 2、基本格式&#xff1a;int* arr[5] 3、应用&#xff1a;如尝试使用指针来模拟二维数组 先来看代码 #include<stdio.h> //指针数组——模拟实现二维数组 int main() {int a[5] {…

java面向对象之类与对象

目录 1.定义一个类 案例:定义一个学生类 1.代码 2.效果 2.类的实例化与使用 1.代码 2.效果 3.访问控制 1)private 2)default 3)protected 4)public 注:如下图 4.封装一个类 案例:封装一个教师类 1)代码 2)效果 5.定义一个构造方法 1)无参数构造 2)有参数构造 3&#xff09;注 6…

【Java 问题】基础——反射

接上文 反射 49.什么是反射&#xff1f;应用&#xff1f;原理&#xff1f; 49.什么是反射&#xff1f;应用&#xff1f;原理&#xff1f; 什么是反射&#xff1f; 我们通常都是利用 new 方式来创建对象实例&#xff0c;这可以说就是一种“正射”&#xff0c;这种方式在编译时候…

HJDQN环境配置

git clone仓库代码等不做赘述 #创建&#xff0c;激活conda环境即可 conda create -n EAHJDQN python3.6 conda activate EAHJDQN#安装包 pip install mujoco_py2.0.2.8pip install Cython0.29.21pip install torch1.8.1cu111 torchvision0.9.1cu111 torchaudio0.8.1 -f https:/…

【信息论基础第四讲】信息的流动——平均互信息及其性质

一、平均互信息与互信息 1、互信息 互信息量表示接收到消息yj后&#xff0c;获得关于事件xi的信息量。 2、 从熵的角度来定义平均互信息量&#xff1a; 从信源X熵H(X)到信宿熵H(X|Y)熵减少了&#xff0c;同时为信宿Y提供了信息量&#xff0c;而信息从信源到信宿的变化是流经信…

每日OJ题_牛客_平方数_数学_C++_Java

目录 牛客_平方数_数学 题目解析 C代码1暴力 C代码2数学 Java代码数学 牛客_平方数_数学 平方数 (nowcoder.com) 描述&#xff1a; 牛妹是一个喜欢完全平方数的女孩子。 牛妹每次看到一个数 x&#xff0c;都想求出离 x 最近的完全平方数 y。 每次手算太麻烦&#xff0c;…

分享几个国外SSL证书提供商网站

国外SSL证书提供商 众所周知兼容性高的SSL证书肯定是在国外申请的&#xff0c;主要确保SSL证书的安全性的同时&#xff0c;对于安全标准在国外相比而言更成熟&#xff0c;保护程度也比较高。 另方面对需要申请的域名没有限制&#xff0c;可选性SSL证书类型种类比较多&#xf…

[Python学习日记-39] 闭包是个什么东西?

[Python学习日记-39] 闭包是个什么东西&#xff1f; 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过&#xff0c;当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量&#xff0c;但是在 Python 当中还有一种…

vulnhub靶场之hackableIII

一.环境搭建 1.靶场描述 Focus on general concepts about CTF Difficulty: Medium This works better with VirtualBox rather than VMware. 2.靶场下载 https://download.vulnhub.com/hackable/hackable3.ova 3.靶场启动 二.信息收集 1.寻找靶场真实的Ip nmap -SP 192.168…

LingedList<T>,自定义泛型

LingedList<T>底层采用双向链表数据结构实现的集合(容器)。 数据结构:是计算机在内存中组织数据的一种方式。 分类: 线性数据结构: 数组:存储同类型数据的大小固定的集合。 列表(List):动态大小的数组,可以灵活的添加,删除元素。 链表(LinkedList):分…

目标检测 DN-DETR(2022)

文章目录 前言gt labels 和gt boxes加噪query的构造attention maskIS&#xff08;InStability&#xff09;指标 前言 gt labels 和gt boxes加噪 query的构造 attention mask IS&#xff08;InStability&#xff09;指标

媒界:家庭出行不用愁 江铃集团新能源易至EV3青春版值得拥有

随着家庭代步、接送孩子上下学的需求进一步释放&#xff0c;纯电小车市场迎来火热发展机遇。江铃集团新能源旗下的易至EV3青春版&#xff0c;以其灵动的车身设计、宽敞的内部空间以及先进的智能配置&#xff0c;成为了家庭用车的优质选择。 作为电动汽车和出行普及者&#xff0…

阿里面试: RocketMQ如何实现每秒上十万QPS的超高吞吐量读取的?

这玩意儿表面看上去挺牛逼&#xff0c;但其实背后的逻辑和套路&#xff0c;在咱们开发里见过的那些招数&#xff0c;都能找到影子。 今天小北和大家一起系统化的梳理梳理一遍&#xff0c;让大家功力猛增&#xff0c;吊打面试官。 1. 消息存储&#xff1a;巧妙利用顺序写 先说…

ARTS Week 43

Algorithm 本周的算法题为 1822. 数组元素积的符号 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。 如果 x 是负数&#xff0c;返回 -1 。 如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数…

SimpleFoc以及SVPWM学习补充记录

SimpleFoc SimpleFOC移植STM32&#xff08;一&#xff09;—— 简介 FOC控制的过程是这样的&#xff1a; 对电机三相电流进行采样得到 Ia,Ib,Ic。将 Ia,Ib,Ic 经过Clark变换得到 I_alpha I_beta。将 I_alpha I_beta 经过Park变换得到 Id,Iq。计算 Id,Iq 和其设定值 Id_ref 和…

Spring JDBC - Spring JDBC模版使用

前言 Spring JdbcTemplate是Spring Framework提供的一个强大的数据库访问工具&#xff0c;它简化了数据库操作的过程&#xff0c;为开发者提供了一个高级的数据库访问抽象层。 JdbcTemplate是Spring JDBC模块中的一个核心类&#xff0c;它位于org.springframework.jdbc.core包中…

开源项目都是怎么推广的?

大家好&#xff0c;我是爱折腾的刘大逵。跟我接触过的技术们都知道&#xff0c;一年一年的都在折腾着做一些项目&#xff0c;年年有进步&#xff0c;年年有想法&#xff0c;年年在折腾。今天给大家分享GITEE如何上推荐&#xff01; GITEE推荐有什么用&#xff1f; 众所周知&a…

C++版iwanna2

第二篇目录 程序的流程图程序游玩的效果下一篇博客要说的东西 程序的流程图 #mermaid-svg-lFW0ZjCdi5Xvl3gE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lFW0ZjCdi5Xvl3gE .error-icon{fill:#552222;}#mermaid-s…

《神经网络》—— 循环神经网络RNN(Recurrent Neural Network)

文章目录 一、RNN 简单介绍二、RNN 基本结构1.隐藏中的计算2.输出层的计算3.循环 三、RNN 优缺点1.优点2.缺点 一、RNN 简单介绍 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种用于处理序列数据的神经网络架构。 与传统的前馈神经网络&#xff08…

聆听国宝“心声” 《寻找国宝传颂人——中国国宝大会》走进辽宁

热爱不止&#xff0c;传颂不停。近日&#xff0c;中央广播电视总台《寻找国宝传颂人——中国国宝大会》大型融媒体活动在辽宁省博物馆开展第二场地方展演。辽宁省博物馆是新中国成立后的第一座博物馆&#xff0c;馆藏文物近12万件&#xff0c;珍贵文物数万件&#xff0c;且以藏…