欢迎光临
我们一直在努力

Arduino蓝牙温湿度计(DHT11)

20180112140507_11

==概述==

最近办公室里的某宝买的温湿度计不大好用,想着就自己DIY一个,放在桌上用。并且加了一个蓝牙模块,方便手机连接后,同样能看到实际的温湿度值。

本次是以小实验的方式写的,对于模块不了解的,可以先看一下我们的模块教程,了解掌握模块使用方法后,再尝试本小实验。

(对于非本店模块不提供技术支持!如果无法做通,可能是不兼容导致,请自行尝试)。

所需材料:

UNO R3主控版一个:点我购买

面包板一块:点我购买

杜邦线若干(公对母):点我购买

面包线若干:点我购买

蓝牙模块一个(HC-05\HC-06):点我购买  <本次使用HC-05蓝牙模块>

DHT11温湿度模块一个:点我购买

安卓手机一个(安装蓝牙SPP软件)

I2C1602显示屏一块:点我购买

I2C1602模块示例:http://arduino365.com/2016/09/01/i2c-1602%E8%BD%AC%E6%8E%A5%E6%9D%BF/

HC-05蓝牙模块示例:http://arduino365.com/2016/09/01/%E8%93%9D%E7%89%99%E6%A8%A1%E5%9D%97hc05/

DHT11模块示例:http://arduino365.com/2016/08/31/%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8dht11/

==接线图==

lanyawenshiduji_11

==接线方式==

DHT11                Arduino

DATA                     D2

VCC                       5V

GND                      GND

———————————————-

HC-05蓝牙模块                   Arduino

VCC                                       5V

GND                                      GND

TXD                                        D0(RX)

RXD                                        D1(TX)

———————————————

I2C 1602显示屏                        Arduino

VCC                                            VCC

GND                                           GND

SDA                                             A4

SCL                                              A5

==例子程序==

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3B,16,2);//定义I2C地址:0x3B,按照自己的设备自行修改I2C地址。
int humi;//定义湿度
int tol;//定义校对码
int temp;//定义温度
int j;//定义变量
unsigned int loopCnt;
int chr[40] = {0};//创建数字数组,用来存放40个bit
unsigned long time;
#define pin 2//定义DHT11引脚号
void setup()
{
Serial.begin(38400);//设置串口波特率38400
}
void loop()
{
bgn:
delay(2000);
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(20);
digitalWrite(pin,HIGH);
delayMicroseconds(40);
digitalWrite(pin,LOW);
//设置2号接口模式:输入
pinMode(pin,INPUT);
//高电平响应信号
loopCnt=10000;
while(digitalRead(pin) != HIGH)
{
if(loopCnt-- == 0)
{
//如果长时间不返回高电平,输出个提示,重头开始。
Serial.println("HIGH");
goto bgn;
}
}
//低电平响应信号
loopCnt=30000;
while(digitalRead(pin) != LOW)
{
if(loopCnt-- == 0)
{
//如果长时间不返回低电平,输出个提示,重头开始。
Serial.println("LOW");
goto bgn;
}
}
//开始读取bit1-40的数值
for(int i=0;i<40;i++)
{
while(digitalRead(pin) == LOW)
{}
time = micros();
while(digitalRead(pin) == HIGH)
{}
//当出现低电平,记下时间,再减去刚才储存的time
//得出的值若大于50μs,则为‘1’,否则为‘0’
//并储存到数组里去
if (micros() - time >50)
{
chr[i]=1;
}else{
chr[i]=0;
}
}

//湿度,8位的bit,转换为数值
humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];

//温度,8位的bit,转换为数值
temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
//校对码,8位的bit,转换为数值
tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
//输出:温度、湿度、校对码

Serial.print("temperature:");
Serial.println(temp);
Serial.print("humidity:");
Serial.print(humi);
Serial.println("%RH");
Serial.print("tol:");
Serial.println(tol);//校对码输出至串口
lcd.init();
lcd.backlight();
lcd.print("temperature:");
lcd.print(temp);
lcd.print((char)223);
lcd.println("C"); //显示摄氏度符号
lcd.setCursor(0,1);//在LCD上换行
lcd.print("humidity:");
lcd.print(humi);
lcd.println("  %RH");//空两行防止出现乱码,同时将湿度单位输出到LCD
}

==附加内容==

对模块不了解的,可以先尝试模块的示例教程。

1、HC-05蓝牙模块教程http://arduino365.com/2016/09/01/%E8%93%9D%E7%89%99%E6%A8%A1%E5%9D%97hc05/

参照下面五项AT指令进行设置:

AT+ORGL

AT+NAME=ZBST999

AT+ROLE=0

AT+CMODE=1

AT+PSWD=1234

2、DHT11使用教程:http://arduino365.com/2016/08/31/%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8dht11/

3、I2C1602显示屏使用教程:http://arduino365.com/2016/09/01/lcd1602%E6%98%BE%E7%A4%BA%E5%B1%8F/

==实验效果==

手机端和显示屏显示效果:

Arduino串口监视器显示效果:

20180112141453_11

注意:如果显示温度偏大或者偏小,请检查接线和模块是否损坏。

==相关下载==

库文件:https://pan.baidu.com/s/1pMtZlsJ

蓝牙SPP软件(安卓APK)http://pan.baidu.com/s/1i4M21jZ


未经允许不得转载:Arduino-Maker » Arduino蓝牙温湿度计(DHT11)

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育