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

Orangepi Zero2 全志H616(DHT11温湿度检测)

最近在学习Linux应用和安卓开发过程中,打算把Linux实现的温湿度显示安卓app上,于是在此之前先基于Orangepi Zero2 全志H616下的wiringPi库对DHT11进行开发,本文主要记录开发过程的一些问题和细节,主要简单通过开启线程来接收温湿度数据,代码还有优化空间,仅供参考。

一、DHT11时序图

数据传送逻辑

        模块一次完整的数据传输为40bit,高位在前

数据格式

        8bit湿度整数数据+8bit 湿度小数数据 +8bi 温度整数数据 +8bit 温度小数数据 +8bit 校验和

通讯过程时序图

 具体DHT11时序分析可以查看主页(4条消息) 51单片机(DHT11温湿度传感器)_51单片机温湿度传感器代码_zoacyf的博客-CSDN博客

 二、代码模块

温湿度DHT11初始化

int readSensorData(void) //温湿度初始化
{char i;pinMode(dht, OUTPUT);   // 将模式设置为输出digitalWrite(dht, LOW); // 输出高电平delay(25);digitalWrite(dht, HIGH); // 输出低电平pinMode(dht, INPUT);     // 将模式设置为输入pullUpDnControl(dht, PUD_UP);delayMicroseconds(27);if (digitalRead(dht) == 0){while (!digitalRead(dht)); // wait to highfor (i = 0; i < 32; i++){while (digitalRead(dht)); // 数据时钟启动while (!digitalRead(dht)); //数据开始delayMicroseconds(40);databuf *= 2;if (digitalRead(dht) == 1) // 1{databuf++;}}return 1;}else{return 0;}}

温湿度读取线程

void *dht11_thread(void *datas) //温湿度线程
{int W = 0, w = 0;int S = 0, s = 0;printf("Use GPIO7 to read data!\n");pinMode(dht, OUTPUT);    // set mode to outputdigitalWrite(dht, HIGH); // output a high levelprintf("Enter OS-------\n");while (1){if (readSensorData()){W = (databuf >> 8) & 0xff;w = databuf & 0xff;S = (databuf >> 24) & 0xff;s = (databuf >> 16) & 0xff;}delay(2000);if ((W >= 15) && (W <= 35) && (S <= 85) && (S>=15)){printf("此时的温湿度为:\n");printf("温度:%d.%d\n", W, w); //温度printf( "湿度:%d.%d\n", S, s);   //湿度databuf = 0;}else{printf("Sorry! Sensor dosent ans!\n");databuf = 0;continue;}}
}

三、整体代码

开发过程中遇到的主要问题:

1、温度或湿度数据会出现极端的现象,我们可以做代码优化,丢弃极端数据。2、程序运行卡住,只出现几组数据,这个问题非常头疼。刚开始分析是while里面用sleep造成,经过验证发现并不是,给线程加互斥锁也无法解决问题,最后发现把校验位去掉程序就正常运行,因此盲猜是数据存储的问题导致程序跑飞,大家可以用数组尝试处理,这里我就直接把校验位去掉一直收集温湿度数据了,若需要指令收集温湿度数据可以参考下面博文,本人觉得该大佬写得不错。

(4条消息) 【香橙派+DHT11】香橙派(全志H616)+ DHT11温湿度传感器的驱动教程_RIO小哥的博客-CSDN博客

整体代码

#include <stdio.h>
#include <wiringPi.h>
#include <pthread.h>
#include <unistd.h>
#define dht 7      //引脚接口
unsigned long databuf;  //温湿度数据保存区int readSensorData(void) //温湿度初始化
{char i;pinMode(dht, OUTPUT);   // 将模式设置为输出digitalWrite(dht, LOW); // 输出高电平delay(25);digitalWrite(dht, HIGH); // 输出低电平pinMode(dht, INPUT);     // 将模式设置为输入pullUpDnControl(dht, PUD_UP);delayMicroseconds(27);if (digitalRead(dht) == 0){while (!digitalRead(dht)); // wait to highfor (i = 0; i < 32; i++){while (digitalRead(dht)); // 数据时钟启动while (!digitalRead(dht)); //数据开始delayMicroseconds(40);databuf *= 2;if (digitalRead(dht) == 1) // 1{databuf++;}}return 1;}else{return 0;}}void *dht11_thread(void *datas) //温湿度线程
{int W = 0, w = 0;int S = 0, s = 0;printf("Use GPIO7 to read data!\n");pinMode(dht, OUTPUT);    // set mode to outputdigitalWrite(dht, HIGH); // output a high levelprintf("Enter OS-------\n");while (1){if (readSensorData()){W = (databuf >> 8) & 0xff;w = databuf & 0xff;S = (databuf >> 24) & 0xff;s = (databuf >> 16) & 0xff;}delay(2000);if ((W >= 15) && (W <= 35) && (S <= 85) && (S>=15)){printf("此时的温湿度为:\n");printf("温度:%d.%d\n", W, w); //温度printf( "湿度:%d.%d\n", S, s);   //湿度databuf = 0;}else{printf("Sorry! Sensor dosent ans!\n");databuf = 0;continue;}}
}int main()
{int ret;pthread_t dht11Thread;if (-1 == wiringPiSetup()){printf("Setup wiringPi failed!");}ret = pthread_create(&dht11Thread,NULL,dht11_thread,NULL);//启动线程不断获取温湿度数据if(ret == 0){printf("dht11Thread create success!\n");}pthread_join(dht11Thread,NULL);//等待线程退出return 0;
}

运行shell编译

bulid.sh

  1. gcc $1 -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt

  2. //shell 脚本处理参数,可以通过 $?来处理,这里的$1后面是要编译的文件

  3. //脚本运行没有权限,需加运行权限 (chmod +x build.sh)

 

 

相关文章:

Orangepi Zero2 全志H616(DHT11温湿度检测)

最近在学习Linux应用和安卓开发过程中&#xff0c;打算把Linux实现的温湿度显示安卓app上&#xff0c;于是在此之前先基于Orangepi Zero2 全志H616下的wiringPi库对DHT11进行开发&#xff0c;本文主要记录开发过程的一些问题和细节&#xff0c;主要简单通过开启线程来接收温湿度…...

abbyy是什么软件

ABBYY&#xff0c;一款强大的OCR文字识别软件&#xff01; 在日常的工作中&#xff0c;我们常常需要提取PDF或图片上的大段文字&#xff0c;如果字数少的话&#xff0c;我们可以直接手打&#xff0c;但如果出现大篇幅的文字&#xff0c;那就有点头疼了。今天&#xff0c;我就向…...

软件测试技术(四)白盒测试

白盒测试 白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程&#xff0c;而不测试软件产品的功能&#xff0c;用于纠正软件系统在描述、表示和规格上的错误&#xff0c…...

Java基础语法(十二):try-catch块

目录 前言 一、try-catch是什么&#xff1f; 二、其他异常处理机制 总结 前言 Java 异常处理机制是 Java 程序设计中至关重要的一部分。它允许程序员像处理普通数据一样处理异常&#xff0c;并根据异常类型采取合适的措施。其中一个非常基本的异常处理机制是 try-catch 块…...

尚融宝25-投资列表展示以及实现充值功能

目录 一、展示投资列表 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 二、充值功能 &#xff08;一&#xff09;需求 1、需求描述 2、流程 &#xff08;二&#xff09;充值 1、后端 2、前端 &#xff08;三&…...

QML基础模型(Basic Model)

最基本的分离数据与显示的方法是使用Repeater元素。它被用于实例化一组元素项&#xff0c;并且很容易与一个用于填充用户界面的定位器相结合。 最基本的实现举例&#xff0c;repeater元素用于实现子元素的标号。每个子元素都拥有一个可以访问的属性index&#xff0c;用于区分不…...

如果ChatGPT写作论文,保姆及教程以及问题答疑

上次发表“如何用ChatGPT完成论文”后&#xff0c;许多捧场看官评论讨论&#xff0c;也有不少同学实操成功&#xff0c;但更多人寻求帮助。所以今天再整理一篇&#xff0c;把大家的疑问进行说明。 1. ChatGPT写的论文能否被检查出&#xff1f; 有同学反映将一段ChatGPT…...

机器人中的数值优化(三)—— 无约束最优化方法基础、线搜索准则

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

vulnhub靶场之bluemoon

1.信息收集 存活主机进行探测&#xff0c;发现主机192.168.239.176存活。 对主机192.168.239.176进行端口扫描&#xff0c;发现21、22、80端口 访问http://192.168.239.176&#xff0c;并查看源码未发现可利用的行为。 进行目录扫描发现可疑路径/hidden_text 浏览器访问h…...

VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter

前言&#xff1a; vtkPolyDataConnectivityFilter 使用过&#xff0c;但网上没有看到完事的教程&#xff1b;这里整理一下&#xff1b; 提取数据集中连通的多边形数据。 该类是一个滤波器&#xff0c;提取cell&#xff08;区域&#xff09; - 拥有公共点或者满足某个阈值 该类…...

scss、css样式中使用变量的方法;Vue动态改变css等样式文件中的变量

目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.遇到一些样式 设置的值都是重复的不想重复写&#xff0c;想和js一样定义一个常量&#xff0c;然后直接引用这个常量。 2.想要在js中动态设置样式中的值&#xff0c;在 css、scss等样式表中直接使用。 二、原因及解…...

数据治理在学术上的发展史以及未来展望

数据治理是大数据领域中非常重要的一环&#xff0c;从早期的学术研究到如今的各大企业落地实践&#xff0c;经历了漫长的过程&#xff0c;数据治理的实践落地本身也是一场马拉松。 从百度学术通过精确关键词匹配&#xff0c;搜索中文期刊的“数据治理” 和外文期刊的“data gov…...

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&…...

【Spring篇】IOC相关内容

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 目录 一、bean基础配置 1.bean基础配置(id与class) 2.bean的name属性 3.bean作用范围scope配置 二、bean实例化 1.构造方法实例化 2.分析Spring的错误信息 3.静态工厂实例化 4.实例工厂 5.FactoryBean 三…...

Python超矩形

文章目录 距离函数矩形分割 Rectangle是 scipy.spatial中封装的类&#xff0c;其构造函数只需输入最小值和最大值的数组即可&#xff0c;并且可通过内置的 volume方法计算广义的体积。 from scipy.spatial import Rectanglerec Rectangle((0,0), (5,5)) print(rec.maxes) …...

【软考数据库】第五章 计算机网络

目录 5.1 网络功能和分类 5.2 OSI七层模型 5.3 TCP/IP协议 5.4 传输介质 5.5 通信方式和交换方式 5.6 IP地址 5.7 IPv6 5.8 网络规划和设计 5.9 其他考点补充 5.10 网络安全技术 5.11 网络安全协议 前言&#xff1a; 笔记来自《文老师软考数据库》教材精讲&#xff…...

深眸科技|深度学习、3D视觉融入机器视觉系统,实现生产数智化

随着“中国制造2025”战略加速落实&#xff0c;制造业生产线正在加紧向智能化、自动化和数字化转型之路迈进。而人工智能技术的兴起以及边缘算力持续提升的同时&#xff0c;机器视觉及其相关技术也在飞速发展&#xff0c;并不断渗透进工业领域&#xff0c;拓展应用场景的同时&a…...

DateFormat使用时需要注意:多线程下需要特殊处理

前言 工作或学习过程中难免会接触到时间&#xff08;Date&#xff09;相关的内容&#xff0c;比如String类型转为Date类型&#xff0c;或者Date类型转为String类型&#xff0c;jdk为我们提供了一套完善的日期格式化工具&#xff0c;DateFormat类&#xff0c;使用者可以使用该接…...

Packet Tracer - 研究直连路由

Packet Tracer - 研究直连路由 目标 第 1 部分&#xff1a;研究 IPv4 直连路由 第 2 部分&#xff1a;研究 IPv6 直连路由 拓扑图 背景信息 本活动中的网络已配置。 您将登录路由器并使用 show 命令发现并回答以下有关直连路由的问题。 注&#xff1a;用户 EXEC 密码是 c…...

大专生程序员找工作的一点小建议 知识分享 经验分享

最近呢有人在私信我 就问我说我呢是一个大专生 大专毕业 学历呢也不是很好 我但是我学的是这个计算机 这样一个专业 然后呢现在找工作找不到 就这样的一个要求 让我们呢给一些建议 当然就是私底下在网上聊吗 就会给 也相信 我的一个建议是什么样的 就是你首先你要去找工作的 首…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...