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

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据,并通过LabVIEW上位机绘制演化曲线。

DHT11

DHT11 数字温湿度传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

简介

DHT11 内置一个电阻式感湿元件和一个 NTC 测温元件,DHT11 为 4 针单排引脚封装,采用单线制串行接口,只需加适当的上拉电阻,信号传输距离可达20米以上。

dht11_pins

DHT11 工作参数:

  • 湿度测量范围:20~90%RH
  • 湿度测量精度:±5%RH
  • 温度测量范围:0~50℃
  • 温度测量精度:±2℃
  • 工作电压:DC 3.3V/5V

DHT11 采用单总线协议,也就是使用一根 DATA 线进行数据的收发。DHT11 的 DATA 线一次通讯时间 4ms 左右,数据分整数部分、小数部分和校验位,具体为: 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。

时序图

dht11_time

DHT11 的 DATA 传输一次完整的数据为 40bit,按照高位在前,低位在后的顺序传输。

数据格式为:8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位,一共 5 字节(40bit)数据。

代码

由于直接调用 DHT11.h 库函数出错,因此需要自己编写 DHT11 驱动函数

int dhPin = 4;  // 温湿度信号接脚连入 Pin 4
byte dat[5];   // 存放湿度2byte, 温度 2 byte, checksum 1 byte
byte readData() {  // 每次读取 8 bits  ( one byte)byte data = 0 ; // 初始化数据,不然可能出错for (int i = 0; i < 8; i++) {if (digitalRead(dhPin) == LOW) {  // 一开始要 LOW 才表示要传过来while (digitalRead(dhPin) == LOW); //等待 50us;// 现在已经变成 HIGH 了delayMicroseconds(30); //判断高电平持续时间,以判定资料是‘0’还是‘1’;if (digitalRead(dhPin) == HIGH) // 持续了 30 us 以上就是 1data |= (1 << (7 - i)); //高位在前,低位元在后;while (digitalRead(dhPin) == HIGH); // 等待下一bit的接收;}}return data;
}
void start_test() 
{  // 每次要与 DHT11 沟通digitalWrite(dhPin, LOW); //拉低到 LOW,发送表示要开始沟通的信号;delay(30); //延时要大于 18ms,以便 DHT11 能检测到开始信号;我们用30msdigitalWrite(dhPin, HIGH);  // 拉高HIGH, 让 DHT11 拉低到 LOW 告诉我们要传送delayMicroseconds(40);  // 给40us等待 DHT11 响应;pinMode(dhPin, INPUT); // 改为输入 mode 准备 digitalRead( )while (digitalRead(dhPin) == HIGH);  // 必须等到 LOWdelayMicroseconds(80); //DHT11 发出响应,会拉低 80us;所以至少等80uswhile (digitalRead(dhPin) == LOW); // 继续等到变 HIGHdelayMicroseconds(80); //DHT11 会拉高到HIGH 80us 后开始发送数据;for (int i = 0; i < 5; i++) dat[i] = readData(); //接收温湿度资料,校验位元;pinMode(dhPin, OUTPUT); // 改为 Output mode, 准备拉高HIGHdigitalWrite(dhPin, HIGH); //发送完一次资料后释放bus,等待下一次开始信号;
}
void setup(  ) {Serial.begin(9600);Serial.println("begin!");pinMode(dhPin, OUTPUT);
}
void loop(  ) {start_test( );Serial.print("Current humdity = ");Serial.print(dat[0], DEC); //显示湿度的整数部分;Serial.print('.');Serial.print(dat[1], DEC); //显示湿度的小数位;Serial.println(" %");Serial.print("Current temperature = ");Serial.print(dat[2], DEC); //显示温度的整数部分;Serial.print('.');Serial.print(dat[3], DEC); //显示温度的小数位;Serial.println(" C");delay(1985);
}

参考:基于arduino的dht11温湿度传感器的使用 。

效果

硬件连接

电路

application

实物连线

wire

串口打印

UART

dht11_printf

DS18B20

DS18B20 数字温度计是 DALLAS 公司生产的 1-Wire 单总线器件,具有线路简单、体积小的特点。

简介

ds18b20

特点:

  • 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
  • 测温范围 -55℃~+125℃,固有测温误差 1℃。
  • 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
  • 工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
  • 在使用中不需要任何外围元件
  • 测量结果以9~12位数字量方式串行传送

电路

模块

ds18b20_mode

电路

ds18b20_mode

时序图

ds18b20_time_sequence

代码

这里同样是库函数无法正常加载,因此不使用库函数驱动 DS18B20

int DS18B20DQ = 4;
void setup() {// put your setup code here, to run once:Serial.begin(115200);
}
void loop() {float t;t= Ds18b20GetTemp();Serial.print("The temperature is :");Serial.println(t);delay(2000);
}
void Ds18b20Rst(void)
{pinMode(DS18B20DQ,OUTPUT);digitalWrite(DS18B20DQ,LOW);delayMicroseconds(750);//主机发送复位脉冲480us-960usdigitalWrite(DS18B20DQ,HIGH);delayMicroseconds(15);//18b20等待15-60us  
}
/*等待18b20响应* 返回1:未检测到18b20* 返回0:存在*/
byte Ds18b20Check()
{ byte retry=0;pinMode(DS18B20DQ,INPUT);while(digitalRead(DS18B20DQ)&&retry<200){   retry++;delayMicroseconds(1);}if(retry>=200)return 1;else retry=0;while(!digitalRead(DS18B20DQ)&&retry<240){retry++;delayMicroseconds(1);} if(retry>240)return 1;return 0;   }
/*从18b20读取一个位* 返回值1/0*/
byte Ds18b20ReadBit(void)
{byte data;pinMode(DS18B20DQ,OUTPUT);digitalWrite(DS18B20DQ,LOW);delayMicroseconds(2);digitalWrite(DS18B20DQ,HIGH);pinMode(DS18B20DQ,INPUT);delayMicroseconds(12);if(digitalRead(DS18B20DQ))data=1;else data=0;delayMicroseconds(50);return data;}
/*从18b20读取一个字节* 返回值:读到的数据*/
byte Ds18b20ReadByte(void)
{byte i,j,dat;dat=0;for(i=1;i<=8;i++){j=Ds18b20ReadBit();dat=(j<<7)|(dat>>1);//低位在前}return dat;}
/*写一个字节到Ds18b20* dat:要写入的字节*/
void Ds18b20WriteByte(byte dat)
{ byte i;byte temp;pinMode(DS18B20DQ,OUTPUT);for(i=1;i<=8;i++){temp=dat&0x01;dat=dat>>1;if (temp)//write 1{digitalWrite(DS18B20DQ,LOW);delayMicroseconds(2); digitalWrite(DS18B20DQ,HIGH);delayMicroseconds(60); }else{digitalWrite(DS18B20DQ,LOW);delayMicroseconds(60); digitalWrite(DS18B20DQ,HIGH);delayMicroseconds(2); }}}/*开始温度转换**/
void Ds18b20Start(void)
{Ds18b20Rst();Ds18b20Check();Ds18b20WriteByte(0XCC);Ds18b20WriteByte(0X44);}
/*从Ds18b20得到温度值* 精度0.1c* 返回值:温度值(-550-1250)*/
float Ds18b20GetTemp()
{byte temp;byte TH=0,TL=0;short tem;float t;Ds18b20Start();Ds18b20Rst();Ds18b20Check();Ds18b20WriteByte(0XCC);//skip romDs18b20WriteByte(0XBE);//read,start form the 0 byte,LSB forstTL=Ds18b20ReadByte();//LSBTH=Ds18b20ReadByte();//MSB//Serial.println(TH);//Serial.println(TL);if(TH>7){TH=~TH;TL=~TL;temp=0;//the temperature is negative}else temp=1;// the temperature is positivetem=TH;//高八位tem<<=8;tem+=TL;//低八位t=((float)tem*0.0625);if(temp)return t;else return -t;}

效果

硬件连接

hardware

串口打印效果

UART_println

LabVIEW

结合 LabVIEW 上位机可实现远程监控

流程图

flow

代码改进

int DS18B20DQ = 4;
byte comdata[3]={0};      //定义数组数据,存放串口命令数据
void setup() {// put your setup code here, to run once:Serial.begin(115200);
}void loop() 
{while (Serial.available() > 0)   //不断检测串口是否有数据{receive_data();            //接受串口数据test_do_data();            //测试数据是否正确并更新数据}
}void receive_data(void)       
{int i ;for(i=0;i<3;i++){comdata[i] = Serial.read();//延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,delay(2);}
}void test_do_data(void) // 测试并执行命令
{if(comdata[0] == 0x55) //0x55和0xAA均为判断是否为有效命令{if(comdata[1] == 0xAA){if(comdata[2] == 0xFF){// 读取温度值float t;t= Ds18b20GetTemp();Serial.println(t);}}}
}

DHT11

labview_dht11

DS18B20

labview_ds18b20

温度动态采集展示

ds18b20_labview

相关文章:

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据&#xff0c;LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据&#xff0c;并通过LabVIEW上位机绘制演…...

Oracle Fetch子句

FETCH 子句在 Oracle 中可以用来限制查询返回的行数 Oracle FETCH 子句语法 以下说明了行限制子句的语法&#xff1a; [ OFFSET offset ROWS]FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]OFFSET 子句 OFFSET 子句指定在行限制开始之前要跳过行…...

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间&#xff0c;而我们选择于 C 的类内包装原生线程库的形式来创建&#xff0c;其具体实行逻辑如图 可以看到&#xff0c;整个线程池其实就是一个大型的 CP 模型&#xff0c;接下来我们来完成它 2. 整体模板 #pragma …...

95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

目录 1.双向链表的头插 方法一 方法二 2.双向链表的头删 3.双向链表的销毁 4.双向链表的某个节点的数据查找 5.双向链表的中间插入 5.双向链表的中间删除 6.对比顺序表和链表 承接94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删文章 1.双向链表的头插 方法…...

leetcode82:删除排序链表中的重复节点||

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示例 2&#xff1a; 输入&#xff1a;head [1,1,1,2…...

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易&#xff0c;因为 C# 是一种强类型语言。 但是&#xff0c;我们可以通过使用一些技术和库来实现这一点&#xff0c;例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …...

Linux进程信号(信号的产生)

目录 什么是信号&#xff1f; 信号的产生 信号产生方式1&#xff1a;键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…...

97_api_intro_imagerecognition_pdf2word

通用 PDF OCR 到 Word API 数据接口 文件处理&#xff0c;OCR&#xff0c;PDF 高可用图像识别引擎&#xff0c;基于机器学习&#xff0c;超精准识别率。 1. 产品功能 通用识别接口&#xff1b;支持中英文等多语言字符混合识别&#xff1b;formdata 格式 PDF 文件流传参&#xf…...

【算法】【优选算法】二分查找算法(上)

目录 一、二分查找简介1.1 朴素二分模板1.2 查找区间左端点模版1.3 查找区间右端点模版 二、leetcode 704.⼆分查找2.1 二分查找2.2 暴力枚举 三、Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1 二分查找3.2 暴力枚举 四、35.搜索插⼊位置4.1 二分查找4.2 暴力枚…...

springboot初体验

目录 环境 controller 修改端口号 更改banner图标 运行结果 最核心的:自动装配 环境 jdk17springboot3.3.5maven3.8.2 controller controller层和启动类同级 package com.example.demo.controller; ​ import org.springframework.web.bind.annotation.RequestMapping;…...

使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master DroidAITech/vslam-evaluation GitHub 目录 1.kalibr安装 1.1安装依赖项 1.2创建工作空间 1.3下载kalibr并编译 1.4设置环境变量 2.准备标定板 3.配置驱动和打…...

绿色工厂认定流程

以下是认定绿色工厂的一般流程&#xff1a; 编制年度创建计划 各省辖市、省直管县&#xff08;市&#xff09;会结合本地区重点产业发展现状&#xff0c;挑选一批基础条件良好、有创建意愿和条件的企业进行储备培育&#xff0c;并依据当地工业企业发展实际情况按年度制定绿色工…...

《Python游戏编程入门》注-第5章5

《Python游戏编程入门》的“Analog Clock示例程序”部分讲解了模拟时钟的实现方法。该模拟时钟可以通过时针、分针和秒针的旋转,显示当前时间,如图1所示。 图1 模拟时钟 1 绘制圆 从图1中可以看出,时钟的边缘是一个白色的圆,可以通过如图2所示的代码进行绘制。 图2 绘制圆…...

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例&#xff0c;以及提示模板&#xff0c;然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答&#xff0c;作为样本 samples [{"theme": &…...

K倍区间 C++

1230. K倍区间 - AcWing题库 一开始想到的用前缀和来做&#xff0c;时间复杂度为O(n^2),Time Limit Exceeded #include <iostream> #include <cstring> #include <algorithm> #include <cstdio>using namespace std;const int N 100010;int n,k; in…...

Linux - 弯路系列3:安装和编译libvirt-4.5.0

系统&#xff1a;Anolis8&#xff08;离线&#xff09; 目录 1、步骤2、make过程中的错误错误1&#xff1a;error: xdr_u_int64_t undeclared (first use in this function) 3、make install的错误错误1&#xff1a;/usr/bin/mkdir -p ""/usr/local/etc/libvirt/nwf…...

Jenkins插件使用问题总结

Git Push插件 插件介绍 主要是用于git推送代码到远程仓库中使用&#xff0c;插件地址 pipeline中使用 官方说明中只有一句代码gitPush(gitScm: scm, targetBranch: env.BRANCH_NAME, targetRepo: origin) 流水线语法中也做的不齐全所以一开始我老是设置错&#xff0c;导致代…...

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…...

Sql server查询数据库表的数量

SELECT count(*) FROM sys.objects WHERE typeU --统计表数量 SELECT NAME FROM sys.objects WHERE typeU --列出表名称 或者 SELECT COUNT(*) FROM SysObjects Where XTypeU --统计表数量 SELECT Name FROM SysObjects Where XTypeU --列出表名称 --判断字…...

Linux学习笔记之软件包管理RPM与YUM

RPM包的管理 介绍 RPM&#xff08;RedHat Package Manager&#xff09;用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。他生成具有.RPM扩展名的文件。RPM类似Windows的setup.exe&#xff0c;这一文件格式虽然打上了RedHat的标志&#xff0c;但理念…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...