2
2

More than 1 year has passed since last update.

ATOM Liteで内蔵DACとSPIFFS領域のMP3再生してみる #リテールテックハッカソン

Last updated at Posted at 2023-06-10

リテールテックハッカソン中に触っていてこんな感じでできたのでメモ的に記事残しておきます。

ぽぽぽぽぽー

ATOM Liteとスピーカーを繋げる

M5Atom LiteのG25をスピーカーの+に接続するだけでいけました。

参考: https://rika-programming.amebaownd.com/posts/8792131/

SPIFFS領域からMP3を読み込んで再生

ESP8266Audioのライブラリをインストールしつつ、コードはこちらの記事のコードをまるっとそのまま使わせてもらいました。

PlatformIOで実装しています。

main.cpp
// using libraries from https://github.com/earlephilhower/ESP8266Audio

#include <Arduino.h>
#ifdef ESP32
  #include <WiFi.h>
  #include "SPIFFS.h"
#else
  #include <ESP8266WiFi.h>
#endif
#include "AudioFileSourceSPIFFS.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2S *out;
AudioFileSourceID3 *id3;

// Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc.
void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string)
{
  (void)cbData;
  Serial.printf("ID3 callback for: %s = '", type);

  if (isUnicode) {
    string += 2;
  }
  
  while (*string) {
    char a = *(string++);
    if (isUnicode) {
      string++;
    }
    Serial.printf("%c", a);
  }
  Serial.printf("'\n");
  Serial.flush();
}

void mp3begin(){
  file = new AudioFileSourceSPIFFS("/popopo.mp3");
  id3 = new AudioFileSourceID3(file);
  id3->RegisterMetadataCB(MDCallback, (void*)"ID3TAG");
  //out = new AudioOutputI2SNoDAC();
  out = new AudioOutputI2S(0,AudioOutputI2S::INTERNAL_DAC);
  mp3 = new AudioGeneratorMP3();
  mp3->begin(id3, out);
}

void setup(){
  WiFi.mode(WIFI_OFF); 
  Serial.begin(115200);
  delay(1000);
  SPIFFS.begin();
  Serial.printf("Sample MP3 playback begins...\n");
  mp3begin();
}

void loop(){
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
    mp3begin();
  }
}

参考までにplatform.iniも載せておきます。

platform.ini
[env:m5stack-atom]
platform = espressif32
board = m5stack-atom
framework = arduino
lib_deps = earlephilhower/ESP8266Audio@^1.9.7

ちなみにM5Stamp Pico Mateでもいけた

M5Stamp Pico MateはDACが使えるみたいで同様にG25にスピーカーを繋ぐことで音が出ました。

PlatformIOではボードでpico32を指定してます。

ボード指定とかはありますが、先ほどのATOM Liteと同じコードで動いてくれました。

platformio.ini
[env:pico32]
platform = espressif32
board = pico32
framework = arduino
lib_deps = earlephilhower/ESP8266Audio@^1.9.7
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2