回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

FireBeetle 2 ESP32-C6自动风扇启停装置 中等

头像 tiger_zc 2024.04.19 104 0

       马上炎热的夏天就要来了,本项目利用DFrobot公司的FireBeetle 2 ESP32-C6做主控,配合SHT31高精度温湿度传感器和继电器模块,来实现根据环境温度变化,自动控制风扇动作。

步骤1 主要硬件列表

材料清单

  • FireBeetle 2 ESP32-C6主控 X1 链接
  • SHT31数字温湿度传感器 X1 链接
  • 风扇模块 X1 链接
  • 1602显示模块 X1 链接
  • 数字继电器模块 X1 链接

步骤2 硬件连接示意图

系统连接示意图.jpg

步骤3 调试注意事项

     本系统中,利用高精度温湿度传感器SHT31,获取环境温湿度值,并且在1602液晶屏上显示。当环境温度高于一个给定的阈值时,继电器吸合,负载(风扇)工作。当环境温度低于给定阈值时,继电器断开,负载停止工作。

      这里需要注意几点:

       1、继电器模块和1602模块都需要工作在5V电压下,需要外部供电或升压电路才能正常工作;

       2、继电器所带负载也需要外部供电,ESP32主控板不能提供大电流输出。

       3、1602显示模块和SHT31模块采用I2C总线传输数据,需要注意模块的地址。如不知道地址,可以通过程序查询,具体参考如下【合宙ESP32C3】查询IIC设备地址——Arduino_i2c接口地址查询方法-CSDN博客

 

系统正面

3ddab5a9cb7e78f018048859b7216342.jpg

 

 

系统背面

微信图片_20240419212618.jpg

步骤4 程序编写

         程序编写,我采用Arduino IDE。环境搭建参考DFROBOT DFR1075 FireBeetle 2 Board ESP32-C6 产品资料 使用教程

          使用1602模块和SHT31模块,程序需要导入相应的库,具体参考如下:如何加载库文件? DF创客社区 (dfrobot.com.cn)

 

SHT31库文件下载地址:DFRobot/DFRobot_SHT3x (gitee.com)

1602模块库文件,只需在库管理里面查找安装即可。

image.png

代码
#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 演示视频

评论

user-avatar