From 6318dd17930f04432f9451513ff5866e6b7e2a8d Mon Sep 17 00:00:00 2001 From: Terrence Date: Tue, 4 Mar 2025 07:56:07 +0800 Subject: [PATCH] =?UTF-8?q?IoT=E7=94=B5=E6=B1=A0=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/boards/kevin-box-2/kevin_box_board.cc | 14 +++++---- main/boards/tudouzi/kevin_box_board.cc | 1 + main/iot/things/battery.cc | 34 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 main/iot/things/battery.cc diff --git a/main/boards/kevin-box-2/kevin_box_board.cc b/main/boards/kevin-box-2/kevin_box_board.cc index b6c49df0..225b9e72 100644 --- a/main/boards/kevin-box-2/kevin_box_board.cc +++ b/main/boards/kevin-box-2/kevin_box_board.cc @@ -54,7 +54,13 @@ private: seconds = 0; return; } - if (!axp2101_->IsDischarging()) { + if (axp2101_->IsDischarging()) { + // 电量低于 10% 时,显示低电量警告 + if (!show_low_power_warning_ && axp2101_->GetBatteryLevel() <= 10) { + app.Alert(Lang::Strings::WARNING, Lang::Strings::BATTERY_LOW, "sad", Lang::Sounds::P3_VIBRATION); + show_low_power_warning_ = true; + } + } else { seconds = 0; if (show_low_power_warning_) { app.DismissAlert(); @@ -62,11 +68,6 @@ private: } return; } - // 电量低于 10% 时,显示低电量警告 - if (axp2101_->GetBatteryLevel() <= 10 && !show_low_power_warning_) { - app.Alert(Lang::Strings::WARNING, Lang::Strings::BATTERY_LOW, "sad", Lang::Sounds::P3_VIBRATION); - show_low_power_warning_ = true; - } seconds++; if (seconds >= seconds_to_shutdown) { @@ -163,6 +164,7 @@ private: void InitializeIot() { auto& thing_manager = iot::ThingManager::GetInstance(); thing_manager.AddThing(iot::CreateThing("Speaker")); + thing_manager.AddThing(iot::CreateThing("Battery")); } public: diff --git a/main/boards/tudouzi/kevin_box_board.cc b/main/boards/tudouzi/kevin_box_board.cc index 5c0cd568..ec75ed16 100644 --- a/main/boards/tudouzi/kevin_box_board.cc +++ b/main/boards/tudouzi/kevin_box_board.cc @@ -207,6 +207,7 @@ private: void InitializeIot() { auto& thing_manager = iot::ThingManager::GetInstance(); thing_manager.AddThing(iot::CreateThing("Speaker")); + thing_manager.AddThing(iot::CreateThing("Battery")); } public: diff --git a/main/iot/things/battery.cc b/main/iot/things/battery.cc new file mode 100644 index 00000000..b39c9300 --- /dev/null +++ b/main/iot/things/battery.cc @@ -0,0 +1,34 @@ +#include "iot/thing.h" +#include "board.h" + +#include + +#define TAG "Battery" + +namespace iot { + +// 这里仅定义 Battery 的属性和方法,不包含具体的实现 +class Battery : public Thing { +private: + int level_ = 0; + bool charging_ = false; + +public: + Battery() : Thing("Battery", "电池管理") { + // 定义设备的属性 + properties_.AddNumberProperty("level", "当前电量百分比(0-100)", [this]() -> int { + auto& board = Board::GetInstance(); + if (board.GetBatteryLevel(level_, charging_)) { + return level_; + } + return 0; + }); + properties_.AddBooleanProperty("charging", "是否充电中", [this]() -> int { + return charging_; + }); + } +}; + +} // namespace iot + +DECLARE_THING(Battery); \ No newline at end of file