基于Arduino的手机显示蓝牙温湿度计(HC05蓝牙、温湿度模块、1602显示屏)

1、概述

对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。

2、所需材料

1、UNO主控板:官方板 或者 国产板
2、辅助配件:面包板杜邦线
3、传感器和模块:HC05蓝牙模块温湿度模块1602显示屏IIC版

3、接线

Arduino DHT11
5V VCC
GND GND
D2 DATA
HC-05蓝牙模块 Arduino
VCC 5V
GND GND
TXD D0(RX)
RXD D1(TX)
Arduino IIC1602显示屏
5V VCC
GND GND
A4 SDA
A5 SCL

4、示例程序

#include <LiquidCrystal_I2C>
#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
}

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

Arduino串口监视器显示效果:

5、蓝牙设置

参照下面五项AT指令进行设置:
AT+ORGL
AT+NAME=ZBST999
AT+ROLE=0
AT+CMODE=1
AT+PSWD=1234

6、相关下载

1、库文件
2、蓝牙SPP软件(安卓APK)

0
分享到:

评论0

请先

原Arduino365.com域名更改为品牌域名ultirobot.com,承载内容要将更丰富,网站也进行了改版,改善阅读体验。
没有账号? 忘记密码?