pdf-icon

Arduino 上手教程

2. 设备开发 & 案例程序

5. 拓展模块

6. 应用案例

Hat SPK Arduino 使用教程

1. 准备工作

2. 案例程序

Play Tone

案例说明
Hat SPK 是一款兼容 SticKC 的扬声器,内置 PAM8303 功放 IC(3W 单通道 D 类音频功率放大器)。本案例将使用 StickC-Plus2 通过 GPIO 26 引脚输出 PWM 信号来控制 Hat SPK 来播放音频。
cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
#include <M5Unified.h>

const int SPEAKER_PIN = 26;
const int SD_PIN = 0;
const int PWM_CHANNEL = 0;
const int PWM_RESOLUTION = 10;  // 10-bit resolution (0-1023)
const int PWM_FREQ = 40000;     // 40kHz carrier frequency

void setup() {
    M5.begin();

    // Enable speaker
    pinMode(SD_PIN, OUTPUT);
    digitalWrite(SD_PIN, HIGH);

    // Configure LEDC PWM
    ledcAttach(SPEAKER_PIN, PWM_FREQ, PWM_RESOLUTION);
    M5.Display.setRotation(1);  // Depends on the direction of M5StickC-Plus2 be held
    M5.Display.setCursor(40, 60, 2);
    M5.Display.print("Press BtnA to play Audio");
}

void playTone(int frequency, int duration) {
    // Calculate duty cycle for 50% square wave
    int dutyCycle = (1 << (PWM_RESOLUTION - 1));  // 512 for 10-bit

    // Set PWM frequency to audio frequency
    ledcChangeFrequency(SPEAKER_PIN, frequency, PWM_RESOLUTION);
    ledcWrite(SPEAKER_PIN, dutyCycle);

    delay(duration);

    // Stop tone
    ledcWrite(SPEAKER_PIN, 0);
}

void loop() {
  M5.update();

  if (M5.BtnA.wasPressed()) {
    // Play musical notes
    playTone(262, 500);  // C4
    delay(100);
    playTone(294, 500);  // D4
    delay(100);
    playTone(330, 500);  // E4
    delay(100);
    playTone(349, 500);  // F4
    delay(100);
    playTone(392, 500);  // G4
    delay(1000);
  }
}

Play Raw RCM

案例说明
以下链接可以获取源码工程和 m5stack_startup_music.c 文件
cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#include <M5Unified.h>

extern const unsigned char m5stack_startup_music[];
extern const unsigned int m5stack_startup_music_len;

const int HAT_SPK_ENABLE_PIN = 0;
const int HAT_SPK_AUDIO_PIN = 26;

void setup() {
    auto cfg = M5.config();
    cfg.external_speaker.hat_spk = true;
    M5.begin(cfg);

    // Enable speaker
    pinMode(HAT_SPK_ENABLE_PIN, OUTPUT);
    digitalWrite(HAT_SPK_ENABLE_PIN, HIGH);

    // Configure Speaker to use GPIO26(Hat SPK)
    auto spk_cfg = M5.Speaker.config();
    spk_cfg.pin_data_out = HAT_SPK_AUDIO_PIN;
    spk_cfg.sample_rate = 8000;
    spk_cfg.task_pinned_core = APP_CPU_NUM;
    M5.Speaker.config(spk_cfg);
    M5.Speaker.begin();

    M5.Display.setRotation(1);
    M5.Display.setCursor(40, 60, 2);
    M5.Display.print("Press BtnA to play");
}

void playMusic() {
    M5.Display.clear();
    M5.Display.setCursor(40, 60, 2);
    M5.Display.print("Playing...");

    // Use Hat SPK to play audio
    M5.Speaker.playRaw(
        m5stack_startup_music,
        m5stack_startup_music_len,
        8000,
        false,
        1,
        0
    );

    while (M5.Speaker.isPlaying()) {
        M5.update();
        if (M5.BtnA.wasPressed()) {
            M5.Speaker.stop();
            break;
        }
        delay(10);
    }

    M5.Display.clear();
    M5.Display.setCursor(40, 60, 2);
    M5.Display.print("Press BtnA to play");
}

void loop() {
    M5.update();
    if (M5.BtnA.wasPressed()) {
        playMusic();
    }
    delay(10);
}

3. 编译上传

  1. 进入下载模式:不同的 Stick 设备进行程序烧录前需要安装对应的驱动程序,不同的主控设备使用的驱动与安装步骤可能有所不同。详情可参考Arduino IDE上手教程页面底部的设备程序下载教程列表,查看具体设备对应的操作方式。

  2. 选中设备端口,点击 Arduino IDE 左上角编译上传按钮,等待程序完成编译并上传至设备。

4. 点按 Button A 按键控制 Hat SPK 播放音频显示

该程序在检测到 Button A 按键被按下后,将控制 Hat SPK 播放音频。程序完成编译并上传至设备后,StickC-Plus2 的屏幕上显示:

On This Page