Re: ESP8266/ESP32 онлайн радио.
Добавлено: 24 окт 2024, 15:44
Я указал так
out = new AudioOutputI2S();
out -> SetPinout(4, 2, 3);
out = new AudioOutputI2S();
out -> SetPinout(4, 2, 3);
Я указал так
Пример скиньте, посмотрю, расположение кода не должен влиять, в лооп должен код запускаться один раз, как в сетап.superolegb писал(а): 24 окт 2024, 15:51 Подскажите кто нибудь пробовал запускать эти блоки на ESP32s2. Ни один блок не работает. Даже с интернетом плохо конектится. Отлично работает пример StreamMP3FromHTTP. Но там все в сетапе находится. Стоит перенести в LOOP и все перестает работать.
Последний блок-это то что я пытался сделать(на базе примера StreamMP3FromHTTP) . Модуль не подключается к сети совсем. Если компилировать Ваш блок, то модуль подключается к сети, но сильно с перебоями - звука так же нет. Звук удалось получить только с примером StreamMP3FromHTT(там все стабильно и связь и звук).aidar_i писал(а): 24 окт 2024, 17:28Пример скиньте, посмотрю, расположение кода не должен влиять, в лооп должен код запускаться один раз, как в сетап.superolegb писал(а): 24 окт 2024, 15:51 Подскажите кто нибудь пробовал запускать эти блоки на ESP32s2. Ни один блок не работает. Даже с интернетом плохо конектится. Отлично работает пример StreamMP3FromHTTP. Но там все в сетапе находится. Стоит перенести в LOOP и все перестает работать.
Использую 7.3.8.
Используете ESP32 S2? Библиотека последняя?
Код: Выделить всё
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <user_interface.h>
//#include "AudioFileSourceHTTPStream.h" //https://github.com/earlephilhower/ESP8266Audio
#include "AudioFileSourceICYStream.h"
#include "AudioFileSourceBuffer.h" //https://github.com/earlephilhower/ESP8266Audio
#include "AudioGeneratorMP3.h" //https://github.com/earlephilhower/ESP8266Audio
#include "AudioOutputI2SNoDAC.h" //https://github.com/earlephilhower/ESP8266Audio
// Enter your WiFi setup here:
const char *SSID = "test"; //Ваше имя сети
const char *PASSWORD = "password"; // Ключ к сети
// Stations URLs...
const char* URL[]={"http://philae.shoutca.st:8446/stream/1/", "http://shoutcast.byfly.by:88/rmf", "http://shoutcast.byfly.by:88/euroradio_by", "http://shoutcast.byfly.by:88/svoboda_rus
"};
int buttonPin = 0; //назначим кнопку CH+
String url_tmp;
int ch;
AudioGeneratorMP3 *mp3;
//AudioFileSourceHTTPStream *file;
AudioFileSourceICYStream *file;
AudioFileSourceBuffer *buff;
AudioOutputI2SNoDAC *out;
// 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)
{
const char *ptr = reinterpret_cast<const char *>(cbData);
(void) isUnicode; // Punt this ball for now
// Note that the type and string may be in PROGMEM, so copy them to RAM for printf
char s1[32], s2[64];
strncpy_P(s1, type, sizeof(s1));
s1[sizeof(s1)-1]=0;
strncpy_P(s2, string, sizeof(s2));
s2[sizeof(s2)-1]=0;
Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2);
Serial.flush();
}
// Called when there's a warning or error (like a buffer underflow or decode hiccup)
void StatusCallback(void *cbData, int code, const char *string)
{
const char *ptr = reinterpret_cast<const char *>(cbData);
// Note that the string may be in PROGMEM, so copy it to RAM for printf
char s1[64];
strncpy_P(s1, string, sizeof(s1));
s1[sizeof(s1)-1]=0;
Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1);
Serial.flush();
}
void setup()
{
system_update_cpu_freq(SYS_CPU_160MHZ);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(115200);
delay(1000);
Serial.println("Connecting to WiFi");
WiFi.disconnect();
WiFi.softAPdisconnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
// Try forever
while (WiFi.status() != WL_CONNECTED) {
Serial.println("...Connecting to WiFi");
delay(2000);
//Serial.println(ESP.getFlashChipSize());
}
Serial.println("Connected");
Serial.printf("Start Heap: %d b\n", ESP.getFreeHeap());
out = new AudioOutputI2SNoDAC();
Serial.printf("Init audio out Heap: %d b\n", ESP.getFreeHeap());
url_tmp=URL[1];
play();
Serial.printf("Play audio Heap: %d b\n", ESP.getFreeHeap());
}
void loop()
{
static int lastms = 0;
if (!digitalRead(buttonPin)){
Serial.print("Ch: ");
delay(200);
ch++;
sel_ch();
Serial.println(ch);
StopPlaying();
play();
}
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms. Heap: %d b\n", lastms, ESP.getFreeHeap());
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
play();
}
}
void play()
{
/*
file = new AudioFileSourceHTTPStream(url_tmp.c_str());
buff = new AudioFileSourceBuffer(file, 2048);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
*/
// file = new AudioFileSourceHTTPStream(url_tmp.c_str());
file = new AudioFileSourceICYStream(url_tmp.c_str());
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
//buff = new AudioFileSourceBuffer(file, 2560);
//buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(file, out);
// mp3->begin(buff, out);
}
void StopPlaying()
{
if (mp3) {
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff) {
buff->close();
delete buff;
buff = NULL;
}
if (file) {
file->close();
delete file;
file = NULL;
}
}
void sel_ch()
{
if (ch==0) url_tmp=URL[0];
if (ch==1) url_tmp=URL[1];
if (ch==2) url_tmp=URL[2];
if (ch==3) url_tmp=URL[3];
if (ch>3) ch=0, url_tmp=URL[0];
}
Тогда нужно использовать I2S плату, например PCM 5102, можно назначить свободные пины для него.DedBanzai писал(а): 23 окт 2024, 13:48 Доброго времени суток, уважаемые. Подскажите, как поменять пины для вывода звука? Имеется ESP32-CAM, там нет 25 и 26 пина. В самом коде не нашел, где они выставляются.
Ваш блок со входа не будет работать, потому что код аудио находится в сетапsuperolegb писал(а): 26 окт 2024, 00:36 Не могу только задачу массива радиостанций через вход сделать(только через параметры)