Не устраивает маленький дисплей.С остальным всё замечательно!аас не принципиально для меня,всегда есть аналоги на МР3.
А вот это очень херово..я по дисплей..народ в основном кто вашим радио интересуется в годах..и смотреть на мизерный дисплей фигово...а молодёжи это радио по боку...у них смартфоны..им этого хватает. Тем более я уже писал какой дисплей всех устроит..может вы пропустили это.. Более того в открытом и халявном проекте карадио 32 автор моментом поддержку этого дисплея реализовал...а у вас проект за деньги, а вы пожелания клиентов не хотите делать...это очень плохо...так не долго и умереть проекту.
Прилетели дисплеи 1.3" разница с 0.96 очевидна. В принципе почти совместим с 0,96 ...изображение сдвинуто влево на пару-тройку пикселей, а в остальном совместим с SSD1306...Чуток подправить код и можно использовать его....Но автору rv9C пофиг на мои предложения и просьбы по поводу добавления этого дисплея...Уже какое обращение попусту игнорит...жаль!!! В карадио32 есть поддержка этого дисплея он на фото в работе
Чтобы понять и полюбить автора - сделайте сами какой-нибудь проект. Чтобы был таким-же востребованным. И все станет ясно.
Вариация примера выше. у меня работает намного стабильнее... С приаттаченной либой, работает отлично, если скомпилировать с другими, икает. не вникал почему. может кому интересно будет Код (C++): #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]; }
Валялся у меня без дела монохромный oled дисплей 2,42" на контроллере ssd1309. Так, чтобы его в этом радио задействовать с ПО ничего делать не нужно. Подключается по I2C, CS - на "землю", RES - подтягивающий резистор на 4,7 к на VCC и конденсатор 1мк на "землю". С таким крупным экраном приемник будет смотреться солиднее и информация будет легко читаема, фото прилагаю. А теперь о грустном: На печатной плате, да и в принципиальной схеме приемника на esp32 закралась ошибка - попутаны местами пины питания и "земли" приемника (на плате 2-й пин - "земля", 1-й - VCC, тогда как на дисплее всё наоборот. При таком подключении дисплей работать не будет, мало того, есть риск его выхода из строя. Так же, на присланной мне печатной плате приемника было нарушено соединение 2-й ноги esp32 с питанием 3,3 v. В итоге, от использования этой печатной платы пришлось отказаться. На фото приемник собран на макетной плате.
Что полностью убивает проект Надо было на что-то побольше сразу делать, эти микроскопические ssd1306 вообще ни о чём. Валяется пару штук и как-то совсем неохота на них что-то делать, просто зрение жалко.
Я вот смотрю все с бубном пляшут вокруг кода earlephilhower. А что мешает взять код schreibfaul1? Как по мне так он нормально работает без затыков и хавает как MP3 так и AAC без VS1053B. Там вообще всё общение с библиотекой заключается просто подсунуть ссылку на станцию.
Выше, прямо над этим Вашим постом, я говорил, что, практически без доработки, можно в этом проекте использовать 2,42" oled дисплей на контроллере ssd1309. У меня он работает. При этом никаких изменений в программном обеспечении приемника делать нет необходимости.
А где берут эти дисплеи? Дисплей в конструкции нужен не только крупнее, но и доступный и за вменяемые гроши.
Подскажите ,какой Пин используется для вывода звука ?кнопка управления одна получается?А как радиостанции добавлять-если есть такая возможность.
там единственное инфы маловато о текушем статусе. типа чего в данный момент происходит. а в целом в принципе удобно просто кидать ссылку и нажимать кнопу "плей".
А можно ссылочки на остальные библиотеки данного проекта? У меня не компилится, IDE выдает кучу ошибок. Похоже, что мои библиотеки не стыкуются с этим проектом.
У earlephilhower касяк в примере. Он ни у кого не работает. Где-то там https://esp-radio.ru/iradio/, лежит пример esp-radio-mini. Он основан earlephilhower. А для schreibfaul1 ничего не надо. Просто скачать, установить и запустить пример.
Выдает ошибку на стадии компиляции библиотек, до скетча даже не доходит Вот одна из ошибок: C:\Users\Nemo\Documents\Arduino\libraries\ESP32-audioI2S-master\src\Audio0.cpp:767:65: error: 'min' was not declared in this scope uint x = min( m_count , uint32_t(bytesCanBeWritten) );