当前位置: 首页 > 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…...

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

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

【亲测免费】 基于深度学习的计算机视觉PPT

基于深度学习的计算机视觉PPT 【下载地址】基于深度学习的计算机视觉PPT 本仓库提供了一份名为“基于深度学习的计算机视觉PPT”的资源文件&#xff0c;该文件详细介绍了计算机视觉的基本概念、理论基础以及深度学习在计算机视觉中的应用。计算机视觉是一门研究如何使机器“看”…...

从零到一:基于Kettle(PDI)构建企业级数据集成管道

1. 企业级数据集成为何选择Kettle&#xff1f; 第一次接触Kettle&#xff08;现在官方称为Pentaho Data Integration&#xff09;是在2013年一个银行数据迁移项目上。当时客户需要将分散在20多个业务系统中的客户数据整合到新建的数据仓库&#xff0c;项目组评估了多个ETL工具后…...

构建Web化配置中心:从环境变量管理到实时热更新的工程实践

1. 项目概述与核心价值最近在折腾一个挺有意思的小项目&#xff0c;叫Laliet/cc-switch-web。乍一看这个标题&#xff0c;可能有点摸不着头脑&#xff0c;但如果你是一个经常需要处理不同环境配置、或者在不同服务之间切换的前端或全栈开发者&#xff0c;这个项目很可能就是你一…...

本地Cookie管理终极指南:Get cookies.txt LOCALLY完全解析

本地Cookie管理终极指南&#xff1a;Get cookies.txt LOCALLY完全解析 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字时代&#xff0c;…...

Circuit Playground Express 硬件解析与四步编程实战:从创客入门到项目开发

1. 项目概述&#xff1a;为什么选择 Circuit Playground Express 作为创客起点 如果你对硬件编程、物联网或者智能设备感兴趣&#xff0c;但又被 Arduino Uno 上密密麻麻的杜邦线和面包板劝退&#xff0c;或者觉得树莓派 Zero 的 Linux 系统门槛太高&#xff0c;那么 Adafruit…...

《从GIS前端到AIGC大厂:WebGIS、WebGL、Three.js技术栈的底层能力拆解与岗位适配指南》

前端GIS技术栈&#xff1a;从图形学底层到AIGC营销增长的全链路实战指南 &#xff08;附大厂AI前端JD精准匹配与可落地项目&#xff09; &#x1f516; 目录理论篇&#xff1a;GIS中必学的图形学、WebGL、Three.js核心内容&#xff08;含GIS实战细节&#xff09; 1.1 计算机图形…...

百考通AI实践报告:让实习沉淀有迹可循,成长答卷专业呈现

实习实践是连接理论学习与职场实战的桥梁&#xff0c;而一份逻辑清晰、内容详实的实践报告&#xff0c;既是对实习经历的系统复盘&#xff0c;也是个人成长与能力认证的重要载体。然而&#xff0c;许多学生在撰写报告时&#xff0c;常陷入思路混乱、结构松散、重点模糊的困境&a…...

雷达接收机频谱稳定与纯度:核心指标、测试方法与设计实战

1. 项目概述&#xff1a;为什么频谱稳定性和纯度是雷达的“生命线”&#xff1f; 在雷达系统里&#xff0c;我们常把发射功率、天线增益、接收机灵敏度这些指标挂在嘴边&#xff0c;因为它们直接决定了雷达能“看”多远。但今天要聊的“接收机频谱稳定性和纯度”&#xff0c;就…...

LLM函数调用工程化:从基础概念到智能体框架设计实战

1. 项目概述&#xff1a;从“函数调用”到智能体交互的范式演进最近在GitHub上看到一个名为“SKY-lv/function-calling”的项目&#xff0c;这个标题乍一看平平无奇&#xff0c;甚至有些过于直白。但作为一名长期混迹在AI应用开发一线的工程师&#xff0c;我立刻嗅到了一丝不寻…...

Windows风扇控制终极指南:Fan Control让你的电脑更静音更高效

Windows风扇控制终极指南&#xff1a;Fan Control让你的电脑更静音更高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...