基于FireBeetle 2 ESP32-C5的家庭环境检测系统
本帖最后由 azhu 于 2025-9-26 18:00 编辑基于FireBeetle 2 ESP32-C5的家庭环境检测系统
前言:此次有幸参加DFRobot 推出了全新开发板 FireBeetle 2 ESP32-C5测评,在测试前期的申请本来是计划做一个桌面语音助手,但由于api接口到期,就制作了环境检测的系统。一、设计思路硬件准备:1、FireBeetle 2 ESP32-C5作为主控制器,2、传感器模块使用DHT11,3、0.96oled屏幕。软件准备:arduino ide,库环境搭建:1、开发板对应库环境:①安装arduino0-ide②环境配置:参考教程:https://wiki.dfrobot.com.cn/Add_ESP32_board_to_Arduino_IDE注意事项:测试的板卡的esp环境必须为 3.3.0-alpha1-cn,其他版本导致烧录不成功,之前使用其他版本出现开发板不断重启的问题。安装完成如下图所示:在工具页面将参数修改如下:在开发板选择界面选择对应的开发板与端口即可。2、其他模块库云平台库:Arduino ThingsCloud ESP32/ESP8266 SDKDHT11依赖库:DHT_sensor_libraryoled依赖库:SSD1306Wire
二、硬件介绍:1、FireBeetle 2 ESP32-C5 IO套装包①:核心板及引脚分配图:②:拓展版2、0.96OLED屏幕四线iicoled屏幕即可3、DHT11:温湿度传感器三、软件云平台介绍:ThingsCloud云平台前期准备:1、注册云平台账号2、创建项目创建完成后3、创建设备:点击右上角创建设备,创建成功后点击设备进入。在设备的连接界面中油连接所需要的AccessToken和ProjectKey。至此前期云平台准备完毕。
四、项目软件代码部分在之前的硬件介绍中已经安装好相应的aruino库。1、调用库#include <ThingsCloudWiFiManager.h>
#include <ThingsCloudMQTT.h>
#include "DHT.h"
#include <Wire.h>
#include "SSD1306Wire.h" //导入0.96寸屏幕显示库2、初始化及声明/ 使用Wire库初始化OLED显示器
SSD1306Wire display(0x3c, 9, 10); // 三个参数分别是 器件地址, SDA引脚, SCL引脚
//======================================================
// 设置 ssid / password,连接到你的 WiFi AP
const char *ssid = "xxxxxxxxxxxxx";
const char *password = "xxxxxxxxxxxxxxxxxxx";
// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST "sh-1-mqtt.iot-api.com"
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN "xxxxxxxxxxxxxxx"
#define THINGSCLOUD_PROJECT_KEY "xxxxxxxxxxxxxxxxxx"
//======================================================
ThingsCloudMQTT client(
THINGSCLOUD_MQTT_HOST,
THINGSCLOUD_DEVICE_ACCESS_TOKEN,
THINGSCLOUD_PROJECT_KEY);
// 上报数据的间隔时间计时器
unsigned long timer1 = millis();
// 设置定时上报数据的时间间隔,单位是 ms。免费版项目请务必大于30秒,否则设备可能会被限连。
const int report_interval = 1000 * 60 * 5;
// 设置DHT11的数据引脚
#define DHTPIN 2
// 设置使用的DHT类型,这里我们使用了DHT11
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);3、显示函数声明void displayText(const char* text, uint8_t x, uint8_t y) {
// 直接在指定位置绘制文本,不清屏
display.drawString(x, y, text);
display.display(); // 显示内容
}4、setup代码void setup()
{
//初始化屏幕
display.init();
//设置对比度
display.setContrast(255);
display.flipScreenVertically(); // 垂直翻转屏幕
Serial.begin(115200);
// 允许 SDK 的日志输出
client.enableDebuggingMessages();
// 连接 WiFi AP
client.setWifiCredentials(ssid, password);
dht.begin();
}
// 读取并发布传感器数据到 ThingsCloud
void pubSensors()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
// 检查是否读取到传感器数据
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// 串口打印数据日志
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("%Temperature: "));
Serial.print(t);
Serial.println();
// 生成属性 JSON
DynamicJsonDocument obj(512);
obj["temperature"] = t;
obj["humidity"] = h;
char attributes;
serializeJson(obj, attributes);
// 调用属性上报方法
client.reportAttributes(attributes);
display.clear(); // 清屏
// 显示温湿度信息到OLED屏幕
displayText("Temperature and humidity collection", 0, 0); // 显示湿度信息在第二行
char buffer;
snprintf(buffer, sizeof(buffer), "Temp: %.1fC", t);
displayText(buffer, 0, 20); // 显示温度信息在第一行
snprintf(buffer, sizeof(buffer), "Hum: %.1f%%%", h);
displayText(buffer, 0, 40); // 显示湿度信息在第二行
}
// 必须实现这个回调函数,当 MQTT 连接成功后执行该函数。
void onMQTTConnect()
{
// 延迟 5 秒上报首次传感器数据
client.executeDelayed(1000 * 5, []() {
pubSensors();
});
}5、循环函数
void loop()
{
client.loop();
// 按间隔时间上报传感器数据
if (millis() - timer1 > report_interval)
{
timer1 = millis();
pubSensors();
}
}五、运行效果:1、串口调试结果2、云平台后台界面温度历史数据湿度历史数据3、云平台看板而且平台还支持看板定制功能,可以将你需要的数据添加看板,展示效果如下:4、手机界面注:对于上述的手机界面与网页端后台看板可以自行设计格式。5、0.97OLED屏幕显示 oled显示格式可以在代码中进行调整,此处只是进行基本显示。之后可以通过LVGL进行优化也可以改用U8G2库。
六、后期改进方向改进方向一:在平台中还可以添加其他传感器数据如水位、光照、二氧化碳含量等。改进方向二:可以添加更多模块的同时,做一个硬件的报警与交互,例如增加温度过高开启降温风扇,湿度过低开启加湿,并在温湿度、二氧化碳等超限进行声光报警,添加物理按键进行报警功能的开关。改进方向三:在云台有提供告警功能:可以添加电话、邮件、短信等告警功能,但此功能是付费项目(懂得都懂)。
最后的话:在这次项目制作中我感触最深的是开发板的发热量:因为手边没有测温计所以按照手指温度来说,它的温度是低于手指温度,且设备从9.20的18:00运行到目前(9.26的17:30),整整六天。相比较我之前使用的ESP32-S3和STM32(外接esp8266)的温度真的很低。温度低同时也代表在扇热强和功耗低,适合作为家庭识别长期使用。仅菜鸟一家之言,不喜勿喷。
项目参考文献:DF官方开发板文档:wiki.dfrobot.com.cn/SKU_DFR1236_Firebeetle_2_ESP32_C5_Development_Board_IO_Expansion_KitThingsCloud云平台使用文档:Connect Device | ThingsCloud 使用文档
页:
[1]