大数跨境
0
0

【Arduino中级系列教程】项目八 实时温湿度检测器

【Arduino中级系列教程】项目八 实时温湿度检测器 DF创客社区
2021-01-12
4
导读:做个最简单的,本地实时显示数据的温度检测器
【点击上方「蓝字」关注DF创客社区,一起成为技术颜控】

上一课:【Arduino中级系列教程】项目七 火焰报警器

友情提示:搭配Gravity:新版Arduino中级套件食用更佳!

👆点击查看👆


想不想做个实时温湿度检测器,走到哪儿,测到哪儿!只需要一个DHT11温湿度传感器就能做到,再外加个1602的显示屏,实时查看数据。等你之后玩Arduino够溜的时候,还可以往控制器上加网络模板,这样数据不仅能实时显示,还能放到网上,或者通过微博发布出去,是不是很心动了呢?那就先做个最简单的,本地实时显示数据~

所需材料

  • 1×  DHT11温湿度传感器
  • 1×  I2C LCD1602液晶模块

硬件连接

  • DHT11温湿度传感器  数字引脚4
  • LCD GND GND
  • LCD VCC 5V
  • LCD SDA SDA
  • LCD SCL SCL
  • A0,A1,A2全部插上跳冒

输入代码

下载代码之前,把库“dht11”和“LiquidCrystal_I2C”放入Arduino IDE的libraries中,不知道如何加载库的小伙伴可以先看下项目十二 遥控器一节,有详细说明过程。

样例代码:

//实时温湿度检测器
#include <dht11.h>         
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);  //设置LCD的地址为0x20,可以设置2行,每行16个字符
dht11 DHT;
#define DHT11_PIN 4
void setup(){
  lcd.init();                 // LCD初始化设置
lcd.backlight();           // 打开LCD背光
Serial.begin(9600);       // 设置串口波特率9600
  //串口输出”Type, status, Humidity(%), Temperature(C)”
  Serial.println("Type,\tstatus,\tHumidity(%),\tTemperature(C)");
lcd.print("Humidity(%): ");   //LCD屏显示” Humidity(%):”
lcd.setCursor(01);            //光标移到第2行,第一个字符
lcd.print("Temp(C): ");        //LCD屏显示”Temp(C):”
}
void loop(){
  int chk;     //chk用于存储DHT11传感器的数据
Serial.print("DHT11, \t");   
  //读取DHT11传感器的数据
  chk = DHT.read(DHT11_PIN);   
  switch(chk){   
    caseDHTLIB_OK:  
               Serial.print("OK,\t");
               break;
    caseDHTLIB_ERROR_CHECKSUM:
               Serial.print("Checksum error,\t");
               break;
    caseDHTLIB_ERROR_TIMEOUT:
               Serial.print("Time out error,\t");
               break;
    default:
               Serial.print("Unknown error,\t");
               break;
  }
//串口显示温湿度值
Serial.print(DHT.humidity,1);
Serial.print(",\t");
  Serial.println(DHT.temperature,1);
  //LCD显示温湿度值
lcd.setCursor(120);
lcd.print(DHT.humidity,1);
lcd.setCursor(81);
lcd.print(DHT.temperature,1);
delay(1000);
}

下载完代码后,不仅可以从LCD屏上显示当前的温湿度,还可以从串口中看到值。

代码回顾

首先,把用到的库声明一下:

#include <dht11.h>   
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

dht11.h和LiquidCrystal_I2C的库,我们事先已经加载过库了,那么Wire.h的库为什么不需要加载呢?因为我们下载的Arduino IDE本身自带这个库。不信的话,你可以同样找到libraries文件夹,Wire.h库会在里面。

有了现有的库,所以只需要在程序的一开始声明一下这个LCD:

LiquidCrystal_I2C lcd(0x20,16,2);

0x20:I2C地址

由屏后面的A0~A1决定,具体不同的地址可以查看链接:http://wiki.dfrobot.com.cn/index.php/(SKU:DFR0063)IIC_LCD1602_display_module_%E5%85%BC%E5%AE%B9Gadgeteer

16:每行16个字符

2:共2行

代码中LiquidCrystal_I2C涉及函数说明:

lcd.init() LCD初始化
lcd.backlight() 打开LCD背光灯
lcd.print() LCD显示
lcd.setCursor() 设置LCD光标停留位置

注:更多用法可见LiquidCrystal_I2C/examples中样例代码。

switch…case语句

“switch”可以理解为是“开关”,多选择开关。与if语句相似之处在于switch…case也用于判断,又与if不同点在于它能判断多种情况。

switch(var){
       case 1:
           //当var=1,做点什么事
          break; //跳出switch语句
      case 2
           //当var=2,做点什么事
           break
      default
           //如果没有一种情况是匹配的,运行default
           //default可有可无,视情况而定
}

注意几点:

1、case后面是冒号,不是分号。

2、关键字break用于退出switch语句,通常每条case语句都以break结尾。如果没有break语句,switch语句将会一直执行接下来的语句(一直向下)直到遇见一个break,或者switch语句结尾。

注:如果对switch⋯case语句用法还有不懂的,可以查看下Arduino IDE中的examples/05.Control/switchCase相关资料。

- END -

小伙伴们在之后的Arduino学习之旅中,不管你遇到奇奇怪怪的问题,都希望你与我们交流,你可以选择登陆我们的DFRobot创客社区!mc.dfrobot.com.cn 发帖提问!

也可以加我们的Arduino官方群:369301430,大家一起交流学习。

硬件军火库


新版Arduino中级套件


点击了解详情👆


大家有什么想法,或是对文章的指正,都欢迎在下方留言

学有余力的小伙伴,可以点击阅读原文,到DF创客社区继续学习!




 往期回顾 



▼ Arduino基础系列教程


点击阅读👆

【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.1k
粉丝0
内容1.3k