forked from xiaozhi/xiaozhi-esp32
45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
#ifndef __LAMP_CONTROLLER_H__
|
|
#define __LAMP_CONTROLLER_H__
|
|
|
|
#include "mcp_server.h"
|
|
|
|
|
|
class LampController {
|
|
private:
|
|
bool power_ = false;
|
|
gpio_num_t gpio_num_;
|
|
|
|
public:
|
|
LampController(gpio_num_t gpio_num) : gpio_num_(gpio_num) {
|
|
gpio_config_t config = {
|
|
.pin_bit_mask = (1ULL << gpio_num_),
|
|
.mode = GPIO_MODE_OUTPUT,
|
|
.pull_up_en = GPIO_PULLUP_DISABLE,
|
|
.pull_down_en = GPIO_PULLDOWN_DISABLE,
|
|
.intr_type = GPIO_INTR_DISABLE,
|
|
};
|
|
ESP_ERROR_CHECK(gpio_config(&config));
|
|
gpio_set_level(gpio_num_, 0);
|
|
|
|
auto& mcp_server = McpServer::GetInstance();
|
|
mcp_server.AddTool("self.lamp.get_state", "Get the power state of the lamp", PropertyList(), [this](const PropertyList& properties) -> ReturnValue {
|
|
return power_ ? "{\"power\": true}" : "{\"power\": false}";
|
|
});
|
|
|
|
mcp_server.AddTool("self.lamp.turn_on", "Turn on the lamp", PropertyList(), [this](const PropertyList& properties) -> ReturnValue {
|
|
power_ = true;
|
|
gpio_set_level(gpio_num_, 1);
|
|
return true;
|
|
});
|
|
|
|
mcp_server.AddTool("self.lamp.turn_off", "Turn off the lamp", PropertyList(), [this](const PropertyList& properties) -> ReturnValue {
|
|
power_ = false;
|
|
gpio_set_level(gpio_num_, 0);
|
|
return true;
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
#endif // __LAMP_CONTROLLER_H__
|