forked from 78/xiaozhi-esp32
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b3dd246
commit e7ec0ed
Showing
4 changed files
with
192 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
|
||
#ifndef _BOARD_CONFIG_H_ | ||
#define _BOARD_CONFIG_H_ | ||
|
||
#include <driver/gpio.h> | ||
|
||
#define AUDIO_INPUT_SAMPLE_RATE 24000 | ||
#define AUDIO_OUTPUT_SAMPLE_RATE 24000 | ||
#define AUDIO_DEFAULT_OUTPUT_VOLUME 90 | ||
|
||
#define AUDIO_INPUT_REFERENCE true | ||
|
||
#define AUDIO_I2S_GPIO_MCLK GPIO_NUM_16 | ||
#define AUDIO_I2S_GPIO_WS GPIO_NUM_45 | ||
#define AUDIO_I2S_GPIO_BCLK GPIO_NUM_9 | ||
#define AUDIO_I2S_GPIO_DIN GPIO_NUM_10 | ||
#define AUDIO_I2S_GPIO_DOUT GPIO_NUM_8 | ||
|
||
#define AUDIO_CODEC_PA_PIN GPIO_NUM_48 | ||
#define AUDIO_CODEC_I2C_SDA_PIN GPIO_NUM_17 | ||
#define AUDIO_CODEC_I2C_SCL_PIN GPIO_NUM_18 | ||
#define AUDIO_CODEC_ES8311_ADDR ES8311_CODEC_DEFAULT_ADDR | ||
#define AUDIO_CODEC_ES7210_ADDR ES7210_CODEC_DEFAULT_ADDR | ||
|
||
#define BUILTIN_LED_GPIO GPIO_NUM_NC | ||
#define BOOT_BUTTON_GPIO GPIO_NUM_5 | ||
#define VOLUME_UP_BUTTON_GPIO GPIO_NUM_NC | ||
#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_NC | ||
|
||
#define RESET_NVS_BUTTON_GPIO GPIO_NUM_NC | ||
#define RESET_FACTORY_BUTTON_GPIO GPIO_NUM_NC | ||
|
||
#define DISPLAY_SDA_PIN GPIO_NUM_NC | ||
#define DISPLAY_SCL_PIN GPIO_NUM_NC | ||
#define DISPLAY_WIDTH 280 | ||
#define DISPLAY_HEIGHT 240 | ||
#define DISPLAY_SWAP_XY true | ||
#define DISPLAY_MIRROR_X false | ||
#define DISPLAY_MIRROR_Y true | ||
#define BACKLIGHT_INVERT false | ||
|
||
#define DISPLAY_OFFSET_X 20 | ||
#define DISPLAY_OFFSET_Y 0 | ||
|
||
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_NC | ||
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT false | ||
|
||
#endif // _BOARD_CONFIG_H_ |
139 changes: 139 additions & 0 deletions
139
main/boards/esp32s3-korvo2-v3/esp32s3_korvo2_v3_board.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
#include "wifi_board.h" | ||
#include "audio_codecs/box_audio_codec.h" | ||
#include "display/lcd_display.h" | ||
#include "application.h" | ||
#include "button.h" | ||
|
||
#include "config.h" | ||
#include "i2c_device.h" | ||
#include "iot/thing_manager.h" | ||
|
||
#include <esp_log.h> | ||
#include <esp_lcd_panel_vendor.h> | ||
#include <driver/i2c_master.h> | ||
#include <driver/spi_common.h> | ||
#include <wifi_station.h> | ||
|
||
#define TAG "esp32s3_korvo2_v3" | ||
|
||
class esp32s3_korvo2_v3_board : public WifiBoard | ||
{ | ||
private: | ||
Button boot_button_; | ||
i2c_master_bus_handle_t i2c_bus_; | ||
LcdDisplay* display_; | ||
void InitializeI2c() { | ||
// Initialize I2C peripheral | ||
i2c_master_bus_config_t i2c_bus_cfg = { | ||
.i2c_port = (i2c_port_t)1, | ||
.sda_io_num = AUDIO_CODEC_I2C_SDA_PIN, | ||
.scl_io_num = AUDIO_CODEC_I2C_SCL_PIN, | ||
.clk_source = I2C_CLK_SRC_DEFAULT, | ||
.glitch_ignore_cnt = 7, | ||
.intr_priority = 0, | ||
.trans_queue_depth = 0, | ||
.flags = { | ||
.enable_internal_pullup = 1, | ||
}, | ||
}; | ||
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_)); | ||
|
||
} | ||
void InitializeSpi() | ||
{ | ||
spi_bus_config_t buscfg = {}; | ||
buscfg.mosi_io_num = GPIO_NUM_0; | ||
buscfg.miso_io_num = GPIO_NUM_NC; | ||
buscfg.sclk_io_num = GPIO_NUM_1; | ||
buscfg.quadwp_io_num = GPIO_NUM_NC; | ||
buscfg.quadhd_io_num = GPIO_NUM_NC; | ||
buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); | ||
ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); | ||
} | ||
void InitializeButtons() { | ||
boot_button_.OnClick([this]() { | ||
auto& app = Application::GetInstance(); | ||
if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { | ||
ResetWifiConfiguration(); | ||
} | ||
}); | ||
boot_button_.OnPressDown([this]() { | ||
Application::GetInstance().StartListening(); | ||
}); | ||
boot_button_.OnPressUp([this]() { | ||
Application::GetInstance().StopListening(); | ||
}); | ||
} | ||
void InitializeSt7789Display() | ||
{ | ||
esp_lcd_panel_io_handle_t panel_io = nullptr; | ||
esp_lcd_panel_handle_t panel = nullptr; | ||
// 液晶屏控制IO初始化 | ||
ESP_LOGD(TAG, "Install panel IO"); | ||
esp_lcd_panel_io_spi_config_t io_config = {}; | ||
io_config.cs_gpio_num = GPIO_NUM_46; | ||
io_config.dc_gpio_num = GPIO_NUM_2; | ||
io_config.spi_mode = 0; | ||
io_config.pclk_hz = 60 * 1000 * 1000; | ||
io_config.trans_queue_depth = 10; | ||
io_config.lcd_cmd_bits = 8; | ||
io_config.lcd_param_bits = 8; | ||
ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); | ||
|
||
// 初始化液晶屏驱动芯片ST7789 | ||
ESP_LOGD(TAG, "Install LCD driver"); | ||
esp_lcd_panel_dev_config_t panel_config = {}; | ||
panel_config.reset_gpio_num = GPIO_NUM_NC; | ||
panel_config.rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB; | ||
panel_config.bits_per_pixel = 16; | ||
ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); | ||
ESP_ERROR_CHECK(esp_lcd_panel_reset(panel)); | ||
ESP_ERROR_CHECK(esp_lcd_panel_init(panel)); | ||
ESP_ERROR_CHECK(esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY)); | ||
ESP_ERROR_CHECK(esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y)); | ||
ESP_ERROR_CHECK(esp_lcd_panel_invert_color(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); | ||
} | ||
// 物联网初始化,添加对 AI 可见设备 | ||
void InitializeIot() { | ||
auto& thing_manager = iot::ThingManager::GetInstance(); | ||
thing_manager.AddThing(iot::CreateThing("Speaker")); | ||
|
||
} | ||
|
||
public: | ||
esp32s3_korvo2_v3_board() : boot_button_(BOOT_BUTTON_GPIO) | ||
{ | ||
ESP_LOGI(TAG, "Initializing esp32s3_korvo2_v3 Board"); | ||
InitializeI2c(); | ||
InitializeSpi(); | ||
InitializeButtons(); | ||
InitializeSt7789Display(); | ||
InitializeIot(); | ||
} | ||
|
||
// virtual Led* GetBuiltinLed() override { | ||
// static Led led(GPIO_NUM_NC); | ||
// return &led; | ||
// } | ||
|
||
virtual AudioCodec* GetAudioCodec() override { | ||
static BoxAudioCodec* audio_codec = nullptr; | ||
if (audio_codec == nullptr) { | ||
audio_codec = new BoxAudioCodec(i2c_bus_, AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, | ||
AUDIO_I2S_GPIO_MCLK, AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN, | ||
AUDIO_CODEC_PA_PIN, AUDIO_CODEC_ES8311_ADDR, AUDIO_CODEC_ES7210_ADDR, AUDIO_INPUT_REFERENCE); | ||
audio_codec->SetOutputVolume(AUDIO_DEFAULT_OUTPUT_VOLUME); | ||
} | ||
return audio_codec; | ||
} | ||
|
||
virtual Display *GetDisplay() override | ||
{ | ||
return display_; | ||
} | ||
}; | ||
|
||
DECLARE_BOARD(esp32s3_korvo2_v3_board); |