lamp.cc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "iot/thing.h"
  2. #include "board.h"
  3. #include "audio_codec.h"
  4. #include <driver/gpio.h>
  5. #include <esp_log.h>
  6. #define TAG "Lamp"
  7. namespace iot {
  8. // 这里仅定义 Lamp 的属性和方法,不包含具体的实现
  9. class Lamp : public Thing {
  10. private:
  11. gpio_num_t gpio_num_ = GPIO_NUM_18;
  12. bool power_ = false;
  13. void InitializeGpio() {
  14. gpio_config_t config = {
  15. .pin_bit_mask = (1ULL << gpio_num_),
  16. .mode = GPIO_MODE_OUTPUT,
  17. .pull_up_en = GPIO_PULLUP_DISABLE,
  18. .pull_down_en = GPIO_PULLDOWN_DISABLE,
  19. .intr_type = GPIO_INTR_DISABLE,
  20. };
  21. ESP_ERROR_CHECK(gpio_config(&config));
  22. gpio_set_level(gpio_num_, 0);
  23. }
  24. public:
  25. Lamp() : Thing("Lamp", "一个测试用的灯"), power_(false) {
  26. InitializeGpio();
  27. // 定义设备的属性
  28. properties_.AddBooleanProperty("power", "灯是否打开", [this]() -> bool {
  29. return power_;
  30. });
  31. // 定义设备可以被远程执行的指令
  32. methods_.AddMethod("TurnOn", "打开灯", ParameterList(), [this](const ParameterList& parameters) {
  33. power_ = true;
  34. gpio_set_level(gpio_num_, 1);
  35. });
  36. methods_.AddMethod("TurnOff", "关闭灯", ParameterList(), [this](const ParameterList& parameters) {
  37. power_ = false;
  38. gpio_set_level(gpio_num_, 0);
  39. });
  40. }
  41. };
  42. } // namespace iot
  43. DECLARE_THING(Lamp);