123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include "wifi_board.h"
- #include "codecs/es8311_audio_codec.h"
- #include "application.h"
- #include "button.h"
- #include "config.h"
- #include "led/circular_strip.h"
- #include "led_strip_control.h"
- #include <wifi_station.h>
- #include <esp_log.h>
- #include <esp_efuse_table.h>
- #include <driver/i2c_master.h>
- #define TAG "KevinBoxBoard"
- class KevinBoxBoard : public WifiBoard {
- private:
- i2c_master_bus_handle_t codec_i2c_bus_;
- Button boot_button_;
- CircularStrip* led_strip_;
- void InitializeCodecI2c() {
- // Initialize I2C peripheral
- i2c_master_bus_config_t i2c_bus_cfg = {
- .i2c_port = I2C_NUM_0,
- .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, &codec_i2c_bus_));
- // Print I2C bus info
- if (i2c_master_probe(codec_i2c_bus_, 0x18, 1000) != ESP_OK) {
- while (true) {
- ESP_LOGE(TAG, "Failed to probe I2C bus, please check if you have installed the correct firmware");
- vTaskDelay(1000 / portTICK_PERIOD_MS);
- }
- }
- }
- 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();
- });
- }
- // 物联网初始化,添加对 AI 可见设备
- void InitializeTools() {
- led_strip_ = new CircularStrip(BUILTIN_LED_GPIO, 8);
- new LedStripControl(led_strip_);
- }
- public:
- KevinBoxBoard() : boot_button_(BOOT_BUTTON_GPIO) {
- InitializeCodecI2c();
- InitializeButtons();
- InitializeTools();
-
- // 把 ESP32C3 的 VDD SPI 引脚作为普通 GPIO 口使用
- esp_efuse_write_field_bit(ESP_EFUSE_VDD_SPI_AS_GPIO);
- }
- virtual Led* GetLed() override {
- return led_strip_;
- }
- virtual AudioCodec* GetAudioCodec() override {
- static Es8311AudioCodec audio_codec(codec_i2c_bus_, I2C_NUM_0, 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);
- return &audio_codec;
- }
- };
- DECLARE_BOARD(KevinBoxBoard);
|