9| 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云平台使用文档: |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed