| 
 330| 0
 | [ESP8266/ESP32] 基于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 ②环境配置: 注意事项:测试的板卡的esp环境必须为 3.3.0-alpha1-cn,其他版本导致烧录不成功,之前使用其他版本出现开发板不断重启的问题。 安装完成如下图所示: 在工具页面将参数修改如下:  在开发板选择界面选择对应的开发板与端口即可。  云平台库:Arduino ThingsCloud ESP32/ESP8266 SDK  DHT11依赖库:DHT_sensor_library  oled依赖库:SSD1306Wire  二、硬件介绍:1、FireBeetle 2 ESP32-C5 IO套装包  ①:核心板及引脚分配图:  ②:拓展版  四线iicoled屏幕即可  温湿度传感器  ThingsCloud云平台  前期准备:1、注册云平台账号2、创建项目  创建完成后  点击右上角创建设备,创建成功后点击设备进入。  在设备的连接界面中油连接所需要的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[512]; serializeJson(obj, attributes); // 调用属性上报方法 client.reportAttributes(attributes); display.clear(); // 清屏 // 显示温湿度信息到OLED屏幕  displayText("Temperature and humidity collection", 0, 0); // 显示湿度信息在第二行 char buffer[32]; 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、串口调试结果    而且平台还支持看板定制功能,可以将你需要的数据添加看板,展示效果如下:   对于上述的手机界面与网页端后台看板可以自行设计格式。5、0.97OLED屏幕显示         oled显示格式可以在代码中进行调整,此处只是进行基本显示。之后可以通过LVGL进行优化也可以改用U8G2库。  六、后期改进方向改进方向一: 在平台中还可以添加其他传感器数据如水位、光照、二氧化碳含量等。  可以添加更多模块的同时,做一个硬件的报警与交互,例如增加温度过高开启降温风扇,湿度过低开启加湿,并在温湿度、二氧化碳等超限进行声光报警,添加物理按键进行报警功能的开关。改进方向三: 在云台有提供告警功能:  可以添加电话、邮件、短信等告警功能,但此功能是付费项目(懂得都懂)。 最后的话: 在这次项目制作中我感触最深的是开发板的发热量:因为手边没有测温计所以按照手指温度来说,它的温度是低于手指温度,且设备从9.20的18:00运行到目前(9.26的17:30),整整六天。相比较我之前使用的ESP32-S3和STM32(外接esp8266)的温度真的很低。温度低同时也代表在扇热强和功耗低,适合作为家庭识别长期使用。仅菜鸟一家之言,不喜勿喷。 项目参考文献: DF官方开发板文档: ThingsCloud云平台使用文档: | 
 沪公网安备31011502402448
 沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed