Интернет радиоприемник на ESP32

Тема в разделе "ESP8266, ESP32", создана пользователем rv9c, 26 апр 2018.

  1. Airbus

    Airbus Радиохулиган Модератор

    Не устраивает маленький дисплей.С остальным всё замечательно!аас не принципиально для меня,всегда есть аналоги на МР3.
     
  2. Boryan_R

    Boryan_R Гик

    А вот это очень херово..я по дисплей..народ в основном кто вашим радио интересуется в годах..и смотреть на мизерный дисплей фигово...а молодёжи это радио по боку...у них смартфоны..им этого хватает.
    Тем более я уже писал какой дисплей всех устроит..может вы пропустили это..
    Более того в открытом и халявном проекте карадио 32 автор моментом поддержку этого дисплея реализовал...а у вас проект за деньги, а вы пожелания клиентов не хотите делать...это очень плохо...так не долго и умереть проекту.
     
  3. Boryan_R

    Boryan_R Гик

    Прилетели дисплеи 1.3" разница с 0.96 очевидна. В принципе почти совместим с 0,96 ...изображение сдвинуто влево на пару-тройку пикселей, а в остальном совместим с SSD1306...Чуток подправить код и можно использовать его....Но автору rv9C пофиг на мои предложения и просьбы по поводу добавления этого дисплея...Уже какое обращение попусту игнорит...жаль!!! В карадио32 есть поддержка этого дисплея он на фото в работе
    [​IMG]
    [​IMG]

    [​IMG]
     
    Последнее редактирование: 17 дек 2018
    AlexZander нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Чтобы понять и полюбить автора - сделайте сами какой-нибудь проект. Чтобы был таким-же востребованным. И все станет ясно.
     
    Алексей.А и parovoZZ нравится это.
  5. Boryan_R

    Boryan_R Гик

    походу ни как ..вроде там все работает...да и чего туда добавлять?
     
  6. nvitek

    nvitek Нерд

    Вариация примера выше. у меня работает намного стабильнее...
    С приаттаченной либой, работает отлично, если скомпилировать с другими, икает.
    не вникал почему. может кому интересно будет
    Код (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];
    }
     
     

    Вложения:

  7. stich38

    stich38 Нуб

    Здравствуйте перезалейте ссылку пожалуйста
     
  8. rv9c

    rv9c Гик

    Тут все есть https://esp-radio.ru/iradio/
     
  9. noevile

    noevile Гик

  10. rought

    rought Нуб

    Валялся у меня без дела монохромный oled дисплей 2,42" на контроллере ssd1309. Так, чтобы его в этом радио задействовать с ПО ничего делать не нужно. Подключается по I2C, CS - на "землю", RES - подтягивающий резистор на 4,7 к на VCC и конденсатор 1мк на "землю". С таким крупным экраном приемник будет смотреться солиднее и информация будет легко читаема, фото прилагаю. А теперь о грустном: На печатной плате, да и в принципиальной схеме приемника на esp32 закралась ошибка - попутаны местами пины питания и "земли" приемника (на плате 2-й пин - "земля", 1-й - VCC, тогда как на дисплее всё наоборот. При таком подключении дисплей работать не будет, мало того, есть риск его выхода из строя. Так же, на присланной мне печатной плате приемника было нарушено соединение 2-й ноги esp32 с питанием 3,3 v. В итоге, от использования этой печатной платы пришлось отказаться. На фото приемник собран на макетной плате.
     

    Вложения:

    • IMAG0144.jpg
      IMAG0144.jpg
      Размер файла:
      1,5 МБ
      Просмотров:
      687
  11. kiv69

    kiv69 Гик

    Что полностью убивает проект
    Надо было на что-то побольше сразу делать, эти микроскопические ssd1306 вообще ни о чём.
    Валяется пару штук и как-то совсем неохота на них что-то делать, просто зрение жалко.
     
  12. noevile

    noevile Гик

    Я вот смотрю все с бубном пляшут вокруг кода earlephilhower. А что мешает взять код schreibfaul1? Как по мне так он нормально работает без затыков и хавает как MP3 так и AAC без VS1053B. Там вообще всё общение с библиотекой заключается просто подсунуть ссылку на станцию.
     
  13. rought

    rought Нуб

    Выше, прямо над этим Вашим постом, я говорил, что, практически без доработки, можно в этом проекте использовать 2,42" oled дисплей на контроллере ssd1309. У меня он работает. При этом никаких изменений в программном обеспечении приемника делать нет необходимости.
     
  14. AlexZander

    AlexZander Нерд

    А где берут эти дисплеи? Дисплей в конструкции нужен не только крупнее, но и доступный и за вменяемые гроши.
     
  15. rought

    rought Нуб

    Там же где и всё остальное - на АлиЭкспресс. АлиЭкспресс - Forever and ever! А Вы где берёте?
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Кстати да.Смотрел код-надо попробовать.
     
  17. wall-e

    wall-e Нуб

    Подскажите ,какой Пин используется для вывода звука ?кнопка управления одна получается?А как радиостанции добавлять-если есть такая возможность.
     
  18. noevile

    noevile Гик

    там единственное инфы маловато о текушем статусе. типа чего в данный момент происходит. а в целом в принципе удобно просто кидать ссылку и нажимать кнопу "плей".
     
  19. А можно ссылочки на остальные библиотеки данного проекта? У меня не компилится, IDE выдает кучу ошибок. Похоже, что мои библиотеки не стыкуются с этим проектом.
     
  20. noevile

    noevile Гик

    У earlephilhower касяк в примере. Он ни у кого не работает. Где-то там https://esp-radio.ru/iradio/, лежит пример esp-radio-mini. Он основан earlephilhower. А для schreibfaul1 ничего не надо. Просто скачать, установить и запустить пример.
     
  21. Выдает ошибку на стадии компиляции библиотек, до скетча даже не доходит
    Вот одна из ошибок:
    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) );