wemos D1 Mini (esp8266)实验九 --- blynk APP远程控制格力空调开机并显示温湿度DHT22

概述

这个实验室在实验八的基础上增加了温湿度数据的采集,需要在之前的Bylnk项目中新增加一个显示控件。
在这里插入图片描述

实验材料

  • Wemos D1 Mini开发板 *1 (10元)
  • KY-005红外发射模块 *1 (1元)
    或者 5mm 940nm红外发射管 (0.1元)
  • 170孔mini面包板*1(可选)(1元)
  • 可选:2N2222*1(或者2N3904)
  • Wemos D 1Mini DHT22扩展板(19元)/DHT22模块(14元)/DHT11(5.5元)模块 3选1
    合计:16-31元
    在这里插入图片描述

硬件

硬件连接图

连线图中使用的是DHT11模块,DHT22的连接方式相同。扩展板的使用最为简单,之间插上即可(注意插的时候板子的缺口要在同一个方向)。
在这里插入图片描述
在这里插入图片描述

引脚连接对照表

  • KY-005引脚连接图
KY-005Wemos D1 Mini
SD3
5V5V
GndGnd
  • DHT11引脚连接图
DHT11Wemos D1 Mini
13.3V
2D4
3悬空
4Gnd
  • DHT22引脚连接图
DHT22Wemos D1 Mini
+3.3V
OUTD4
-Gnd

Arduino端软件编写

测试Wemos D1 Mini温湿度采集程序

DHT库的安装

会安装的这步可以略过
DHT库下载地址

  1. 在页面中第一步点击Clone or download,第二步点击Download ZIP
    在这里插入图片描述

  2. 打开Arduino IDE,在项目->加载库->添加一个.ZIP库的对话框中选择你刚刚下载的.zip文件即可。
    在这里插入图片描述

  3. 注意:这个DHT库依赖另外一个Adafruit Unified Sensor Driver库,所以为了正确运行还要装一下这个库。否则会报错。提示找不到一个文件,名字我忘记了。我安装的时候就报错了,又加装了这个好了。
    Adafruit Unified Sensor Driver库下载

  4. github上有关于wemos D1 Mini非常丰富的示例程序
    github上的关于wemos D1 Mini全部例程下载地址
    打开上面的地址后,会显示下图的结构,examples->04.Shields->DHT_Shield->Simple目录下有完整测试代码。
    在这里插入图片描述

  5. 上传程序到开发板,打开arduino IDE自带的串口软件观察是否正确的采集到了数据。
    在这里插入图片描述

  6. 完整中文注释代码

/* DHT Shield - Simple
 *
 * Example testing sketch for various DHT humidity/temperature sensors
 * Written by ladyada, public domain
 *
 * Depends on Adafruit DHT Arduino library
 * 这个程序依赖Adafruit DHT Arduino library这个库文件
 * https://github.com/adafruit/DHT-sensor-library
 * 库文件的下载地址见上述连接
 */

#include "DHT.h"

#define DHTPIN D4     // what pin we're connected to 我们连        
                                     //接到传感器信号引脚的接口

// Uncomment whatever type you're using!
//将你选用的器件型号前面的注释去掉
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
//引脚连接说明,特别提出如果板子是3.3v逻辑的dht电源就接3.3v而不要接5v,比如我们的wemos D1 MIni

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);//初始化一个dht示例

void setup() {
  Serial.begin(9600);//开启串口
  Serial.println("DHTxx test!");

  dht.begin();//开启dht
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);//延时2S

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();//读湿度
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();//读温度
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
//串口输出
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}

将DHT采集代码整合到实验八中

  • 将获取温湿度的代码写成函数供Bylnk虚拟写程序调用

int getTemperat() {
float h = _dht.readHumidity();//读取湿度值放入h变量
float t = _dht.readTemperature();//读取温度值放入t变量
float f = _dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(“Failed to read from DHT sensor!”);
return 0 ;
}
// Compute heat index in Fahrenheit (the default)
float hif = _dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = _dht.computeHeatIndex(t, h, false);
return int(t);
}

  • 增加对虚拟引脚v5的操作函数
  • BLYNK_READ(V5) {//上传温湿度数据 Blynk.virtualWrite(V5,getTemperat());//虚拟引脚写事件
    }

  • 编译上传程序到开发板

Bylnk端软件编写

  • 添加一个湿度显示控件
    在这里插入图片描述
  • 设置它的参数,虚拟引脚V5
    其中LABEL部分要特别注意,你书写中/pin/位置就是你接收的温湿度数据显示位置。其他部分的文字你可以根据自己喜好设定。但是这个软件貌似对中文不是很友好。。我卡bug了。。。切换到英文输入法,起个英文显示比较安全。
    在这里插入图片描述

最终显示效果

在这里插入图片描述

完整源代码

#include <ESP8266WiFi.h>//ESP8266WiFi设置库
#include <IRremoteESP8266.h>//ESP8266红外控制库
#include <IRsend.h>//红外发送库
#include <ir_Gree.h>//添加格力空调的库
#include <BlynkSimpleEsp8266.h>
#include "DHT.h"//添加DHT的库

#define DHTPIN D4     // 扩展板连接的是D4引脚

//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)//板载的温湿度传感器是DHT22款
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

IRGreeAC _ac(D3); //创建一个格力空调的控制实例
DHT _dht(DHTPIN, DHTTYPE);//创建一个DHT的实例

BLYNK_WRITE(V1)//Blynk端的按钮按下
{
  int pinValue = param.asInt(); //将按钮控件上传的值放入pinValue变量中
  Serial.print("V1 Slider value is: ");
  Serial.println(pinValue);//测试时方便串口进行监测
  if(pinValue){//如果按钮按下发送空调ON红外码 开:1 关:0
    _ac.on();//生成空调“开”的红外码//-ac是格力空调实例
    _ac.send();//发送红外命令
  }
}
BLYNK_READ(V5) {//上传温湿度数据
  Serial.println("entered");
  Blynk.virtualWrite(V5,getTemperat());//虚拟引脚写事件
}
int getTemperat() {
  float h = _dht.readHumidity();//读取湿度值放入h变量
  float t = _dht.readTemperature();//读取温度值放入t变量
  float f = _dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return 0 ;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = _dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = _dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
  return int(t);
 
   
}
void setup() {
  Serial.begin(115200);
  _ac.begin();//开启空调红外
  _dht.begin();//开启DHT
  Serial.print("dht ok");
  Blynk.begin(u8"ce88b0934e6e425fbf9c99743f3cf2b8", u8"iPhone", u8"00000000");
  Blynk.begin(u8"token值", u8"wifi名字", u8"wifi对应的密码");

   
}
 
// the loop function runs over and over again forever
void loop() {
   Blynk.run(); 
  
}
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值