From 64058e4093bb7714573f5d0bb352ceb2fcb5eae0 Mon Sep 17 00:00:00 2001 From: MakerM0 <117961102+MakerM0@users.noreply.github.com> Date: Thu, 23 Jan 2025 23:35:45 +0800 Subject: [PATCH] update magiclick 2.4 (#102) * update magiclick 2.4 * Update magiclick_2p4_board.cc --- README.md | 2 +- .../magiclick-2p4/magiclick_2p4_board.cc | 62 ++++++++++++++++--- 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 447ed72b..839a546a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ - 乐鑫 ESP32-S3-BOX3 - M5Stack CoreS3 - AtomS3R + Echo Base -- 神奇按钮 2.4 +- 神奇按钮 2.4 - 虾哥 Mini C3 - 微雪电子 ESP32-S3-Touch-AMOLED-1.8 - LILYGO T-Circle-S3 diff --git a/main/boards/magiclick-2p4/magiclick_2p4_board.cc b/main/boards/magiclick-2p4/magiclick_2p4_board.cc index 2edc34db..676f818f 100644 --- a/main/boards/magiclick-2p4/magiclick_2p4_board.cc +++ b/main/boards/magiclick-2p4/magiclick_2p4_board.cc @@ -12,16 +12,59 @@ #include #include #include "esp_lcd_nv3023.h" +#include "font_awesome_symbols.h" + #define TAG "magiclick_2p4" LV_FONT_DECLARE(font_puhui_16_4); LV_FONT_DECLARE(font_awesome_16_4); +class NV3023Display : public LcdDisplay { +public: + NV3023Display(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, + gpio_num_t backlight_pin, bool backlight_output_invert, + int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) + : LcdDisplay(panel_io, panel, backlight_pin, backlight_output_invert, + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, + &font_puhui_16_4, &font_awesome_16_4) {} + + void SetupUI() override { + DisplayLockGuard lock(this); + + // 调用父类的 SetupUI 来设置基本布局 + LcdDisplay::SetupUI(); + + // 只需要覆盖颜色相关的样式 + auto screen = lv_disp_get_scr_act(lv_disp_get_default()); + lv_obj_set_style_text_color(screen, lv_color_black(), 0); + + // 设置容器背景色 + lv_obj_set_style_bg_color(container_, lv_color_black(), 0); + + // 设置状态栏背景色和文本颜色 + lv_obj_set_style_bg_color(status_bar_, lv_color_white(), 0); + lv_obj_set_style_text_color(network_label_, lv_color_black(), 0); + lv_obj_set_style_text_color(notification_label_, lv_color_black(), 0); + lv_obj_set_style_text_color(status_label_, lv_color_black(), 0); + lv_obj_set_style_text_color(mute_label_, lv_color_black(), 0); + lv_obj_set_style_text_color(battery_label_, lv_color_black(), 0); + + // 设置内容区背景色和文本颜色 + lv_obj_set_style_bg_color(content_, lv_color_black(), 0); + lv_obj_set_style_border_width(content_, 0, 0); + lv_obj_set_style_text_color(emotion_label_, lv_color_white(), 0); + lv_obj_set_style_text_color(chat_message_label_, lv_color_white(), 0); + + // 设置布局 + lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_EVENLY); // 子对象顶部对齐,左右居中对齐,等距分布 + } +}; + class magiclick_2p4 : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; Button boot_button_; - LcdDisplay* display_; + NV3023Display* display_; void InitializeCodecI2c() { // Initialize I2C peripheral @@ -82,7 +125,7 @@ private: io_config.cs_gpio_num = DISPLAY_CS_PIN; io_config.dc_gpio_num = DISPLAY_DC_PIN; io_config.spi_mode = 0; - io_config.pclk_hz = 20 * 1000 * 1000; + io_config.pclk_hz = 40 * 1000 * 1000; io_config.trans_queue_depth = 10; io_config.lcd_cmd_bits = 8; io_config.lcd_param_bits = 8; @@ -92,21 +135,24 @@ private: ESP_LOGD(TAG, "Install LCD driver"); esp_lcd_panel_dev_config_t panel_config = {}; panel_config.reset_gpio_num = DISPLAY_RST_PIN; - panel_config.rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB; - panel_config.rgb_endian = LCD_RGB_ENDIAN_RGB; + panel_config.rgb_ele_order = LCD_RGB_ELEMENT_ORDER_BGR; panel_config.bits_per_pixel = 16; ESP_ERROR_CHECK(esp_lcd_new_panel_nv3023(panel_io, &panel_config, &panel)); esp_lcd_panel_reset(panel); esp_lcd_panel_init(panel); - esp_lcd_panel_invert_color(panel, true); + esp_lcd_panel_invert_color(panel, false); esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel, true)); - display_ = new LcdDisplay(panel_io, panel, DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - &font_puhui_16_4, &font_awesome_16_4); + display_ = new NV3023Display(panel_io, panel, DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT, + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); + if (display_) { + display_->SetupUI(); + } else { + ESP_LOGE(TAG, "Display is not initialized!"); + } } // 物联网初始化,添加对 AI 可见设备