Аудио плеер на Cortex M0+ через DAC

Платформы Arduino с ядром Cortex-M0 позволяют воспроизводить звуковые дорожки с карты памяти через цифро-аналоговый преобразователь на пине A0.

Что понадобится?

Для Arduino семейства MKR

Для Arduino M0 и Arduino M0 Pro

Аудиофайл

Подготовьте файл для воспроизведения:

  1. Скачайте и установите программу для конвертации аудиоформатов «Audacity»
  2. Сконвертируйте требуемый музыкальный файл в формат WAV с характеристиками:
    1. Режим: моно
    2. Частоте дискретизации: 88200 Гц
    3. Количестве бит в сэмпле: 8 бит
  3. Скопируйте полученный файл на SD-карту.

Как собрать?

В зависимости от управляющей платформы соберите схему проекта.

Схема для Arduino MKR Zero

Схема для Arduino M0 и Arduino M0 Pro

Пример кода

Для работы примера — установите библиотеку AudioZero из менеджера библиотек.

play-music-dac.ino
// библиотека для работы шины SPI
#include <SPI.h>
// библиотека для работы c картой microSD
#include <SD.h>
// библиотека для воспроизведения музыки с помощью Arduino на ядре Cortex M0+
#include <AudioZero.h>
 
// на плате Arduino MKR Zero флешка подключена к SPI1
// выбираем в качестве пина CS определение SDCARD_SS_PIN
#define SS_PIN SDCARD_SS_PIN
 
// если у вас плата Arduino M0 или Arduino M0 Pro
// выбирайте 8 пин
// #define SS_PIN 8
 
void setup() {
  // открываем монитор Serial-порта
  Serial.begin(9600);
  // ждём открытия Serial-порта
  while(!Serial);
  // выводим сообщение в Serial-порт о поиске карты памяти
  Serial.println("Initializing SD card...");
  // если microSD-карта не была обнаружена
  while (!SD.begin(SS_PIN)) {
    // выводим сообщение об ошибке
    Serial.println("Card failed, or not present");
    // ждём одну секунду и повторяем попытку
    delay(1000);
  }
  // выводим сообщение об успешной поиске карты памяти
  Serial.println("Card initialization is OK");
  // выставляем частоту воспроизведения
  AudioZero.begin(2 * 44100);
}
 
void loop() {
  // открываем wave-файл с карточки microSD
  File myFile = SD.open("dac-m0.wav");
  if (!myFile) {
    // если файл не открылся, пишем об ошибке и останавливаем код
    Serial.println("Error opening music file...");
    while (true);
  }
  // выводим сообщение о начале воспроизведения
  Serial.print("Playing music from DAC");
  // воспроизводим файл
  AudioZero.play(myFile);
  // выводим сообщение об окончании проигрывания файла
  Serial.println("End of file. Thank you for listening!");
  // останавливаем код
  while (true);
}