马上炎热的夏天就要来了,本项目利用DFrobot公司的FireBeetle 2 ESP32-C6做主控,配合SHT31高精度温湿度传感器和继电器模块,来实现根据环境温度变化,自动控制风扇动作。
步骤1 主要硬件列表
步骤2 硬件连接示意图
步骤3 调试注意事项
本系统中,利用高精度温湿度传感器SHT31,获取环境温湿度值,并且在1602液晶屏上显示。当环境温度高于一个给定的阈值时,继电器吸合,负载(风扇)工作。当环境温度低于给定阈值时,继电器断开,负载停止工作。
这里需要注意几点:
1、继电器模块和1602模块都需要工作在5V电压下,需要外部供电或升压电路才能正常工作;
2、继电器所带负载也需要外部供电,ESP32主控板不能提供大电流输出。
3、1602显示模块和SHT31模块采用I2C总线传输数据,需要注意模块的地址。如不知道地址,可以通过程序查询,具体参考如下【合宙ESP32C3】查询IIC设备地址——Arduino_i2c接口地址查询方法-CSDN博客
系统正面

系统背面

步骤4 程序编写
程序编写,我采用Arduino IDE。环境搭建参考DFROBOT DFR1075 FireBeetle 2 Board ESP32-C6 产品资料 使用教程
使用1602模块和SHT31模块,程序需要导入相应的库,具体参考如下:如何加载库文件? DF创客社区 (dfrobot.com.cn)
SHT31库文件下载地址:DFRobot/DFRobot_SHT3x (gitee.com)
1602模块库文件,只需在库管理里面查找安装即可。

#include <DFRobot_SHT3x.h>
#include <LiquidCrystal_I2C.h>
//当ADR接VDD时可选择0x45当ADR接GND时可选择0x44
//默认为0x45,RST(复位脚)不用连接
DFRobot_SHT3x sht3x(&Wire,/*address=*/0x45,/*RST=*/4);
// 定义行列数,默认不用更改,因为大家的LCD1602规格都是一致的
int lcdColumns = 16;
int lcdRows = 2;
// 初始化LCD1602
// 参数一为IIC地址
// 参数二为列数
// 参数三为行数
LiquidCrystal_I2C lcd(0x3F, lcdColumns, lcdRows);
int RelayPin=8;
int testLED=15;
//定义继电器信号为8
//定义继电器吸合指示LED灯为15
float soilTempThreshold=27; //定义温度阈值为27摄氏度
void setup(){
// 初始化LCD
lcd.init();
// 打开LCD背光显示
lcd.backlight();
//初始化端口8
pinMode(RelayPin,OUTPUT);
digitalWrite(RelayPin,LOW);
//初始化端口15
pinMode(testLED,OUTPUT);
digitalWrite(testLED,LOW);
}
void loop(){
//把温度、湿度读出
float temp = sht3x.getTemperatureC();
float humi = sht3x.getHumidityRH();
//client.print("temp (C): "); client.println(temp);
//client.print("humi (%RH): "); client.println(humi);
// 将光标移动到显示器0列0行位置
lcd.setCursor(0, 0);
// 打印字符
lcd.print("temp(c):");
lcd.setCursor(0, 1);
// 打印字符
lcd.print("humi(%RH):");
lcd.setCursor(10, 0);
// 打印字符
lcd.print(temp);
lcd.setCursor(10, 1);
// 打印字符
lcd.print(humi);
//如果温度高于阈值,端口8输出高电平,继电器吸合,指示灯亮,风扇转动。反之,输出低电平,继电器断开,指示灯灭,风扇停止。
if(temp>soilTempThreshold){
digitalWrite(RelayPin,HIGH);
digitalWrite(testLED,HIGH);
}
else{
digitalWrite(RelayPin,LOW);
digitalWrite(testLED,LOW);
}
// 设置delay使其形成无效死循环,用于保持文本的显示
delay(1000);
}
步骤5 演示视频
评论