AIvoices/firmware-cpp/test/speaker_radio_shutdown_test.cpp
2025-04-08 14:05:27 +01:00

198 lines
No EOL
4.7 KiB
C++

#include <Arduino.h>
/*
Simple Internet Radio Demo
esp32-i2s-simple-radio.ino
Simple ESP32 I2S radio
Uses MAX98357 I2S Amplifier Module
Uses ESP32-audioI2S Library - https://github.com/schreibfaul1/ESP32-audioI2S
** ADD THIS **
lib_deps =
esphome/ESP32-audioI2S@^2.0.7
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
// Include required libraries
#include "WiFi.h"
#include "Audio.h"
// Define I2S connections
#define I2S_LRC D0
#define I2S_BCLK D1
#define I2S_DOUT D2
#define I2S_SD D3
#define BUTTON_PIN 0
// #define I2S_LRC 18
// #define I2S_BCLK 21
// #define I2S_DOUT 17
// Create audio object
Audio audio;
// // Wifi Credentials
String ssid = "<wifi>";
String password = "<pw>";
bool isPlaying = true; // Track whether audio is playing or not
unsigned long lastDebounceTime = 0; // for debouncing
unsigned long debounceDelay = 50; // debounce delay in ms
int lastButtonState = HIGH; // the previous button state
int buttonState = HIGH; // current button state
// Toggle audio playback by controlling the SD pin
void toggleAudio()
{
if (isPlaying)
{
// Mute the amplifier (pull SD_PIN low)
digitalWrite(I2S_SD, LOW);
Serial.println("Audio Muted");
}
else
{
// Unmute the amplifier (pull SD_PIN high)
digitalWrite(I2S_SD, HIGH);
Serial.println("Audio Unmuted");
}
isPlaying = !isPlaying; // Toggle playback state
}
void setup()
{
// Start Serial Monitor
Serial.begin(115200);
// Setup WiFi in Station mode
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid.c_str(), password.c_str());
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
// WiFi Connected, print IP to serial monitor
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
// Connect MAX98357 I2S Amplifier Module
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
// Set thevolume (0-100)
audio.setVolume(10);
// Connect to an Internet radio station (select one as desired)
// audio.connecttohost("http://vis.media-ice.musicradio.com/CapitalMP3");
// audio.connecttohost("mediaserv30.live-nect MAX98357 I2S Amplifier Module
// audio.connecttohost("www.surfmusic.de/m3u/100-5-das-hitradio,4529.m3u");
// audio.connecttohost("stream.1a-webradio.de/deutsch/mp3-128/vtuner-1a");
// audio.connecttohost("www.antenne.de/webradio/antenne.m3u");
audio.connecttohost("0n-80s.radionetz.de:8000/0n-70s.mp3");
// Set SD_PIN as output and initialize to HIGH (unmuted)
pinMode(I2S_SD, OUTPUT);
digitalWrite(I2S_SD, HIGH);
// Set BUTTON_PIN as input with internal pull-up resistor
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
// Run audio player
audio.loop();
// Read the button state
int reading = digitalRead(BUTTON_PIN);
// Check for button press (debounced)
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
// Check if the button was pressed (LOW) and change state
if (reading == LOW)
{
if (buttonState == HIGH)
{ // Only toggle on button press, not release
toggleAudio();
}
}
buttonState = reading;
}
// Update the last button state
lastButtonState = reading;
}
// Audio status functions
void audio_info(const char *info)
{
Serial.print("info ");
Serial.println(info);
}
void audio_id3data(const char *info)
{ // id3 metadata
Serial.print("id3data ");
Serial.println(info);
}
void audio_eof_mp3(const char *info)
{ // end of file
Serial.print("eof_mp3 ");
Serial.println(info);
}
void audio_showstation(const char *info)
{
Serial.print("station ");
Serial.println(info);
}
void audio_showstreaminfo(const char *info)
{
Serial.print("streaminfo ");
Serial.println(info);
}
void audio_showstreamtitle(const char *info)
{
Serial.print("streamtitle ");
Serial.println(info);
}
void audio_bitrate(const char *info)
{
Serial.print("bitrate ");
Serial.println(info);
}
void audio_commercial(const char *info)
{ // duration in sec
Serial.print("commercial ");
Serial.println(info);
}
void audio_icyurl(const char *info)
{ // homepage
Serial.print("icyurl ");
Serial.println(info);
}
void audio_lasthost(const char *info)
{ // stream URL played
Serial.print("lasthost ");
Serial.println(info);
}
void audio_eof_speech(const char *info)
{
Serial.print("eof_speech ");
Serial.println(info);
}