【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

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

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

相关文章

quartz

理论知识&#xff1a; 堆&#xff1a;堆是一颗安全二叉树&#xff0c;是一种特殊的树结构&#xff0c;它的每一个节点值都要比父节点要么大&#xff0c;要么小 小顶堆&#xff1a;最小的值放在最上面&#xff0c;每个子节点都比父节点大 大顶堆&#xff1a;最大的值放在最上…

提取神经网络数学表达式

来自《老饼讲解神经网络》 www..bbbdata.com 当我们在matlab训练好网络后&#xff0c;可以使用神经网络工具箱的sim(net,x)函数进行预测输出。但往往想提取出它的数学表达式&#xff0c;该怎么提取呢&#xff1f; 下面以《一个简单的神经网络例子》中的模型为例&#xff0c;提取…

Vue 的生命周期函数 和 Vuex

创建一个 Vue 实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的&#xff1a; var vm new Vue({// 选项 })虽然没有完全遵循 MVVM 模型&#xff0c;但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实…

使用etl工具kettle的日常踩坑梳理之二、从Hadoop中导出数据

想操作MySQL等关系型数据库的可以访问我上一篇文章&#xff0c;本章主要介绍操作Hadoop等大数据组件。 根据2024年11月份测试了kettle工具在9.3及以上版本已经没有内置连接大数据(如Hadoop)组件了。 建议安装9.2及以下的&#xff0c;我这里送上8.3.0版本的请用百度网盘下载链…

新版 idea 编写 idea 插件时,启动出现 ClassNotFound

IntelliJ IDEA 2024.1.6 (Ultimate Edition) Build #IU-241.19072.14, built on August 8, 2024 Licensed to Sophia Tout Subscription is active until June 29, 2025. For educational use only. Runtime version: 17.0.111-b1207.30 amd64 Kotlin: 241.19072.14-IJ 新版本…

Java面向对象编程进阶之包装类

Java面向对象编程进阶之包装类 一、为什么要使用包装类二、掌握基本数据类型与包装类之间的转换1、为什么需要转换&#xff1f;2、如何转换&#xff1f; 三、String与基本数据类型、包装类之间的转换1、案例2、特别注意 一、为什么要使用包装类 为了使得基本类型的数据变量具备…

【mysql】使用宝塔面板在云服务器上安装MySQL数据库并实现远程连接

前言 使用宝塔Linux面板安装MySQL数据库并实现远程连接 使用宝塔面板安装mysql 宝塔面板&#xff0c;华为云开放3306端口 一些命令 // 命令行连接数据库 mysql -uroot -p // MySQL 5 版本 GRANT ALL ON *.* TO root% IDENTIFIED BY 替换成你的root密码 WITH GRANT OPTION; // …

性能测试|JMeter接口与性能测试项目

前言 在软件开发和运维过程中&#xff0c;接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用&#xff0c;被广泛用于进行各种性能测试&#xff0c;包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

OpenGL ES 共享上下文实现多线程渲染

OpenGL ES 共享上下文时,可以共享哪些资源? 共享上下文实现多线程渲染 EGL 概念回顾 EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用: 与设备的原生窗口系统通信; 查询绘图表面的可用类型和配置; 创建绘图表面; 在OpenGL ES 和…

应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片

关于车规级芯片&#xff08;Automotive Grade Chip&#xff09;&#xff0c;车规级芯片是专门用于汽车行业的芯片&#xff0c;具有高可靠性、高稳定性和低功耗等特点&#xff0c;以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&#xff08;ECU&#xff09;和…

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议&#xff0c;和HTTP类似&#xff0c;因为轻量简单&…

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别&#xff0c;可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网&#xff1a; ​安装 WSL 前提 以下基于windows 111专业版进行配置&#xff0c;windows 10应该也是可以…

豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了

在这个大模型风起云涌的时代&#xff0c;技术的边界被不断拓宽&#xff0c;AI的力量正以前所未有的方式重塑我们的世界。如果你渴望站在技术的浪尖&#xff0c;深入了解增强现实&#xff08;AR&#xff09;、机器学习&#xff08;ML&#xff09;与强化学习&#xff08;RL&#…

OCR识别铁路电子客票

随着中国铁路客运领域进入全面数字化时代&#xff0c;国家税务总局、财政部和国铁集团于2024年10月18日联合发布公告&#xff0c;自2024年11月1日起&#xff0c;推广使用“电子发票&#xff08;铁路电子客票&#xff09;”。这一举措不仅为旅客出行提供了极大的便利&#xff0c…

【学习】Fine-tuning知识汇总

Fine-tuning 微调&#xff08;Fine-tuning&#xff09;是一种迁移学习的方法&#xff0c;用于在一个预训练模型的基础上&#xff0c;通过在特定任务的数据上进行有监督训练&#xff0c;来适应该任务的要求并提高模型性能。微调利用了预训练模型在大规模通用数据上学习到的语言…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类&#xff0c;用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键&#xff0c;这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示&#xff0c;包括单个按键…

【MySQL】约束

4. 约束 4.1 概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加约束。 4.2 约束…

css:盒子模型

目录 盒子模型 边框&#xff08;border&#xff09; 内边距&#xff08;padding&#xff09; 外边距&#xff08;margin&#xff09; 盒子模型&#xff0c;浮动&#xff0c;定位 把一只大象塞进冰箱里需要三步&#xff1a;打开冰箱门&#xff0c;把大象塞进去&#xff0c;…

【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!

NO.1 软件下载 软件名称&#xff1a;Stable Diffusion4.9&#xff08;SD&#xff09;软件语言&#xff1a;中文软件大小&#xff1a;9.6G系统要求&#xff1a;Windows10或更高&#xff0c;64位操作系统 NO.2 软件介绍 Stable Diffusion Stable Diffusion是一款前沿AI绘画工…

微服务(二)

目录 1.网关路由 1.1.认识网关 1.2.快速入门 1.2.1.引入依赖 1.2.2.启动类 1.2.3.配置路由 1.3.路由过滤 2.网关登录校验 2.1.鉴权思路分析 2.2.网关过滤器 2.3.自定义过滤器 2.3.1.自定义GatewayFilter 2.3.2.自定义GlobalFilter 2.4.登录校验 2.4.1.JWT工具 …