Arduino读取DHT11的温湿度显示在基于I2C的1602上

背景摘要

又到了周末,B站的番还未更新。闲来无事,搞搞吃灰已久的Arduino。

南方的冬天真冷啊,测测屋子里的温湿度怎么样!为了测量屋子里的温湿度,就用简单大方的Arduino,STM32继续吃灰去。

Arduino的开发流程

开发流程,无外乎是 硬件 与 软件 啦(废话2333)

一、硬件的搭建:

1.Arduino 板子的选择:

本人吃土啃老大学生一枚,专业是最不赚钱的机械自动化,所以手上的板子只有国产Arduino UNO 和 ESPduino。我一开始想用ESPduino作为开发板,想着以后能把温湿度上传到云,便一开始用ESPduino结果做到一半发现DAC口只有一个,根本不能实现用LiquidCrystal_I2C库(这个库最低要两个DAC口),Arduino yun买不起,就只有用UNO了。(下面是ESPduino)

2.其他配件

杜邦线就不用说了,还有DHT11和接有PCF8572AT的LCD1602啦。为什么LCD1602要接PCF8572AT?因为省线,只要4根线,电源两根、I2C通讯两根。而且还有配套的库,方便实惠。(下面是I2C通讯1602图)

3.接线

LCD1602 i2c模块                         Ardunio Uno

GND                           <------>        GND接地线

VCC                           <------>         3.3V 接电源

SDA                            <------>         A4

SCL                            <------>         A5

 

DHT11模块                                Arduino UNO

GND                           <------>        GND接地线

VCC                           <------>         3.3V 接电源

DATA                         <------>          PIN 2

接好后如下所示,so easy啦

 

二、开始编程

1.开发环境

开发环境我选择最有逼格的VS

纳尼!!!VS能开发Arduino???眼见为实:

很方便有木有?按下Tab自动补充,避免打错和忘记方法,简直神奇,Arduino IDE弱爆了。怎么搞?下一个Visual Micro,查一查CSDN别人写的博客就OK啦,反正我是搞了很久才破解好的。想要高逼格就要下功夫。

2.程序写入

// Visual Micro is in vMicro>General>Tutorial Mode
// 
/*
Name:       DHT11.ino
Created:	2020/1/3 16:52:45
Author:     DESKTOP-TGBP3JC\LENOVO
*/

// Define User Types below here or use a .h file
//


// Define Function Prototypes that use User Types below here or use a .h file
//


// Define Functions below here or use other .ino or cpp files
//

// The setup() function runs once each time the micro-controller starts
//定义头文件:总线通讯/1602显示屏的I2C通讯/DHT11的头文件
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define uint unsigned int
#define ulong unsigned long

#define DHT11PIN 2

float humi, temp;
//设置LCD1602设备地址,我这里是PCF8572AT,地址是0x3F,一般是0x20,或者0x27具体看模块手册
LiquidCrystal_I2C lcd(0x3F, 16, 2);
dht11 DHT11;

void setup()
{
	//1602初始化
	lcd.init();
	lcd.backlight();
	//重启时可以让1602黑一下,更有逼格
	delay(500);
}

// Add the main program code into the continuous loop() function
void loop()
{
	//读取DHT11
	int chk = DHT11.read(DHT11PIN);
	//LCD设置光标
	lcd.setCursor(0, 0);
	//打印湿度
	lcd.print("Humi(%):");
	lcd.print((float)DHT11.humidity, 2);
	//LCD设置光标
	lcd.setCursor(0, 1);
	//打印温度
	lcd.print("Temp(oC):");
	lcd.print((float)DHT11.temperature, 2);
	//延时一段时间
	delay(3000);
}

说明一下,PCF8572AT是有地址的。地址不对啥都显示不出来,寻找这些地址的程序和原理自己谷歌百度都行。

这些库要自己装啊,否则报错的说。DTH11的库大家应该都有,LCD1602 I2C的库,下载地址是 https://github.com/marcoschwartz/LiquidCrystal_I2C

把下载的库放到Arduino的库里,文件夹是D:\Arduino IDE\Arduino\libraries,打开可以看到里面有很多的内置库文件,可以自己写库玩玩。

在VS micro下可以自动加载未下载的库,十分方便。

实验效果:

室内15°C的温度71%的湿度,湿冷湿冷的,在大连的朋友说室内穿短袖,要不停的喝水否则口干舌燥的,羡慕ing

 

展望

想以后能把数据传到网上,树莓派啊,Micro Python啊都用上,做一个智能家居系统。可是我啥也不会啊。。。

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
DHT11是一种常用的数字式温湿度传感器,适用于测量环境中的温度和湿度。它具有低成本、简单易用的特点,适用于各种基于单片机的温湿度监测应用。 DHT11传感器通过一个单一的数据引脚与微控制器或其他主控设备进行通信。它使用数字信号传输温湿度数据,没有内置的ADC(模数转换器)或I2C等接口,因此只需要一个数字输入引脚即可。 以下是一个使用DHT11传感器Arduino开发板读取温湿度数据的简单示例: #include <DHT.h> #define DHTPIN 2 // 定义DHT11连接到Arduino的引脚(此处为引脚2) #define DHTTYPE DHT11 // 指定传感器类型为DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); // 延迟2秒 // 读取温湿度数据 float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); // 检查是否成功读取到数据 if (isnan(temperature) || isnan(humidity)) { Serial.println("读取数据失败"); return; } // 打印温湿度数据 Serial.print("温度:"); Serial.print(temperature); Serial.print(" °C"); Serial.print(" 湿度:"); Serial.print(humidity); Serial.println(" %"); } 在上述示例中,我们使用DHT库来与DHT11传感器进行通信,并读取温度和湿度数据。在setup()函数中,我们初始化串口通信和DHT传感器。在loop()函数中,我们通过dht.readTemperature()和dht.readHumidity()函数分别读取温度和湿度数据。然后,我们使用串口输出将温湿度数据打印出来。 请注意,在使用DHT11传感器之前,您需要安装并导入DHT库,可以通过Arduino IDE的库管理器来进行安装。 希望以上示例对您有帮助,可以让您开始使用DHT11传感器读取温湿度数据。如有进一步问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值