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
}
#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)
请先
!