42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
|
|
/**
|
|
* @file receive-mp3.ino
|
|
* @brief Example of receiving an mp3 stream over serial and playing it over I2S
|
|
* using the AudioTools library.
|
|
* The processing must be synchronized with RTS/CTS flow control to prevent a
|
|
* buffer overflow and lost data.
|
|
*/
|
|
#include "AudioTools.h"
|
|
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"
|
|
#include "AudioTools/AudioLibs/AudioBoardStream.h"
|
|
|
|
|
|
AudioBoardStream i2s(AudioKitEs8388V1); // final output of decoded stream
|
|
EncodedAudioStream dec(&i2s, new MP3DecoderHelix()); // Decoding stream
|
|
HardwareSerial MP3Serial(1); // define a Serial for UART1
|
|
StreamCopy copier(dec, MP3Serial); // copy url to decoder
|
|
// pins
|
|
const int MySerialTX = -1;
|
|
const int MySerialRX = 18;
|
|
const int MySerialRTS = -1;
|
|
const int MySerialCTS = 20;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
|
|
|
|
// setup serial data source with flow control
|
|
MP3Serial.begin(115200, SERIAL_8N1);
|
|
MP3Serial.setPins(MySerialRX, MySerialTX, MySerialCTS, MySerialRTS);
|
|
MP3Serial.setHwFlowCtrlMode(UART_HW_FLOWCTRL_CTS_RTS);
|
|
|
|
// setup i2s
|
|
auto config = i2s.defaultConfig(TX_MODE);
|
|
i2s.begin(config);
|
|
|
|
// setup I2S based on sampling rate provided by decoder
|
|
dec.begin();
|
|
|
|
}
|
|
|
|
void loop() { copier.copy(); } |