-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 添加了嘟嘟电路板chatx * 多写了一个空格。修改了一下
- Loading branch information
Showing
4 changed files
with
192 additions
and
0 deletions.
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,54 @@ | ||
#ifndef _BOARD_CONFIG_H_ | ||
#define _BOARD_CONFIG_H_ | ||
|
||
#include <driver/gpio.h> | ||
|
||
#define AUDIO_INPUT_SAMPLE_RATE 16000 | ||
#define AUDIO_OUTPUT_SAMPLE_RATE 24000 | ||
|
||
// 如果使用 Duplex I2S 模式,请注释下面一行 | ||
#define AUDIO_I2S_METHOD_SIMPLEX | ||
|
||
#ifdef AUDIO_I2S_METHOD_SIMPLEX | ||
|
||
#define AUDIO_I2S_MIC_GPIO_WS GPIO_NUM_39 | ||
#define AUDIO_I2S_MIC_GPIO_SCK GPIO_NUM_38 | ||
#define AUDIO_I2S_MIC_GPIO_DIN GPIO_NUM_7 | ||
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_40 | ||
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_42 | ||
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_2 | ||
|
||
#else | ||
|
||
#define AUDIO_I2S_GPIO_WS GPIO_NUM_4 | ||
#define AUDIO_I2S_GPIO_BCLK GPIO_NUM_5 | ||
#define AUDIO_I2S_GPIO_DIN GPIO_NUM_6 | ||
#define AUDIO_I2S_GPIO_DOUT GPIO_NUM_7 | ||
|
||
#endif | ||
|
||
#define BUILTIN_LED_GPIO GPIO_NUM_48 | ||
#define BOOT_BUTTON_GPIO GPIO_NUM_0 | ||
#define TOUCH_BUTTON_GPIO GPIO_NUM_NC | ||
#define VOLUME_UP_BUTTON_GPIO GPIO_NUM_NC | ||
#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_NC | ||
|
||
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_9 | ||
#define DISPLAY_MOSI_PIN GPIO_NUM_18 | ||
#define DISPLAY_CLK_PIN GPIO_NUM_17 | ||
#define DISPLAY_DC_PIN GPIO_NUM_8 | ||
#define DISPLAY_RST_PIN GPIO_NUM_20 | ||
#define DISPLAY_CS_PIN GPIO_NUM_16 | ||
|
||
#define DISPLAY_WIDTH 128 | ||
#define DISPLAY_HEIGHT 160 | ||
#define DISPLAY_MIRROR_X true | ||
#define DISPLAY_MIRROR_Y true | ||
#define DISPLAY_SWAP_XY false | ||
#define DISPLAY_INVERT_COLOR false | ||
#define DISPLAY_RGB_ORDER LCD_RGB_ELEMENT_ORDER_RGB | ||
#define DISPLAY_OFFSET_X 0 | ||
#define DISPLAY_OFFSET_Y 0 | ||
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT false | ||
|
||
#endif // _BOARD_CONFIG_H_ |
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,134 @@ | ||
#include "wifi_board.h" | ||
#include "audio_codecs/no_audio_codec.h" | ||
#include "display/lcd_display.h" | ||
#include "system_reset.h" | ||
#include "application.h" | ||
#include "button.h" | ||
#include "config.h" | ||
#include "iot/thing_manager.h" | ||
#include "led/single_led.h" | ||
|
||
#include <wifi_station.h> | ||
#include <esp_log.h> | ||
#include <driver/i2c_master.h> | ||
#include <esp_lcd_panel_vendor.h> | ||
#include <driver/spi_common.h> | ||
|
||
#if defined(LCD_ILI9341_240X320) || defined(LCD_ILI9341_240X320_NO_IPS) | ||
#include "esp_lcd_ili9341.h" | ||
#endif | ||
|
||
#define TAG "DuChatX" | ||
|
||
LV_FONT_DECLARE(font_puhui_16_4); | ||
LV_FONT_DECLARE(font_awesome_16_4); | ||
|
||
class DuChatX : public WifiBoard { | ||
private: | ||
|
||
Button boot_button_; | ||
LcdDisplay* display_; | ||
|
||
void InitializeSpi() { | ||
spi_bus_config_t buscfg = {}; | ||
buscfg.mosi_io_num = DISPLAY_MOSI_PIN; | ||
buscfg.miso_io_num = GPIO_NUM_NC; | ||
buscfg.sclk_io_num = DISPLAY_CLK_PIN; | ||
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 InitializeLcdDisplay() { | ||
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 = DISPLAY_CS_PIN; | ||
io_config.dc_gpio_num = DISPLAY_DC_PIN; | ||
io_config.spi_mode = 0; | ||
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; | ||
ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); | ||
|
||
// 初始化液晶屏驱动芯片 | ||
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 = DISPLAY_RGB_ORDER; | ||
panel_config.bits_per_pixel = 16; | ||
#if defined(LCD_ILI9341_240X320) || defined(LCD_ILI9341_240X320_NO_IPS) | ||
ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(panel_io, &panel_config, &panel)); | ||
#else | ||
ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); | ||
#endif | ||
|
||
esp_lcd_panel_reset(panel); | ||
|
||
|
||
esp_lcd_panel_init(panel); | ||
esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); | ||
esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); | ||
esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); | ||
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, | ||
{ | ||
.text_font = &font_puhui_16_4, | ||
.icon_font = &font_awesome_16_4, | ||
.emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), | ||
}); | ||
} | ||
|
||
|
||
|
||
void InitializeButtons() { | ||
boot_button_.OnClick([this]() { | ||
auto& app = Application::GetInstance(); | ||
if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { | ||
ResetWifiConfiguration(); | ||
} | ||
app.ToggleChatState(); | ||
}); | ||
} | ||
|
||
// 物联网初始化,添加对 AI 可见设备 | ||
void InitializeIot() { | ||
auto& thing_manager = iot::ThingManager::GetInstance(); | ||
thing_manager.AddThing(iot::CreateThing("Speaker")); | ||
} | ||
|
||
public: | ||
DuChatX() : | ||
boot_button_(BOOT_BUTTON_GPIO) { | ||
InitializeSpi(); | ||
InitializeLcdDisplay(); | ||
InitializeButtons(); | ||
InitializeIot(); | ||
} | ||
|
||
virtual Led* GetLed() override { | ||
static SingleLed led(BUILTIN_LED_GPIO); | ||
return &led; | ||
} | ||
|
||
virtual AudioCodec* GetAudioCodec() override { | ||
#ifdef AUDIO_I2S_METHOD_SIMPLEX | ||
static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, | ||
AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); | ||
#else | ||
static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, | ||
AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); | ||
#endif | ||
return &audio_codec; | ||
} | ||
|
||
virtual Display* GetDisplay() override { | ||
return display_; | ||
} | ||
}; | ||
|
||
DECLARE_BOARD(DuChatX); |