【elfboard linux开发板】7.i2C工具应用与aht20温湿度寄存器读取

1. I2C工具查看aht20的温湿度寄存器值

1.1 原理图

传感器通过IIC方式进行通信,连接的为IIC1总线,且设备地址为0x38,实际上通过后续iic工具查询,这个设备是挂载在iic-0上

在这里插入图片描述

1.2 I2C工具

通过i2c工具可以实现查询i2c总线、以及上面挂载的设备以及设备的寄存器值。
a. 下载安装:

可以通过IIC工具地址进行下载,或以下命令下载(慢):

git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git
  1. 下载后,复制到相关文件夹下,按ctrl+alt+t打开终端,通过tar -zxvf 解压缩
  2. cd i2c-tools-4.3目录下,下载版本不同,名称可能不一样
  3. vi Makefile将下列三行改写为:

前–>后
CC ?= gcc -->#CC ?= gcc
AR ?= ar–> #AR ?= ar
STRIP ?= strip -->#STRIP ?= strip

  1. make 编译后会在 ./tools/下生成可执行文件

在这里插入图片描述

  1. 将i2cdetect、i2cdump、i2cget、i2cset、i2ctransfer等工具拷贝到开发板的/usr/bin目录下
    在这里插入图片描述
    在这里插入图片描述
  2. 并且将对应的i2c工具依赖的库拷贝到开发板的/usr/lib下
    在这里插入图片描述

i2c工具介绍:

i2cdetect

-V 输出版本
-y 接i2c序号,检测挂载在i2c总线上的器件
-l 打印i2c总线
-F MODE_FUNC
-r MODE_READ
-q MODE_QUICK
-a 设置扫描的地址从0x00到0x7F
iic1上有在0x1a位置上有挂载设备和驱动;UU表示既有设备也有驱动;
在这里插入图片描述

i2cdump:

i2cdump -f -y 1 0x1a 查看挂载在i2c1的设备0x1a的寄存器的值

i2ctransfer

格式为:i2ctransfer -f -y iic序号 w[number]@设备地址 命令 参数 r[number2]
number 为写入的字节数,number2为读取的字节数

AHT20的命令介绍:

初始化 0xBE(1011’ 1110)
触发测量 0xAC
软复位 0xBA

状态字用来判断寄存器的状态,具体对应如下:

bit[7]bit[6]bit[5]bit[4]bit[3]bit[2]bit[1]bit[0]
1-测量中 0-休眠1-已校准 0- 未校准

传感器读取流程:

  • 上电后等待40ms, 通过0x71命令查看状态字的bit[3]是否为1,如果不为1,初始化(发送0xBE命令,命令有两个参数,分别为0x08与0x00,然后,等待10ms
  • 启动测量(发送0xAC命令,有两个参数,分别为0x33与0x00)
  • 等待80ms, 通过0x71命令读取状态字,bit[7]处于休眠态,说明测量完成,然后读取6个字节;如果bit[7]处于测量中,则继续等待;
  • 发送应答位
  • 接收数据,通过下列公式计算温湿度

V a l u e 湿度 = v a l u e r e g 1 2 20 100 Value_{湿度}=\frac{value_{reg1}}{2^{20}}100 Value湿度=220valuereg1100
V a l u e 温度 = v a l u e r e g 2 2 20 200 − 50 Value_{温度} = \frac{value_{reg2}}{2^{20}}200-50 Value温度=220valuereg220050

应用

1.初始化
i2ctransfer -f -y 0 w3@0x38 0xbe 0x08 0x00
2. 开始测量:
i2ctransfer -f -y 0 w3@0x38 0xAC 0x33 0x00
3. 读取值
i2ctransfer -f -y 0 w1@0x38 0x71 r7
在这里插入图片描述

补充说明:
Makefile的四种赋值运算符

= 赋值,可以使用后面定义的变量
:= 就地直接解析,只能使用前面定义好的变量
?=没有被赋值则进行赋值,赋值过则忽略
+=追加赋值

2. 使用安装好的驱动读取温湿度传感器的值

通过进程的方式获取iic总线挂载的设备,与iic设备寄存器的值后(实际上可以不用前面这些,直接循环读取就行),循环读取并计算温湿度传感器的值
注意:
execlp执行完,后续的将不会执行,因此,交给子进程单独执行该命令,在父进程中等待回收完子进程后,执行后续指令

#include <stdio.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>#define read_len 2
int main(int argc,char*argv[]){printf("i2c-1 的 寄存器\n");unsigned int buf[read_len];float hum,temp;float hum1,temp1;int h1,t1;int ret = 0;pid_t pid = fork();if(pid<0){perror("fork error");exit(1);}else if(pid == 0){execlp("i2cdetect","i2cdetect","-y","0",NULL);}else{  waitpid(-1,NULL,0);if(argc<2||strncmp(argv[1],"/dev/",5)){printf("参数错误,请输入/dev/");exit(1);}int fd = open(argv[1],O_RDWR);if(fd<0){perror("open error");exit(1);}pid_t pid2 = fork();if(pid2 == 0){ execlp("i2cdump","i2cdump","-f","-y","0","0x38",NULL);}               else if(pid2 > 0){waitpid(-1,NULL,0);while(1){if((ret=read(fd,buf,sizeof(buf)))==0){h1 = (buf[0]*1000)>>20;t1 = ((buf[1]*2000)>>20)-500;hum = buf[0]*1000./1024/1024/10;temp = (buf[1]*200.*10/1024/1024-500)/10;printf("湿度为%0.2f, 温度为%0.2f \n",hum,temp);printf("hum:%0.2f, temp:%0.2f \n",(float)h1/10.0,(float)t1/10.0);sleep(1);}}close(fd);}}}

在这里插入图片描述

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

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

相关文章

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar&#xff1a;[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI&#xff1a;[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…

基于pytorch 的psnr和ssim计算

基于pytorch 的psnr和ssim计算&#xff1a; import math import numpy as np from pytorch_msssim import ssim, ms_ssim, SSIM, MS_SSIM import datetime import os import sysdef calc_psnr(sr, hr):diff (sr - hr) / 255.00mse diff.pow(2).mean()psnr -10 * math.log1…

【Linux】根文件系统添加root密码

1. 问题 量产时&#xff0c;制作根文件系统&#xff0c;并添加root密码。 2. 开发板设置 2.1 在开发板中设置root密码 sudo passwd root# 根据提示输入密码和确认密码2.2 调试串口开启密码验证 设置好后&#xff0c;发现ssh登录需要密码&#xff0c;但是调试串口依然不需要…

苹果手机怎么备份数据?方法在这,记得收藏!

苹果手机不仅具有卓越的用户体验&#xff0c;还具有强大的功能&#xff0c;因此受到了广大用户的喜爱。然而&#xff0c;在享受其带来的便捷的同时&#xff0c;我们也需要着重关注手机数据的安全。 一旦数据丢失或损坏&#xff0c;可能会对我们的生活和工作造成重大影响。那么…

电脑如何屏幕录制?轻松录制高清视频

在当今信息化的时代&#xff0c;电脑已经成为工作和生活的重要工具。无论是在进行演示、教学还是记录重要操作步骤时&#xff0c;屏幕录制都是非常有用的。可是电脑如何屏幕录制呢&#xff1f;本篇文章将介绍三种常见的电脑屏幕录制方法&#xff0c;通过学习这些方法&#xff0…

播放电视源及其技术

给potplayer配置iptv源&#xff0c;看所有你想看的电视_potplayer iptv-CSDN博客 根据以上链接教程下载播放器&#xff0c;github项目iptv的电视源文件。就行了。 有的源并不可用&#xff1a;可以用直播源检测工具测试一下&#xff0c;看看能否播放 https://github.com/bianc…

07. HTTP接口请求重试怎么处理?

目录 1、前言 2、实现方式 2.1、循环重试 2.2、递归重试 2.3、Spring Retry 2.4、Resilience4j 2.5、http请求网络工具内置重试方式 2.6、自定义重试工具 2.7、并发框架异步重试 2.8、消息队列 3、小结 1、前言 HTTP接口请求重试是指在请求失败时&#xff0c;再次发…

Android 反编译处理Dex

前言 当我们将Android项目打包上架的时候&#xff0c;为了提高被人反编译代码的可能性可以提取 dex 文件对代码进一步做混淆处理。 本文不对相关工具做过多的解释&#xff0c;不了解的可以先熟悉相关工具的使用。 相关工具&#xff08;点击直接下载&#xff09; jadx-gui&a…

池化层解析:新手也能理解 PyTorch 中的核心组件

目录 torch.nn详解 nn.MaxPool1d nn.MaxPool2d nn.MaxPool3d nn.MaxUnpool1d nn.MaxUnpool2d nn.MaxUnpool3d nn.AvgPool1d nn.AvgPool2d nn.AvgPool3d nn.FractionalMaxPool2d nn.FractionalMaxPool3d nn.LPPool1d nn.LPPool2d nn.AdaptiveMaxPool1d nn.Adapt…

计算机基础面试题 |05.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

基本类型和包装类、基本类型和字符串之间的转换

基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换&#xff0c;以 Integer 为例&#xff08;其他几个包装类的操作雷同哦&#xff09;&#xff1a; 在 JDK1.5 引入自动装箱和拆箱的机制后&#xff0c;包装类和基本类型之间的转换就更加轻松便利了。 那什么是…

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

文章目录 1.概述2.Visual Studio 2022简介3.安装Visual Studio 20224.安装CMake5.创建CMake项目6. 构建项目 1.概述 CMake和Visual Studio 2022结合 在现代软件开发中&#xff0c;CMake和Visual Studio 2022的结合提供了一个强大的环境&#xff0c;用于构建和管理各种规模的C项…

传统企业该怎样让 OKR 落地?

OKR&#xff08;Objectives and Key Results&#xff09;即目标与关键成果法&#xff0c;是一套明确和跟踪目标及其完成情况的管理工具和方法。它旨在确保员工共同工作&#xff0c;并集中精力作出可衡量的贡献。 OKR由英特尔公司制定&#xff0c;并由约翰道尔&#xff08;John…

外汇天眼:不懂、不熟悉的交易,避而远之!

在市场中很多人都想表达一句&#xff1a;真的是感觉自己学得越多&#xff0c;就越迷茫。 不管是做交易还是做别的行业好像都是在刚入行的时候兴致勃勃&#xff0c;兴趣满满&#xff0c;什么都不懂但却很容易就能尝到一些甜头&#xff0c;这样就就很大程度上激励了自己&#xf…

Maven 整理(含面试题)

Maven是Java 项目必备&#xff0c;Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。项目构建工具 、更好的管理依赖 目录 Maven安装与运行maven 重要知识点面试题 Maven安装与运行 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理…

matrix-breakout-2-morpheus 靶场 练习思路

arp-scan -l 获取目标机器的IP nmap -sV -A IP 查看目标机器开放的端口 gobuster dir -u http://192.168.29.130 -x php,txt,jsp,asp -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 爆破目标机器的文件目录,找到可以访问的文件路径 http://192.168…

Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览

目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…

【项目问题解决】参数过滤器实现代码及相关问题

目录 【项目问题解决】参数过滤器实现代码及相关问题 1.前言2.代码实现2.1常量类2.2过滤器方法2.3 注意 3.总结4.参考 文章所属专区 项目问题解决 1.前言 参数过滤器实现代码及相关问题 2.代码实现 2.1常量类 Component public class ProjectConstants {public static St…

山海鲸可视化软件的优势:数据整合、可视化与个性化定制

随着科技的快速发展&#xff0c;企业数字化转型已成为必然趋势。而对于一些本身没有开发优势或非技术型企业&#xff0c;数字化产品的选择就成为重中之重。作为山海鲸可视化软件的开发者&#xff0c;我们深知这一点&#xff0c;对于企业来说&#xff0c;能选择一个产品一定要有…

C# Onnx yolov8 竹签计数、一次性筷子计数

目录 效果 模型信息 项目 代码 数据集 下载 C# Onnx yolov8 竹签计数、一次性筷子计数 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-01-03T08:55:22.768617 author&#xff1a;Ultralytics task&#xff1a;detect license&#x…