Hirdetés
- Vodafone mobilszolgáltatások
- Samsung Galaxy A40 - középkezdés
- Érkezik Magyarországra a Vivo, elsők közt kezünkben új csúcsmodelljeik
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Poco X6 Pro - ötös alá
- Milyen okostelefont vegyek?
- Milyen hagyományos (nem okos-) telefont vegyek?
- Megérkezett a Google Pixel 7 és 7 Pro
- Android alkalmazások - szoftver kibeszélő topik
- Samsung Galaxy S23 Ultra - non plus ultra
Új hozzászólás Aktív témák
-
bagarol
junior tag
Egyszerű webrádió esp32-vel, nem kell hozzá külső alkatrész. Mono, belső DAC, kijelző nélkül.
Soros konzolon lehet beírni a rádió címét, egyből elkezdi lejátszani, stop-ra leáll, lehet új címet megadni. DAC2-őn (gpio26) adja ki a jelet.Nekem konyhába így is megfelel, persze kijelzővel + egyebek, úgy értem, hogy mono, belső dac. Az esp8266audio[link] library kell hozzá.
Ellenőrizni nem tudtam,nincs most esp32-m, remélem működik.#include <WiFi.h>
#include <AudioFileSource.h>
#include <AudioFileSourceBuffer.h>
#include <AudioFileSourceICYStream.h>
#include <AudioGeneratorMP3.h>
#include <AudioOutputI2S.h>const char* ssid = "";
const char* password = "";
String s;
char URL[96];
const int preallocateBufferSize = 32*1024;
const int preallocateCodecSize = 29192;
void *preallocateBuffer = NULL;
void *preallocateCodec = NULL;
AudioGeneratorMP3 *mp3;
AudioFileSourceICYStream *file;
AudioFileSourceBuffer *buff;
AudioOutputI2S *out;void setup() {
preallocateBuffer = malloc(preallocateBufferSize);
if (!preallocateBuffer) {
Serial.begin(115200);
Serial.printf_P(PSTR("FATAL ERROR: Unable to preallocate %d bytes for app\n"), preallocateBufferSize);
while (1) delay(1000);
}
Serial.begin(115200);
initwifi();
Serial.printf("STATUS(System) Ready \n\n");
out = new AudioOutputI2S(0, 1);
out->SetOutputModeMono(true);
out->SetGain(0.5);
}void loop() {
if(Serial.available()){
s = Serial.read();
if(s == "stop") StopPlaying();
else if(s.startsWith("http://")) {
s.trim();
s.toCharArray(URL,s.length()+1);
StartPlaying();
}
}
}void StartPlaying() {
file = new AudioFileSourceICYStream(URL);
file->RegisterMetadataCB(MDCallback, (void*)"ICY");
buff = new AudioFileSourceBuffer(file, preallocateBuffer, preallocateBufferSize);
buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
out = new AudioOutputI2S(0, 1);
out->SetOutputModeMono(true);
out->SetGain(0.5);
mp3 = new AudioGeneratorMP3(preallocateCodec, preallocateCodecSize);
mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
mp3->begin(buff, out);
Serial.printf("STATUS(URL) %s \n", URL);
Serial.flush();
}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;
}
Serial.printf("STATUS(Stopped)\n");
Serial.flush();
}void initwifi() {
WiFi.disconnect();
WiFi.softAPdisconnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Connecting to WiFi");
delay(1000);
}
Serial.println("Connected to WiFi");
}void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string) {
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 StatusCallback(void *cbData, int code, 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();
}[ Szerkesztve ]
-
bagarol
junior tag
válasz bimbula53 #29 üzenetére
Ma szórakoztam egy kicsit 8266-al, ezt kötöttem rá, csak az a baj, hogy 2k-nál nem
lehet nagyobb puffert állítani. Így kb 10 percenként 1-2 másodpercre megszakad.
Kíváncsi lennék esp32-vel. Most látom, rossz a kép, természetesen fordítva, digital to analóg.
[ Szerkesztve ]
-
-
bagarol
junior tag
Nem tudom, sikerült-e lekapcsolni a kijelzőt, de - megjegyzem, nem foglalkoztam még a yoradioval - nem tűnik bonyolultnak. Beírod a loop-ba
if ((millis() - lastmillis) > 30000)
{ display off } ;
else {display on};A rotary ISR-ben (yoEncoder.cpp) pedig lastmillis = millis();
Ez így elvileg fél perc. Természetesen nem display on-off, nem tudom a változókat.
Új hozzászólás Aktív témák
- Lg 27'' UltraGear OLED - 27GR95QE-B / Garancia 2027.05.15.
- LG 86QNED813RE / 86" - 217cm / 4K UHD / 120Hz & 4ms / AMD FeeSync / HDR Dolby Vision / HDMI 2.1
- LG 55G4 - 55" OLED evo - 4K 144Hz & 0.1ms - MLA Plus - 3000 Nits - NVIDIA G-Sync - FreeSync Premium
- LG 77G3 - 77" OLED evo - 4K 120Hz 0.1ms - MLA - 2000 Nits - NVIDIA G-Sync - AMD FreeSync - HDMI 2.1
- LG 77CS6 - 77" OLED - 4K 120Hz & 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - Szupervékony
Állásajánlatok
Cég: Ozeki Kft
Város: Debrecen
Cég: Ozeki Kft
Város: Debrecen