【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 以上就是 1
        data |= (1 << (7 - i)); //高位在前,低位元在后;
      while (digitalRead(dhPin) == HIGH); // 等待下一bit的接收;
    }
  }
  return data;
}
void start_test() 
{  // 每次要与 DHT11 沟通
  digitalWrite(dhPin, LOW); //拉低到 LOW,发送表示要开始沟通的信号;
  delay(30); //延时要大于 18ms,以便 DHT11 能检测到开始信号;我们用30ms
  digitalWrite(dhPin, HIGH);  // 拉高HIGH, 让 DHT11 拉低到 LOW 告诉我们要传送
  delayMicroseconds(40);  // 给40us等待 DHT11 响应;
  pinMode(dhPin, INPUT); // 改为输入 mode 准备 digitalRead( )
  while (digitalRead(dhPin) == HIGH);  // 必须等到 LOW
  delayMicroseconds(80); //DHT11 发出响应,会拉低 80us;所以至少等80us
  while (digitalRead(dhPin) == LOW); // 继续等到变 HIGH
  delayMicroseconds(80); //DHT11 会拉高到HIGH 80us 后开始发送数据;
  for (int i = 0; i < 5; i++) dat[i] = readData(); //接收温湿度资料,校验位元;
  pinMode(dhPin, OUTPUT); // 改为 Output mode, 准备拉高HIGH
  digitalWrite(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-960us
     digitalWrite(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 rom
   Ds18b20WriteByte(0XBE);//read,start form the 0 byte,LSB forst
   TL=Ds18b20ReadByte();//LSB
   TH=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 positive
    tem=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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CAE SDK】CEETRON 28年应用案例——以船舶、结构仿真、材料成型领域为例

随着计算机辅助工程&#xff08;CAE&#xff09;技术的不断发展&#xff0c;虚拟仿真工具在工程设计、分析和优化中发挥着越来越重要的作用。CAE系统涵盖了前处理、求解、后处理等多个环节&#xff0c;极大地提升了工程仿真的准确性和效率。 CEETRON SDK作为虚拟仿真领域的一款…

ThingsBoard规则链节点:RPC Call Reply节点详解

引言 1. RPC Call Reply 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 设备控制 3.2 状态查询 3.3 命令执行 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备管理…

基于深度学习的路面裂缝检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

“心玲守护”乡村孩子的一片天公益活动在10所学校开展

2023年9月—2024年10月期间&#xff0c;由林志玲女士发起、中国乡村发展基金会支持&#xff0c;并联合重庆市渝中区红樱桃义工协会执行的“心玲守护”乡村孩子的一片天——儿童青少年心理健康援助项目活动&#xff0c;已在重庆市万州区、璧山区、巫山县和湖南省益阳市区域内的1…

计算机网络——1.1计算机网络概述

计算机网络——计算机网络概念 前言 计算机网络是计算机学习中必不可少的一环&#xff0c;甚至可以说&#xff0c;是离我们普通人日常生活最近的计算机知识。为什么呢&#xff1f;因为我们上网上网&#xff0c;都离不开计算机网络&#xff0c;打游戏&#xff0c;刷剧&#xff…

使用HtmlAgilityPack+PuppeteerSharp+iText7抓取IdentityServer4帮助文档

需要学习IdentityServer4的用法&#xff0c;但是在IdentityServer4帮助文档网站&#xff08;参考文献1&#xff09;中没有找到下载离线文档的地方&#xff0c;准备使用HtmlAgilityPackPuppeteerSharpiText7将网站内容抓取生成离线PDF文档&#xff0c;便于本机学习、查看。   …

热烈庆祝,2024年11月9日(星期六)骑行马刺沟顺利结束

晨光微露&#xff1a;蓄势待发清晨的第一缕阳光穿透薄雾&#xff0c;照亮了集合现场。我们校长群的骑行爱好者们早早地聚集在约定地点&#xff0c;检查装备、调整车辆&#xff0c;彼此间寒暄着&#xff0c;兴奋之情溢于言表。随着一声令下&#xff0c;队伍正式出发&#xff0c;…

python数据分析|二 IPython和JupyterNotebooks

一 python 解释器 Python解释器同一时间只能运行一个程序的一条语句。 如何适用&#xff1a; win r cmd 要退出Python解释器返回终端&#xff0c;可以输入 exit() 或 Ctrl-D。 假设创建了一个 hello_world.py 文件&#xff0c;它的内容是&#xff1a; 可以用下面的命令运…

【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》

智能聊天机器人——“有问必答” 【注】该项目已开源&#xff0c;开源地址为&#xff1a;链接&#xff0c;代码更新可能不及时。 第2章、《模式一&#xff1a;问候模式》 主窗体的布局如下图所示&#xff1a; 共九种功能模式&#xff0c;最下方为关闭窗口按钮。 点击问候模…

@RestController 源码解读:解决 Web 开发中 REST 服务的疑难杂症

目录 一、RestContrller注解 1.1 查看底层源码 1.2 AliasFor注解说明 1.2.1 注解别名 1.2.2 元数据别名 1.3 value() 方法的作用 一、RestContrller注解 1.1 查看底层源码 首先编写如下内容&#xff1a; RestController public class TestController {} 按住 Ctrl &am…

【Android】轮播图——Banner

引言 Banner轮播图是一种在网页和移动应用界面设计中常见的元素&#xff0c;主要用于在一个固定的区域内自动或手动切换一系列图片&#xff0c;以展示不同的内容或信息。这个控件在软件当中经常看到&#xff0c;商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手…

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过&#xff0c;个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…

ArcGIS软件之“计算面积几何”地图制作

目录 一、消防站的泰森多边形ex12二、人口调查的泰森多边形三、人口调查的泰森多边形属性设置四、计算面积几何&#xff0c;用于求密度五、求密度六、给“现有中学”属性 R1赋值七、“现有中学”设置多环缓存区 并为它赋值八、“土地使用”为不同的功能区赋值九、三个图层相交十…

Rust @绑定(Rust@绑定)(在模式匹配的同时将值绑定到变量)

文章目录 Rust中的绑定基础概念示例&#xff1a;基本模式匹配 绑定的使用示例&#xff1a;范围匹配并绑定变量 深入探索绑定的好处示例&#xff1a;复杂数据结构中的应用 总结 附加 Rust中的绑定 Rust 语言以其强类型系统和内存安全的特性著称。在进行模式匹配时&#xff0c;R…

使用EasyExcel实现导出excel文件时生成多级下拉选

前言 公司有个需求本来只涉及到两个下拉选项&#xff0c;后面就想能不能实现多个下拉选&#xff0c;当然我这里说的多个下拉选是联动的&#xff0c;比如省、地市、区县这种。 实现步骤 1、添加EasyExcel的Maven依赖 <dependency><groupId>com.alibaba</group…

海量小文件挑战下的CephFS:优化策略与实践探索

文章目录 1.背景2.基本概念2.1 CephFS IO流程2.2 Ceph-FUSE 3. 问题3.1 问题源起3.2 理论分析3.3 原因排查3.3.1 Ceph-FUSE日志分析3.3.2 提出猜想3.3.3 代码验证3.3.3.1 MDS端3.3.3.2 Ceph-FUSE端 3.4 小结 1.背景 随着大数据、人工智能技术的蓬勃发展&#xff0c;人类对于算…

编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100(sys模块)

""" 编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100 """ #导入模块 #读取起始IP&#xff0c;结束IP import sys start_ip sys.argv[1] end_ip sys.argv[2] # print(start_ip,end_ip)##########组装数据…

lvgl: 示例入门

目录 1. A very simple hello world label 2. A button with a label and react on click event 3. Create styles from scratch for buttons 4. Create a slider and write its value on a label 1. A very simple hello world label void _lv_example_get_started_1(void) …

Redis2:Redis数据结构介绍、通用命令、String类型、Key的层级格式

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

云计算基础

声明 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 目录 一、云架构介绍 二、云服务 三、云分类 四、共享责任模型 五、云架构 六、云架构设计 七、集…