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

本实验通过Wemos D1 Mini实现Blynk APP远程控制格力空调,并展示环境温湿度。采用DHT22传感器采集温湿度数据,通过Arduino程序处理后发送至Blynk APP显示。

概述

这个实验室在实验八的基础上增加了温湿度数据的采集,需要在之前的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(); 
  
}
<think>好的,我现在需要帮用户找一个基于ESP8266的创新项目方案,避免常见的温湿度监测和远程控制继电器。用户之前已经做过类似的项目,现在想要更独特的想法。首先,我得回顾用户之前的对话,确保不重复。 用户提到要使用非传统传感器或实现独特功能,通过Wi-Fi上传数据到云端或手机APP且不要远程控制继电器。所以,我需要排除DHT系列传感器和继电器相关的部分。接下来,我需要考虑ESP8266的能力以及可能的传感器类型。 首先,ESP8266的NodeMCU板子支持多种通信协议,比如I2C、SPI、GPIO,还有Wi-Fi和MQTT。常见的传感器比如温湿度、光线、运动传感器可能已经被用户排除,所以得找些不常见的传感器。比如空气质量、声音、颜色、手势等传感器。 然后,考虑创新点。可能的方向包括环境监测的扩展,比如PM2.5、CO2浓度;或者交互类的项目,比如手势控制、声音识别;或者是数据可视化,比如将传感器数据通过云平台展示,或者结合机器学习做数据分析。 用户是大学生,结课项目可能需要一定的复杂度,但也不能太难。同时,用户之前提到过使用AI辅助编码,所以可能需要推荐一些AI工具来帮助生成代码,比如用ChatGPT或者GitHub Copilot来写传感器驱动的部分。 还要参考之前提到的引用内容,比如引用[1]中关于ESP-12F模块的特性,可能需要确保硬件兼容性;引用[2]提到的注意事项,如传感器校准、网络稳定性、数据安全、功耗管理和兼容性问题,这些都需要在项目中考虑进去。 现在,我需要具体想几个项目方案。比如: 1. 基于声音识别的环境噪声监测系统:使用麦克风传感器采集噪声数据,通过ESP8266上传到云端,进行实时噪声水平分析和历史数据可视化。 2. 智能空气质量监测站:使用PM2.5、CO2和VOC传感器,监测室内空气质量,通过Wi-Fi发送数据到手机APP,提供健康建议。 3. 手势控制的智能灯效系统:利用手势识别传感器,通过特定手势调整LED灯的亮度和颜色,数据可上传至云端记录用户偏好。 4. 颜色识别与物品分类装置:使用颜色传感器扫描物品颜色,结合机器学习分类,将结果上传至APP,用于智能分类或艺术项目。 接下来评估这些方案的可行性。比如,噪声监测需要合适的麦克风传感器和FFT处理,可能涉及音频数据处理,对初学者来说有一定难度。空气质量监测需要多个传感器,可能硬件连接复杂,但代码部分可能较容易。手势控制需要手势传感器,可能成本较高,但交互性强。颜色识别则需要颜色传感器和机器学习模型,可能需要AI辅助训练。 考虑到用户是初学者,可能需要平衡复杂度和创新性。比如,颜色识别项目可能更直观,硬件连接相对简单,机器学习部分可以用Edge Impulse平台简化。或者手势控制可以使用现成的传感器模块,减少底层代码编写。 另外,数据上传部分可以使用ThingSpeak、Blynk或Firebase等平台,这些都有Arduino库支持,方便集成。同时,引用[3]提到的Wi-Fi安全性需要注意,比如使用HTTPS或MQTT over TLS来加密数据传输。 最后,需要确保项目有足够的文档和扩展性,方便用户进行展示和进一步开发。例如,在颜色识别项目中,可以加入数据分析和用户反馈功能,比如通过APP显示颜色名称或建议搭配颜色。</think>### 基于ESP8266的创新项目方案:**智能颜色识别与艺术创作助手** --- #### 一、项目核心设计 **创新点**: 1. **非传统传感器**:采用TCS34725颜色传感器(支持RGB+透明光检测)替代温湿度传感器。 2. **独特功能**:实时识别物体颜色,生成HEX/RGB编码,通过Wi-Fi上传至云端生成色卡,联动AI生成配色方案或简笔画。 3. **艺术与科技结合**:数据可应用于绘画辅助、服装搭配、工业分拣等场景。 --- #### 二、硬件配置与连接 **材料清单**: - NodeMCU(ESP-12F模块)[^1] - TCS34725颜色传感器(I2C接口) - OLED屏幕(SSD1306,显示颜色信息) - 高亮度LED补光灯(改善暗光环境识别精度) - 3D打印外壳(可选,增强实用性) **接线图**: ``` TCS34725 → NodeMCU SDA → D2(GPIO4) SCL → D1(GPIO5) VCC → 3.3V GND → GND OLED屏幕 → NodeMCU SDA → D2(GPIO4) SCL → D1(GPIO5) VCC → 3.3V GND → GND LED补光灯 → NodeMCU + → GPIO12(PWM控制亮度) - → GND ``` --- #### 三、软件实现与AI辅助 **关键技术**: 1. **颜色校准算法**: - 使用白平衡校准消除环境光干扰(参考引用[2]的传感器校准建议)。 - 通过Arduino库`Adafruit_TCS34725`读取原始RGB值,转换为标准色域。 2. **云端交互**: - 将HEX颜色码通过HTTP POST发送至Firebase或阿里云物联网平台。 - 调用AI API(如OpenAI的DALL·E或DeepArt)生成配色方案。 3. **本地功能**: - OLED显示颜色名称、色温、亮度等级。 - LED补光灯自动调节亮度(根据环境光强度)。 **AI辅助编码示例**(ChatGPT生成代码片段): ```cpp // 向ChatGPT输入:“生成NodeMCU连接TCS34725传感器上传颜色数据到Firebase的代码” #include <Wire.h> #include <Adafruit_TCS34725.h> #include <ESP8266HTTPClient.h> Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); void setup() { Serial.begin(115200); tcs.begin(); // 初始化传感器 WiFi.begin("SSID", "PASSWORD"); } void loop() { uint16_t r, g, b, c; tcs.getRawData(&r, &g, &b, &c); // 获取原始数据 String hexColor = rgbToHex(r, g, b); // 自定义转换函数 if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin("https://your-firebase-url.json"); http.addHeader("Content-Type", "application/json"); http.POST("{\"color\":\"" + hexColor + "\"}"); // 加密传输(参考引用[3]) http.end(); } } ``` --- #### 四、技术难点与解决方案 | 难点 | 解决方案 | |-----------------------|--------------------------------------------------------------------------| | 环境光干扰 | 增加遮光罩+软件白平衡校准(动态调整RGB增益) | | 颜色识别精度 | 使用PCA算法降维处理原始数据,提高分类准确性 | | 云端AI响应延迟 | 本地缓存历史颜色数据,异步上传(参考引用[2]的网络稳定性优化) | | 功耗优化 | 启用NodeMCU深度睡眠模式,仅在检测到颜色变化时唤醒[^2] | --- #### 五、项目扩展性 1. **工业应用**:与机械臂结合实现自动分拣(如按颜色分类塑料颗粒)。 2. **教育工具**:通过APP生成色彩理论教学图表(如互补色、相似色)。 3. **艺术创作**:接入Stable Diffusion API,根据颜色生成艺术图案。 --- ### 相关问题 1. 如何通过Edge Impulse为颜色识别项目添加机器学习分类功能? 2. TCS34725传感器在低光照条件下的性能优化方法有哪些? 3. 如何设计3D打印外壳以提升颜色识别精度?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值