Skip to content

add minsi board #512

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions main/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ elseif(CONFIG_BOARD_TYPE_MIXGO_NOVA)
set(BOARD_TYPE "mixgo-nova")
elseif(CONFIG_BOARD_TYPE_ESP32_CGC)
set(BOARD_TYPE "esp32-cgc")
elseif(CONFIG_BOARD_TYPE_MINSI_K08_WIFI)
set(BOARD_TYPE "minsi-k08-wifi")
elseif(CONFIG_BOARD_TYPE_MINSI_K08_ML307)
set(BOARD_TYPE "minsi-k08-ml307")
endif()
file(GLOB BOARD_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD_TYPE}/*.cc
Expand Down
4 changes: 4 additions & 0 deletions main/Kconfig.projbuild
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ choice BOARD_TYPE
bool "四博智联AI陪伴盒子"
config BOARD_TYPE_MIXGO_NOVA
bool "元控·青春"
config BOARD_TYPE_MINSI_K08_WIFI
bool "敏思科技K08(WIFI)"
config BOARD_TYPE_MINSI_K08_ML307
bool "敏思科技K08(ML307)"
endchoice

choice DISPLAY_OLED_TYPE
Expand Down
36 changes: 36 additions & 0 deletions main/boards/minsi-k08-ml307/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@

minsi-k08-wifi和minsi-k08-ml307是敏思科技推出的基于ESP32S3N16R8,搭载MAX98357音频功率放大器和INMP441全向麦克风模块,通过改造K08透明机甲小钢炮音箱而成的带有朋克风格的大喇叭大电池小智AI聊天机器人方案。

<a href="https://item.taobao.com/item.htm?id=889892765588" target="_blank" title="SenseCAP Watcher">Minsi-k08</a>

<a href="../minsi-k08-wifi/minsi-k08.jpg" target="_blank" title="Minsi-k08">
<img src="../minsi-k08-wifi/minsi-k08.jpg" width="240" />
</a>



# 编译配置命令

**配置编译目标为 ESP32S3:**

```bash
idf.py set-target esp32s3
```

**打开 menuconfig:**

```bash
idf.py menuconfig
```

**选择板子:**

```
Xiaozhi Assistant -> Board Type ->敏思科技K08(ML307)
```

**编译烧入:**

```bash
idf.py build flash
```
73 changes: 73 additions & 0 deletions main/boards/minsi-k08-ml307/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#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_4
//#define AUDIO_I2S_MIC_GPIO_SCK GPIO_NUM_5
//#define AUDIO_I2S_MIC_GPIO_DIN GPIO_NUM_6
//#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_7
//#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_15
//#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_16

#define AUDIO_I2S_MIC_GPIO_WS GPIO_NUM_9
#define AUDIO_I2S_MIC_GPIO_SCK GPIO_NUM_10
#define AUDIO_I2S_MIC_GPIO_DIN GPIO_NUM_18
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_4
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_5
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_6
#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_47
//#define VOLUME_UP_BUTTON_GPIO GPIO_NUM_40
//#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_39
#define BUILTIN_LED_GPIO GPIO_NUM_40
#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_7
#define DISPLAY_MOSI_PIN GPIO_NUM_17
#define DISPLAY_CLK_PIN GPIO_NUM_8
#define DISPLAY_DC_PIN GPIO_NUM_15
#define DISPLAY_RST_PIN GPIO_NUM_16
#define DISPLAY_CS_PIN GPIO_NUM_NC


//#define ML307_RX_PIN GPIO_NUM_38
//#define ML307_TX_PIN GPIO_NUM_39
//#define ML307_RX_PIN GPIO_NUM_39
//#define ML307_TX_PIN GPIO_NUM_38
#define ML307_RX_PIN GPIO_NUM_11
#define ML307_TX_PIN GPIO_NUM_12

#define DISPLAY_WIDTH 240
#define DISPLAY_HEIGHT 240
#define DISPLAY_MIRROR_X false
#define DISPLAY_MIRROR_Y true
#define DISPLAY_SWAP_XY true
#define DISPLAY_INVERT_COLOR true
#define DISPLAY_RGB_ORDER LCD_RGB_ELEMENT_ORDER_RGB
#define DISPLAY_OFFSET_X 80
#define DISPLAY_OFFSET_Y 0
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT false

#endif // _BOARD_CONFIG_H_
9 changes: 9 additions & 0 deletions main/boards/minsi-k08-ml307/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"target": "esp32s3",
"builds": [
{
"name": "minsi-k08-ml307",
"sdkconfig_append": []
}
]
}
143 changes: 143 additions & 0 deletions main/boards/minsi-k08-ml307/minsi_k08_ml307.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#include "ml307_board.h"
//#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 "assets/lang_config.h"

//#include <wifi_station.h>
#include <esp_log.h>
#include <driver/i2c_master.h>
#include <esp_lcd_panel_vendor.h>
#include <esp_lcd_panel_io.h>
#include <esp_lcd_panel_ops.h>
#include <driver/spi_common.h>

#define TAG "MINSI_K08_ML307"

LV_FONT_DECLARE(font_puhui_16_4);
LV_FONT_DECLARE(font_awesome_16_4);

class MINSI_K08_ML307 : public Ml307Board {
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 = 3;
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;

ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel));

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 SpiLcdDisplay(panel_io, panel,
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]() {
Application::GetInstance().ToggleChatState();
});
}

// 物联网初始化,添加对 AI 可见设备
void InitializeIot() {
auto& thing_manager = iot::ThingManager::GetInstance();
thing_manager.AddThing(iot::CreateThing("Speaker"));
thing_manager.AddThing(iot::CreateThing("Lamp"));
if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) {
thing_manager.AddThing(iot::CreateThing("Backlight"));
}
}


public:
MINSI_K08_ML307() : Ml307Board(ML307_TX_PIN, ML307_RX_PIN, 4096),
boot_button_(BOOT_BUTTON_GPIO) {

InitializeSpi();
InitializeLcdDisplay();
InitializeButtons();
InitializeIot();
if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) {
GetBacklight()->RestoreBrightness();
}
}

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_;
}

virtual Backlight* GetBacklight() override {
if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) {
static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT);
return &backlight;
}
return nullptr;
}
};

DECLARE_BOARD(MINSI_K08_ML307);
36 changes: 36 additions & 0 deletions main/boards/minsi-k08-wifi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@

minsi-k08-wifi和minsi-k08-ml307是敏思科技推出的基于ESP32S3N16R8,搭载MAX98357音频功率放大器和INMP441全向麦克风模块,通过改造K08透明机甲小钢炮音箱而成的带有朋克风格的大喇叭大电池小智AI聊天机器人方案。

<a href="https://item.taobao.com/item.htm?id=889892765588" target="_blank" title="SenseCAP Watcher">Minsi-k08</a>

<a href="minsi-k08.jpg" target="_blank" title="Minsi-k08">
<img src="minsi-k08.jpg" width="240" />
</a>



# 编译配置命令

**配置编译目标为 ESP32S3:**

```bash
idf.py set-target esp32s3
```

**打开 menuconfig:**

```bash
idf.py menuconfig
```

**选择板子:**

```
Xiaozhi Assistant -> Board Type ->敏思科技K08(WIFI)
```

**编译烧入:**

```bash
idf.py build flash
```
68 changes: 68 additions & 0 deletions main/boards/minsi-k08-wifi/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#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_4
//#define AUDIO_I2S_MIC_GPIO_SCK GPIO_NUM_5
//#define AUDIO_I2S_MIC_GPIO_DIN GPIO_NUM_6
//#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_7
//#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_15
//#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_16
#define AUDIO_I2S_MIC_GPIO_WS GPIO_NUM_9
#define AUDIO_I2S_MIC_GPIO_SCK GPIO_NUM_10
#define AUDIO_I2S_MIC_GPIO_DIN GPIO_NUM_18
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_4
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_5
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_6
#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_40
#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_42
//#define DISPLAY_MOSI_PIN GPIO_NUM_47
//#define DISPLAY_CLK_PIN GPIO_NUM_21
//#define DISPLAY_DC_PIN GPIO_NUM_40
//#define DISPLAY_RST_PIN GPIO_NUM_45
//#define DISPLAY_CS_PIN GPIO_NUM_41
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_7
#define DISPLAY_MOSI_PIN GPIO_NUM_17
#define DISPLAY_CLK_PIN GPIO_NUM_8
#define DISPLAY_DC_PIN GPIO_NUM_15
#define DISPLAY_RST_PIN GPIO_NUM_16
#define DISPLAY_CS_PIN GPIO_NUM_NC

#define DISPLAY_WIDTH 240
#define DISPLAY_HEIGHT 240
#define DISPLAY_MIRROR_X false
#define DISPLAY_MIRROR_Y true
#define DISPLAY_SWAP_XY true
#define DISPLAY_INVERT_COLOR true
#define DISPLAY_RGB_ORDER LCD_RGB_ELEMENT_ORDER_RGB
#define DISPLAY_OFFSET_X 80
#define DISPLAY_OFFSET_Y 0
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT false


#endif // _BOARD_CONFIG_H_
Loading