lamp.cc 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. #ifdef CONFIG_IDF_TARGET_ESP32
  12. gpio_num_t gpio_num_ = GPIO_NUM_12;
  13. #else
  14. gpio_num_t gpio_num_ = GPIO_NUM_18;
  15. #endif
  16. bool power_ = false;
  17. void InitializeGpio() {
  18. gpio_config_t config = {
  19. .pin_bit_mask = (1ULL << gpio_num_),
  20. .mode = GPIO_MODE_OUTPUT,
  21. .pull_up_en = GPIO_PULLUP_DISABLE,
  22. .pull_down_en = GPIO_PULLDOWN_DISABLE,
  23. .intr_type = GPIO_INTR_DISABLE,
  24. };
  25. ESP_ERROR_CHECK(gpio_config(&config));
  26. gpio_set_level(gpio_num_, 0);
  27. }
  28. public:
  29. Lamp() : Thing("Lamp", "一个测试用的灯"), power_(false) {
  30. InitializeGpio();
  31. // 定义设备的属性
  32. properties_.AddBooleanProperty("power", "灯是否打开", [this]() -> bool {
  33. return power_;
  34. });
  35. // 定义设备可以被远程执行的指令
  36. methods_.AddMethod("TurnOn", "打开灯", ParameterList(), [this](const ParameterList& parameters) {
  37. power_ = true;
  38. gpio_set_level(gpio_num_, 1);
  39. });
  40. methods_.AddMethod("TurnOff", "关闭灯", ParameterList(), [this](const ParameterList& parameters) {
  41. power_ = false;
  42. gpio_set_level(gpio_num_, 0);
  43. });
  44. }
  45. };
  46. } // namespace iot
  47. DECLARE_THING(Lamp);