ESP8266_WiFi_RADIO
ESP_RADIO_onlinе_5.2
EN
583cb09d-a9c7-4119-8d90-ae6324e00899
02cb4dcb-1316-462f-a232-67875efbf524
ESP_RADIO_onlinе_1.2
ESP8266 RADIO
ON
8389aad5-e0af-485a-9899-94cd2fd21899
fbdbd2db-8fae-48af-921c-4bea960effdc
f2d97d12-ebdf-4f30-889d-ef3ea6a53ddf
ESP8266 RADIO
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
Вход network - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3
Папраметры: length_str - длина строки, принят 30.
network - название точки доступа на ESP8266, я назвал esp_radio, можете поменять.
При подключении ESP8266 к питанию создается точка доступа esp_radio, при подключении к нему открывается в веб браузере страница, в котором нужно поставить название вашей wi fi сети и пароль, ESP подключится к нему и заработает радио по умолчанию.
Некоторые радиостанции:
http://kpradio.hostingradio.ru:8000/
http://radio.horoshee.fm:8000/mp3
http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3
http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://music.myradio.ua/rep128.mp3
http://jazz.streamr.ru/jazz-128.mp3
http://87.110.219.34:8000/swhmp3
http://87.110.219.34:8000/plusmp3
http://91.90.255.111:80/MixFM_96
https://nashe1.hostingradio.ru:18000/nashe20-64.mp3
http://jazz.streamr.ru/jazz-64.mp3
1084
radiostation
jazz.streamr.ru/jazz-64.mp3h
2d2ef667-20e6-4931-b1de-e514800489e2
322a8bbb-7673-49ef-aa15-16e7e13454fd
if (ON) {
if (newUrl) {newUrl = false;
AUDIO_init();
}
handleAudio();
}
104
system_update_cpu_freq(SYS_CPU_160MHZ);
Serial.begin(115200);
68
#include
<Arduino.h>
*URL
= radiostation;
#include <ESP8266WiFi.h>
#include "AudioFileSourceICYStream.h"
#include "AudioFileSourceBuffer.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
const char
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
newUrl
= true;
bool
const char *ptr = reinterpret_cast<const char *>(cbData);
(void) isUnicode;
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();
295
void
MDCallback
void
*cbData
const char
*type
bool
isUnicode
const char
*string
const char *ptr = reinterpret_cast<const char *>(cbData);
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();
210
void
StatusCallback
void
*cbData
int
code
const char
*string
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
344
void
handleAudio
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, 4096);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
357
void
AUDIO_init
radiostation
b8cb5e21-2cae-4448-8903-34b347244e35
6d831ec3-1bb3-48bd-b5c2-2582ae017c49
c9ebc3ba-0b56-44e6-aa5b-2f592dbfbbb3
ESP8266 радио онлайн_1.2
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3
Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266.
Некоторые радиостанции(не проверены):
http://kpradio.hostingradio.ru:8000/
http://radio.horoshee.fm:8000/mp3
http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3
http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://music.myradio.ua/rep128.mp3
http://jazz.streamr.ru/jazz-128.mp3
http://87.110.219.34:8000/swhmp3
http://87.110.219.34:8000/plusmp3
http://91.90.255.111:80/MixFM_96
https://nashe1.hostingradio.ru:18000/nashe20-64.mp3
http://jazz.streamr.ru/jazz-64.mp3
803
Buff
2048
da5d8133-740a-42e7-85d4-8faa46a5da7a
5120
aa8d1ea8-4112-4431-96f1-294744687bd7
if (ON) {
if (newUrl) {
newUrl = false;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
}
540
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
70
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
newUrl
= true;
bool
rs_str
[60];
char
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();
406
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();
285
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
348
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
350
newUrl
f4b8e8bb-1ad6-444f-9e89-b843626c648e
4d16261b-d172-4206-9aff-211fdf3bf018
df402981-0392-45e3-b0d0-c955bc066042
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
//newUrl= true;
85
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
ESP_RADIO_onlinе_1.4.1
Buff
fc1de471-3bcb-49fc-a916-4bc82b7c5416
10c7d5a2-bb3f-42a1-a351-72272e17ec23
6b67b80c-ef1b-4323-9d5b-dc7f3b48b8ce
ESP8266 радио онлайн_1.4.1
if (newUrl)
{
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
523
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
d98ac68c-07f9-4f99-bb06-0507552287fd
ESP8266 радио онлайн_5.2
if (EN)
{
if (newUrl)
{ out = NULL;
if (mp3) {
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff) {
buff->close();
delete buff;
buff = NULL;
}
if (file) {
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
}
754
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
342
En
ESP8266_WiFi_RADIO_1
Volume
8f4922e6-0057-4ebb-906c-37a0ffc05631
b57e0b99-4d41-47e2-9b12-ebdc99d487d6
ba51b723-7e15-4ae6-a90f-feaeb14d0e9e
ESP8266 WiFi радио_1
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain((float)Volume);
Serial.printf_P(PSTR("Set volume: %d\n"), volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
Serial.flush();
}
}
else {
Serial.printf("MP3 done\n");
restartURL = true;
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
1018
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
r_stop
= false;
bool
ESP8266_WiFi_Radio_izm1
ESP8266_WiFi_Radio_izm
next_rs
e2069a2f-0d57-48c3-a07c-4af8d9c3dbc9
ec1e3a0d-0d4a-4f41-bd7a-509fd8ec1616
c3c89ca6-6a68-476d-8367-7dd2e485fd30
ESP8266 WiFi Pадио_izm
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции
newUrl - запуск установленной радиостанции, (импульсный сигнал)
Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266.
Volume - уровень сигнала с выхода RX
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше ,
чтобы не заикался. И уровень WiFi сети должна быть хорошей.
813
time
1000
250
039e50ce-87e6-4833-97ea-74c6042e5e57
2000
451739f7-8170-44db-bc23-391e41094018
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
1252
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
status_radio
517e1f77-84c4-47eb-981e-513050ece78b
11b3ac28-d0e1-4e61-9517-febaf9c4e202
295fb095-2437-4d0c-ac26-fd2871558b63
ESP8266 WiFi Pадио_izm1
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции
newUrl - запуск установленной радиостанции, (импульсный сигнал)
Buff - буфер 2048, лучше 4096 или до 8196, выбирать в зависимости от памяти ESP8266.
Volume - уровень сигнала с выхода RX
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше ,
чтобы не заикался. И уровень WiFi сети должна быть хорошей.
937
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
status_radio = 1;
}
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
status_radio = 0;
printRun=true;
}
1265
singl_name
6540ef35-f930-44e0-a72f-5a1ea09bb305
ac42743e-184c-42a3-85c8-89493bee1b12
17c1c10f-7b8b-4021-9cbc-647e5f4c8a22
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
1431
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
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();
if (String(s1)=="StreamTitle") {
singl_name = s2;
}
482
void
MDCallback
void
*cbData
const char
*type
bool
isUnicode
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
StatusCallback
void
*cbData
int
code
const char
*string
907a7a62-91e9-4fe4-a97c-982281e88732
ESP8266 WiFi РАДИО
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
Выход звука на пинах ESP8266 GND и TX. Можно напрямую подключить наушники. Звук только моно.
Входы:
En - вкл и выкл блока;
radiostation - URL радиостанции;
newUrl - запуск установленной радиостанции, (импульсный сигнал);
Buff - буфер от 2048, я ставил 4096 , выбирать в зависимости от памяти ESP8266;
Volume - уровень сигнала с выхода RX.
Выходы:
status_radio - состояние радио, если включено true, иначе - false;
next_rs - появится импульс при сбое или включении неработающей р/станции.
singl_name - вывод имени исполнителя и трека.
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте URL не более 128, лучше еще меньше ,
если заикается часто. И уровень WiFi сети должна быть хорошей. Проверял URL с битрейт 320,
у меня радио работало хорошо!
aidar_i
03/2019
1339
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
1602
system_update_cpu_freq(SYS_CPU_160MHZ);
Serial.begin(115200);
64
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[300], s2[300];
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();
if (String(s1)=="StreamTitle") {
singl_name = s2;
}
484
ESP8266_WiFi_RADIO_I2S
59ebb734-9440-4d14-8ff0-bf5e62078704
ESP8266 WiFi РАДИО_I2S (PCM5102)
Проигрывание радиостанций с помощью ESP8266 по wi fi, c использованием дополнительной платы РСМ5102. Стерео! Качество звука отличное, исчезают помехи.
Подключение:
ESP8266
ESP pin - I2S PCM5102
--------------------------------------
GPIO2 (D4) -> LRCK
GPIO3 (RX) -> DATA
GPIO15(D8) -> BCLK
В скобках Wemos D1 mini и тп.
Входы:
En - вкл и выкл блока;
radiostation - URL радиостанции;
newUrl - запуск установленной радиостанции, (импульсный сигнал);
Buff - буфер 2048, я ставил 4096 , выбирать в зависимости от памяти ESP8266;
Volume - уровень сигнала с выхода.
Выходы:
status_radio - состояние радио, если включено true, иначе - false;
next_rs - появится импульс при сбое или включении неработающей р/станции.
singl_name - вывод имени исполнителя и трека.
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше ,
чтобы не заикался. И уровень WiFi сети должна быть хорошей.
1399
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2S();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
1597
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2S.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2S
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
ESP8266_WiFi_RADIO_SPIRAM
3c2717a0-5638-48ea-8046-d1e2337f9c10
ESP8266 WiFi РАДИО с внешней памятью
Проигрывание радиостанций с помощью только ESP8266 по wi fi, с дополнительной внешней памятью на микросхеме 23LC1024-ISN. Дополнительная память уменьшает количество перебоев, также радио работает еще 7-8 сек после сбоя (выключения) WiFi сети.
Выход звука на пинах ESP8266 GND и TX. Можно напрямую подключить наушники. Звук только моно.
Входы:
En - вкл и выкл блока;
radiostation - URL радиостанции;
newUrl - запуск установленной радиостанции, (импульсный сигнал);
Buff - размер буфера в доп памяти выбираем 128KByte (131072 байта);
Volume - уровень сигнала с выхода RX.
Выходы:
status_radio - состояние радио, если включено true, иначе - false;
next_rs - появится импульс при сбое или включении неработающей р/станции.
singl_name - вывод имени исполнителя и трека.
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
pin_Cs - подключение 1 вывода микросхемы памяти. По умолчанию GPIO 4 (D2).
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте URL не более 128, лучше еще меньше ,
если заикается часто. И уровень WiFi сети должна быть хорошей. Проверял URL с битрейт 320,
у меня радио работало хорошо!
aidar_i
03/2019
1560
pin_Cs
4
CS (1 вывод микросхемы)
08291e5b-0149-4c68-9cc8-1b5b55e8f7e5
e33137e9-69c5-42cf-999e-9a1574fd1d61
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceSPIRAMBuffer(file, pin_Cs, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
1616
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceSPIRAMBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceSPIRAMBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
ESP8266_WiFi_RADIO_I2S_SPIRAM
ESP_RADIO_onlinе_5.2
EN
583cb09d-a9c7-4119-8d90-ae6324e00899
02cb4dcb-1316-462f-a232-67875efbf524
ESP_RADIO_onlinе_1.2
ESP8266 RADIO
ON
8389aad5-e0af-485a-9899-94cd2fd21899
fbdbd2db-8fae-48af-921c-4bea960effdc
f2d97d12-ebdf-4f30-889d-ef3ea6a53ddf
ESP8266 RADIO
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
Вход network - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3
Папраметры: length_str - длина строки, принят 30.
network - название точки доступа на ESP8266, я назвал esp_radio, можете поменять.
При подключении ESP8266 к питанию создается точка доступа esp_radio, при подключении к нему открывается в веб браузере страница, в котором нужно поставить название вашей wi fi сети и пароль, ESP подключится к нему и заработает радио по умолчанию.
Некоторые радиостанции:
http://kpradio.hostingradio.ru:8000/
http://radio.horoshee.fm:8000/mp3
http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3
http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://music.myradio.ua/rep128.mp3
http://jazz.streamr.ru/jazz-128.mp3
http://87.110.219.34:8000/swhmp3
http://87.110.219.34:8000/plusmp3
http://91.90.255.111:80/MixFM_96
https://nashe1.hostingradio.ru:18000/nashe20-64.mp3
http://jazz.streamr.ru/jazz-64.mp3
radiostation
jazz.streamr.ru/jazz-64.mp3h
2d2ef667-20e6-4931-b1de-e514800489e2
322a8bbb-7673-49ef-aa15-16e7e13454fd
if (ON) {
if (newUrl) {newUrl = false;
AUDIO_init();
}
handleAudio();
}
system_update_cpu_freq(SYS_CPU_160MHZ);
Serial.begin(115200);
#include
<Arduino.h>
*URL
= radiostation;
#include <ESP8266WiFi.h>
#include "AudioFileSourceICYStream.h"
#include "AudioFileSourceBuffer.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
const char
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
newUrl
= true;
bool
const char *ptr = reinterpret_cast<const char *>(cbData);
(void) isUnicode;
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();
void
MDCallback
void
*cbData
const char
*type
bool
isUnicode
const char
*string
const char *ptr = reinterpret_cast<const char *>(cbData);
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
StatusCallback
void
*cbData
int
code
const char
*string
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
void
handleAudio
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, 4096);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
void
AUDIO_init
radiostation
b8cb5e21-2cae-4448-8903-34b347244e35
6d831ec3-1bb3-48bd-b5c2-2582ae017c49
c9ebc3ba-0b56-44e6-aa5b-2f592dbfbbb3
ESP8266 радио онлайн_1.2
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции, по умолчанию http: //jazz.streamr.ru/jazz-64.mp3
Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266.
Некоторые радиостанции(не проверены):
http://kpradio.hostingradio.ru:8000/
http://radio.horoshee.fm:8000/mp3
http://kpradio.hostingradio.ru:8000/russia.radiokp128.mp3
http://fomenkofm.hostingradio.ru:8002/fomenkoradio128.mp3
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://music.myradio.ua/rep128.mp3
http://jazz.streamr.ru/jazz-128.mp3
http://87.110.219.34:8000/swhmp3
http://87.110.219.34:8000/plusmp3
http://91.90.255.111:80/MixFM_96
https://nashe1.hostingradio.ru:18000/nashe20-64.mp3
http://jazz.streamr.ru/jazz-64.mp3
Buff
da5d8133-740a-42e7-85d4-8faa46a5da7a
aa8d1ea8-4112-4431-96f1-294744687bd7
if (ON) {
if (newUrl) {
newUrl = false;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
}
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
newUrl
= true;
bool
rs_str
[60];
char
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();
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();
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
newUrl
f4b8e8bb-1ad6-444f-9e89-b843626c648e
4d16261b-d172-4206-9aff-211fdf3bf018
df402981-0392-45e3-b0d0-c955bc066042
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
//newUrl= true;
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
ESP_RADIO_onlinе_1.4.1
Buff
fc1de471-3bcb-49fc-a916-4bc82b7c5416
10c7d5a2-bb3f-42a1-a351-72272e17ec23
6b67b80c-ef1b-4323-9d5b-dc7f3b48b8ce
ESP8266 радио онлайн_1.4.1
if (newUrl)
{
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
system_update_cpu_freq(SYS_CPU_160MHZ);
//Serial.begin(115200);
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
d98ac68c-07f9-4f99-bb06-0507552287fd
ESP8266 радио онлайн_5.2
if (EN)
{
if (newUrl)
{ out = NULL;
if (mp3) {
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff) {
buff->close();
delete buff;
buff = NULL;
}
if (file) {
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
}
handleAudio();
}
static int lastms = 0;
if (mp3->isRunning()) {
if (millis()-lastms > 1000) {
lastms = millis();
Serial.printf("Running for %d ms...\n", lastms);
Serial.flush();
}
if (!mp3->loop()) mp3->stop();
} else {
Serial.printf("MP3 done\n");
delay(1000);
Serial.printf("Buffering restart");
ESP.restart();
}
En
ESP8266_WiFi_RADIO_1
Volume
8f4922e6-0057-4ebb-906c-37a0ffc05631
b57e0b99-4d41-47e2-9b12-ebdc99d487d6
ba51b723-7e15-4ae6-a90f-feaeb14d0e9e
ESP8266 WiFi радио_1
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain((float)Volume);
Serial.printf_P(PSTR("Set volume: %d\n"), volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
Serial.flush();
}
}
else {
Serial.printf("MP3 done\n");
restartURL = true;
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
#include
<Arduino.h>
#include
<ESP8266WiFi.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
r_stop
= false;
bool
ESP8266_WiFi_Radio_izm1
ESP8266_WiFi_Radio_izm
next_rs
e2069a2f-0d57-48c3-a07c-4af8d9c3dbc9
ec1e3a0d-0d4a-4f41-bd7a-509fd8ec1616
c3c89ca6-6a68-476d-8367-7dd2e485fd30
ESP8266 WiFi Pадио_izm
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции
newUrl - запуск установленной радиостанции, (импульсный сигнал)
Buff - буфер 2048, лучше 4096 или 8196, выбирать в зависимости от памяти ESP8266.
Volume - уровень сигнала с выхода RX
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше ,
чтобы не заикался. И уровень WiFi сети должна быть хорошей.
time
039e50ce-87e6-4833-97ea-74c6042e5e57
451739f7-8170-44db-bc23-391e41094018
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
status_radio
517e1f77-84c4-47eb-981e-513050ece78b
11b3ac28-d0e1-4e61-9517-febaf9c4e202
295fb095-2437-4d0c-ac26-fd2871558b63
ESP8266 WiFi Pадио_izm1
Проигрывание радиостанций с помощью только ESP8266 по wi fi, без дополнительных плат!
radiostation - URL радиостанции
newUrl - запуск установленной радиостанции, (импульсный сигнал)
Buff - буфер 2048, лучше 4096 или до 8196, выбирать в зависимости от памяти ESP8266.
Volume - уровень сигнала с выхода RX
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте не более 128, лучше еще меньше ,
чтобы не заикался. И уровень WiFi сети должна быть хорошей.
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
delete mp3;
delete buff;
delete file;
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
status_radio = 1;
}
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
status_radio = 0;
printRun=true;
}
singl_name
6540ef35-f930-44e0-a72f-5a1ea09bb305
ac42743e-184c-42a3-85c8-89493bee1b12
17c1c10f-7b8b-4021-9cbc-647e5f4c8a22
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
buff = new AudioFileSourceBuffer(file, Buff);
out = new AudioOutputI2SNoDAC();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2SNoDAC.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceBuffer
*out
;
AudioOutputI2SNoDAC
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
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();
if (String(s1)=="StreamTitle") {
singl_name = s2;
}
void
MDCallback
void
*cbData
const char
*type
bool
isUnicode
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
StatusCallback
void
*cbData
int
code
const char
*string
27663be8-6f0b-40e3-863a-4f3c798c4d9d
ESP8266 WiFi РАДИО с внешней памятью и I2S (PCM5102)
Проигрывание радиостанций с помощью ESP8266 по wi fi, с дополнительной внешней памятью на микросхеме 23LC1024-ISN и платой АЦП РСМ5102.
Дополнительная память уменьшает количество перебоев, также радио работает еще 7-8 сек после сбоя (выключения) WiFi сети.
C PCM5102. Стерео! Качество звука отличное, исчезают помехи. Разгружается ESP8266.
Входы:
En - вкл и выкл блока;
radiostation - URL радиостанции;
newUrl - запуск установленной радиостанции, (импульсный сигнал);
Buff - размер буфера в доп памяти выбираем 128KByte (131072 байта);
Volume - уровень сигнала с выхода RX.
Выходы:
status_radio - состояние радио, если включено true, иначе - false;
next_rs - появится импульс при сбое или включении неработающей р/станции.
singl_name - вывод имени исполнителя и трека.
Параметры:
time - время через которое появится импульс на выходе next_rs при сбое или включении неработающей р/станции.
pin_Cs - подключение 1 вывода микросхемы памяти. По умолчанию GPIO 4 (D2).
Некоторые радиостанции (проверены, можно скопировать отсюда):
http://icecast.russkoeradio.cdnvideo.ru:8000/rr_m.mp3
http://jazz.streamr.ru/jazz-64.mp3
http://stream0.radiostyle.ru:8000/rapicom
http://nashe1.hostingradio.ru/rock-256
http://91.190.117.131:8000/live
http://online.radiorecord.ru:8102/sd90_128
http://icecast.vgtrk.cdnvideo.ru/kulturafm_mp3_128kbps
Цифры в конце URL (128kbps, 256) битрейт , ставьте URL не более 128, лучше еще меньше ,
если заикается часто. И уровень WiFi сети должна быть хорошей. Проверял URL с битрейт 320,
у меня радио работало хорошо!
aidar_i
03/2019
1562
pin_Cs
CS (1 вывод микросхемы)
08291e5b-0149-4c68-9cc8-1b5b55e8f7e5
e33137e9-69c5-42cf-999e-9a1574fd1d61
if (En)
{r_stop=true;
if (newUrl || restartURL)
{ restartURL=false;
next_rs=false;
out = NULL;
singl_name = "";
if (mp3)
{
mp3->stop();
delete mp3;
mp3 = NULL;
}
if (buff)
{
buff->close();
delete buff;
buff = NULL;
}
if (file)
{
file->close();
delete file;
file = NULL;
}
radiostation.toCharArray(rs_str, radiostation.length()+1);
URL=rs_str;
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceSPIRAMBuffer(file, pin_Cs, Buff);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2S();
out->SetGain(((float)Volume)/100.0);
Serial.printf_P(PSTR("Set Volume: %d\n"), Volume);
mp3 = new AudioGeneratorMP3();
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
printRun=true;
printRun1=true;
}
if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop();
if (printRun ) {
printRun=false;
Serial.printf("Radio = play\n");
}
status_radio = true;
}
else { if (printRun1 ) {
printRun1=false;
Serial.printf("MP3 done\n");
}
if (millis()-lastms > time) {
lastms = millis();
next_rs= true;
restartURL = true;
}
}
}
else { status_radio = false;
if (r_stop) {
r_stop=false;
Serial.printf("Radio = stop\n");
printRun=true;
}
}
1611
system_update_cpu_freq(SYS_CPU_160MHZ);
Serial.begin(115200);
#include
<Arduino.h>
#include
"AudioFileSourceICYStream.h"
#include
"AudioFileSourceSPIRAMBuffer.h"
#include
"AudioGeneratorMP3.h"
#include
"AudioOutputI2S.h"
*mp3
;
AudioGeneratorMP3
*file
;
AudioFileSourceICYStream
*buff
;
AudioFileSourceSPIRAMBuffer
*out
;
AudioOutputI2S
*URL
= "";
const char
rs_str
[60];
char
restartURL
=true;
bool
printRun
=false;
bool
printRun1
=false;
bool
r_stop
= false;
bool
lastms
= 0;
static int
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[300], s2[300];
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();
if (String(s1)=="StreamTitle") {
singl_name = s2;
}
ESP8266RADIO
9a12ed04-b635-43b0-852a-85d95557133f