logo elektroda
logo elektroda
X
logo elektroda

Internet radio and audio file player on ESP32-S3

MAJSTER XXL 197271 2147
ADVERTISEMENT
Treść została przetłumaczona polish » english Zobacz oryginalną wersję tematu
📢 Listen (AI):
  • #1711 21761364
    Jarosław 1808
    Level 12  
    >>21761157 I am referring to this version.
  • ADVERTISEMENT
  • #1712 21761404
    DJCheester
    Level 27  
    Hi this version is created by kol Ejcon and I am currently struggling with it, I would love to provide you with a merged file but I don't know how to make one. The pseudo analyser I had also works lamely. There is no breakdown of real frequencies just some data values or voltages it displays and it feels like every 3 bars everything repeats, I don't recommend it.

    The other one is as cool as can be and works, after testing I find that unfortunately it only works (for now) from the website not from the remote.
    But colleague ejcon mentioned something that he will also check the remote control.

    At the moment it works as if the equalizer is overridden as it is displayed and other screens don't come in, well doing volume there is no subtitle and no bar. From the remote control so far it can't be switched on.

    Maybe colleague Robgold will integrate the kol ejcon code in his version then I think it would work.

    I'll continue testing tomorrow (if kol ejcona will help) and I'll keep going on about this software, because as far as the equalizer is concerned, Robgold's 3 point equalizer would be enough for me, and I'd care more only about the visualisation, because you don't set those sixteen sliders anyway, just more low medium high.

    Cool that this radio has grown to such a size, thanks a lot guys you are doing a MEGA job. Respect, for me some simple codes are still understandable, but such as these is already black magic.

    Best regards...
  • #1713 21761494
    Jarosław 1808
    Level 12  
    Hello.
    Such a file is created by Arduino if we give the command to export binary files.

    Added after 1 [minute]:

    BIN files of ESP32 project with visible version names and merged file indicators
  • #1714 21761694
    ejcon
    Level 15  
    Correction of pilot and analyser operation
    Change in analyser input gain jat here and appearance of bars

    Highlighted section of analyzer visualization code with Polish comments Checked pilot operation just arrived eq on and off AUD may not work if ACC or FLAC is on due to EQ automation. Volume on the eq works but the bar does not appear changes can be seen on the bar on the top left a little strange it would look like the bar would appear on the eq . Attached a set to control and set the equalizer on the page . Biharek not uploaded done at the time of compilation .As I wrote the bin names to the radio with and without amp . Operation from encoder volume and changing banks does not work I have to correct it.
  • #1715 21761697
    DJCheester
    Level 27  
    O later today I will be uploading and testing.

    I will let you know greetings....

    Added after 5 [hours] 1 [minutes]:

    Hello I uploaded the posts are at a good level with me. the remote no longer flashes with the volume screen on the analyzer. It would be fab only that to display the analyser you have to start the computer.

    Internet radio and audio file player on ESP32-S3

    To make it work you have to deselect both and then select the analyser only it is, when you run through all the screens from the remote control it is again a scatter of what I have previously inserted pictures of.

    And there is an inaccuracy in the volume from the remote 1-21 and from the page 1-42 which makes the radio play quieter as I wrote yesterday.
    From the page you can turn up the volume to 42 which is not possible on the radio from the remote control.

    And one last point: when using the remote control on the analyser, the display level of the bars decreases

    Greetings ...
  • ADVERTISEMENT
  • #1716 21762253
    ejcon
    Level 15  
    Starting the analyser only needs to be done once if it has been switched off on the website then it works from the remote control .Check if I am right .
  • #1717 21762257
    DJCheester
    Level 27  
    I don't have the analyser selected now, the radio after a power reset or even when I change the view then sequentially when the analyser is supposed to be there the view is scattered.

    Even when the stream breaks and I click OK to resume on the analyser stream the analyser view is scattered.

    Greetings ...
  • #1719 21762372
    DJCheester
    Level 27  
    Okay, but what do you use to turn the analyser over with what remote control button?

    I'm talking about this part

    Hand holding RC-406 remote pointing at audio device with display

    Greetings...
  • #1720 21762379
    ejcon
    Level 15  
    >>21762372 AUD Download video now I have corrected the hole for the remote control detector
  • #1721 21762389
    DJCheester
    Level 27  
    OK I'm downloading the video tomorrow I'll have a look at the daily I have declared this button, unless you have a skit to hand and can provide a line.

    Regards...

    Added after 11 [minutes]:

    Well you also have the scattered view, didn't you think to hide it somehow ?
    Well and the volume also clarified you have 20 in the middle of the bar.

    Well and in the background on the laptop my PovRay animation 😁 - Priceless 😀

    Greetings...
  • #1722 21763518
    ejcon
    Level 15  
    New version analyser and original without equalizer 16 two styles of analyser.
    For testing please give feedback. Posts to be edited out
    1. Gdzie to jest w kodzie
    
    W main_with_volume_analyzer_ok.cpp znajdź funkcję:
    
    void vuMeterMode5() // Tryb 5: 16 słupków – dynamiczny analizator z zegarem i ikonką głośnika
    
    
    Końcówka tej funkcji wygląda mniej więcej tak (to jest TEN fragment, który steruje wyglądem):
    
      // Linia oddzielająca pasek od słupków
      u8g2.drawHLine(0, 13, SCREEN_WIDTH);
    
      // Obszar słupków – od linii w dół do końca ekranu
      const uint8_t eqTopY      = 14;                    // pod paskiem
      const uint8_t eqBottomY   = SCREEN_HEIGHT - 1;     // do dołu
      const uint8_t eqMaxHeight = eqBottomY - eqTopY + 1;
    
      // 32 segmenty na wysokość
      const uint8_t maxSegments = 32;
      const float segmentStep = (float)eqMaxHeight / (float)maxSegments;
    
      // Parametry słupków – 16 sztuk na szerokość ekranu (prawie na całość)
      const uint8_t barWidth = 10;
      const uint8_t barGap   = 6;
    
      const uint16_t totalBarsWidth = EQ_BANDS * barWidth + (EQ_BANDS - 1) * barGap;
      int16_t startX = (SCREEN_WIDTH - totalBarsWidth) / 2;
      if (startX < 0) startX = 0;
    
      for (uint8_t i = 0; i < EQ_BANDS; i++)
      {
        uint8_t level = eqLevel[i];
        uint8_t peak  = eqPeak[i];
    
        // Ile segmentów zapalonych (0..32)
        uint8_t segCount = map(level, 0, 100, 0, maxSegments);
        uint8_t peakSeg  = map(peak,  0, 100, 0, maxSegments);
    
        uint8_t x = startX + i * (barWidth + barGap);
    
        // Segmenty – słupki z „klocków”
        for (uint8_t s = 0; s < segCount; s++)
        {
          int16_t segBottom = eqBottomY - (int16_t)(s * segmentStep);
          int16_t segTop    = segBottom - (int16_t)(segmentStep * 0.6f);
    
          if (segTop < eqTopY) segTop = eqTopY;
          if (segBottom < eqTopY) break;
    
          uint8_t segH = (segBottom - segTop + 1);
          if (segH < 1) segH = 1;
    
          u8g2.drawBox(x, segTop, barWidth, segH);
        }
    
        // Peak – cienka kreska nad słupkiem
        if (peakSeg > 0)
        {
          uint8_t ps = peakSeg - 1;
          int16_t peakBottom = eqBottomY - (int16_t)(ps * segmentStep);
          int16_t peakY      = peakBottom - 1;
          if (peakY >= eqTopY && peakY <= eqBottomY)
          {
            u8g2.drawBox(x, peakY, barWidth, 1);
          }
        }
      }
    
    
    To jest miejsce, gdzie zmieniasz „stylistykę”.
    
    2. Najważniejsze gałki
    
    Masz kilka podstawowych parametrów:
    
    const uint8_t maxSegments = 32;   // ile "klocków" w pionie
    const float segmentStep = (float)eqMaxHeight / (float)maxSegments;
    
    const uint8_t barWidth = 10;      // szerokość słupka
    const uint8_t barGap   = 6;       // przerwa między słupkami
    
    
    węższe słupki → zmniejszasz barWidth
    
    mniej/więcej przerw → zmieniasz barGap
    
    więcej "klocków" na wysokość → zwiększasz maxSegments (np. 40)
    
    bardziej ciągłe słupki → zamiast pętli po segmentach robisz jeden drawBox (patrz niżej)
    
    3. Przykład 1 – „ciągłe” słupki zamiast klocków
    
    Jeśli chcesz zwykłe prostokąty od dołu do góry, podmień środek pętli na coś takiego:
    
      for (uint8_t i = 0; i < EQ_BANDS; i++)
      {
        uint8_t level = eqLevel[i];
        uint8_t peak  = eqPeak[i];
    
        // wysokość słupka w pikselach
        uint8_t barHeight = map(level, 0, 100, 0, eqMaxHeight);
        uint8_t peakPix   = map(peak,  0, 100, 0, eqMaxHeight);
    
        uint8_t x = startX + i * (barWidth + barGap);
    
        // CIĄGŁY słupek: jeden prostokąt
        if (barHeight > 0)
        {
          int16_t yTop = eqBottomY - barHeight + 1;
          if (yTop < eqTopY) yTop = eqTopY;
    
          u8g2.drawBox(x, yTop, barWidth, barHeight);
        }
    
        // Peak jako cienka kreska
        if (peakPix > 0)
        {
          int16_t yPeak = eqBottomY - peakPix;
          if (yPeak >= eqTopY && yPeak <= eqBottomY)
          {
            u8g2.drawBox(x, yPeak, barWidth, 1);
          }
        }
      }
    
    
    Resztę (eqTopY, eqBottomY, barWidth, barGap) zostawiasz jak jest.
    
    Efekt: pełne słupki jak typowy analizator w wieży.
    
    4. Przykład 2 – cieńsze słupki, więcej „korony” na górze
    
    Chcesz styl „dużo słupków, wąskie kreski”? Zmień parametry:
    
    const uint8_t maxSegments = 40;  // więcej segmentów = wyższa rozdzielczość
    const uint8_t barWidth    = 6;   // węższe słupki
    const uint8_t barGap      = 4;   // trochę mniejszy odstęp
    
    
    I zostaw pętlę segmentową jak była – będziesz miał więcej cienkich klocków, bardziej „dyskotekowo”.
    
    Możesz też skrócić segmenty, żeby między nimi były przerwy (już teraz jest 0.6f):
    
    int16_t segTop = segBottom - (int16_t)(segmentStep * 0.4f);
    // 0.4f -> krótszy klocek, większa przerwa
    
    5. Przykład 3 – „odwrócone” słupki (ciemny słupek na jasnym tle)
    
    Na OLEDzie też można pobawić się tłem:
    
    Przed pętlą:
    
    // jasne tło pod słupkami
    u8g2.setDrawColor(1);
    u8g2.drawBox(0, eqTopY, SCREEN_WIDTH, eqMaxHeight);
    
    // słupki "dziury" – rysowane jako czarne
    u8g2.setDrawColor(0);
    
    
    A w pętli zamiast drawBox(...) możesz rysować „wycięty” prostokąt (czarny na białym tle).
    Na końcu (przed u8g2.sendBuffer()) ustaw z powrotem u8g2.setDrawColor(1); żeby napisy były normalne.
    
    6. Gdzie zmieniać styl 6
    
    vuMeterMode6() ma bardzo podobny kawałek – też pętla for (uint8_t i = 0; i < EQ_BANDS; i++) i rysowanie słupków tylko cieńszych.
    
    Zasada jest ta sama:
    
    szukasz w vuMeterMode6() miejsca, gdzie są:
    
    const uint8_t maxSegments = ...;
    const uint8_t barWidth    = ...;
    const uint8_t barGap      = ...;
    
    
    modyfikujesz tak samo jak w stylu 5 (szerokość, ilość segmentów, wzór na segTop / barHeight).
    
    Możesz np. zrobić:
    
    styl 5 – grube słupki ciągłe (jak z przykładu 3),
    
    styl 6 – cienkie segmenty „hi-res”.
    
    Jeśli powiesz mi konkretnie, jaki efekt chcesz (np. „bardzo wąskie słupki na całej szerokości” albo „słupki tylko na środku, reszta pusta”), mogę Ci dać gotowy fragment vuMeterMode5() już przerobiony pod ten wygląd, do wklejenia 1:1.
    
    Powiedziałeś(-aś):
    Teraz analizator przy volume do 6 słabo działa  gdzie moge to poprawic w kodzie 
    ChatGPT powiedział:
    Myślał przez 2m 5s
    
    To, co widzisz (że przy volume 0–6 analizator „słabo rusza”), jest do ustawienia w parametrach analizatora, nie w samym rysowaniu słupków.
    
    Masz trzy główne „gałki”:
    
    eqAnalyzerSensitivity – ogólna czułość
    
    AGC (eqAnalyzerAGC + ANALYZER_AGC_TARGET) – automatyczne wzmocnienie
    
    PreGain – czy analizator patrzy przed głośnością, czy po (czyli ma reagować na volume, czy nie)
    
    Pokażę Ci konkretnie, gdzie to ruszyć w Twoim kodzie.
    
    1. Najprostsze: podbij czułość analizatora
    
    W Twoim main.cpp masz taki fragment przy globalnych zmiennych (u Ciebie wygląda prawie 1:1 tak):
    
    // Runtime EQ / Analyzer globals (for AudioRuntimeEQ_Evo)
    bool eqEnabled = false;                        // DSP EQ off by default (only analyzer)
    bool eqAnalyzerEnabled = true;                 // enable FFT analyzer
    float eqBandGains[RUNTIME_EQ_BANDS] = {0.0f};  // 16-band EQ gains in dB (all 0dB)
    
    // Analyzer control globals required by AudioRuntimeEQ_Evo.cpp
    float eqAnalyzerSensitivity = DEFAULT_ANALYZER_SENSITIVITY;  // start from default sensitivity
    bool  eqAnalyzerPreGain     = true;                          // analyze signal before global volume
    bool  eqAnalyzerNormalize   = true;                          // enable input normalization
    bool  eqAnalyzerAGC         = true;                          // enable automatic gain control
    
    Zrób to tak:
    
    Na początek zmień linijkę z sensitivity na większą, np.:
    
    float eqAnalyzerSensitivity = 0.7f;   // było DEFAULT_ANALYZER_SENSITIVITY (0.3f)
    
    
    albo nawet:
    
    float eqAnalyzerSensitivity = 1.0f;
    
    
    Im wyższa wartość, tym większe słupki przy tym samym sygnale.
    Domyślne DEFAULT_ANALYZER_SENSITIVITY to 0.3f, więc nic dziwnego, że przy cichszych kawałkach i małym volume wygląda to „leniwie”.
    
    To jest najprostsza korekta: jedna liczba, kompilacja, gotowe.
    
    2. Czy analizator ma reagować na volume? (PreGain)
    
    Teraz tak:
    
    Teraz masz:
    
    bool eqAnalyzerPreGain = true;
    
    
    To znaczy, że analizator robi FFT na sygnale przed głośnością – czyli nie obchodzi go czy masz volume=3 czy 15, słupki zależą tylko od tego, co leci z radia.
    
    Jeśli chcesz, żeby przy małym volume słupki też były mniejsze, a przy dużym volume większe (czyli żeby zachowywał się bardziej jak VU zależne od gałki głośności) – zmień na:
    
    bool eqAnalyzerPreGain = false;
    
    
    Wtedy przy volume 0–6 faktycznie będzie „mniejszy”, ale skoro Ty mówisz, że przy 0–6 słabo działa, to raczej chcesz odwrotność:
    – więcej czułości, ale nadal niezależnie od gałki volume → zostaw true, podbij sensitivity jak wyżej.
    
    3. Dodatkowe pokrętła (jak będzie Ci mało)
    
    W AudioRuntimeEQ_Evo.h masz jeszcze stałe:
    
    static const float DEFAULT_ANALYZER_SENSITIVITY = 0.3f;
    // ...
    // ANALYZER_AGC_TARGET, ANALYZER_AGC_SPEED itd.
    
    
    Jeśli chcesz:
    
    mocniejsze „dopalenie” słabych sygnałów – możesz:
    
    podnieść DEFAULT_ANALYZER_SENSITIVITY (np. na 0.5–0.7),
    
    albo zostawić default, a w main.cpp i tak nadpisać eqAnalyzerSensitivity na większe (to, co pokazałem w pkt 1).
    
    bardziej agresywne AGC (szybsze dopasowanie, większe wzmocnienie) – w tym samym headerze znajdziesz ANALYZER_AGC_TARGET i ANALYZER_AGC_SPEED. Modyfikujesz:
    
    wyższy ANALYZER_AGC_TARGET → chce trzymać wyższy poziom słupków,
    
    mniejszy ANALYZER_AGC_SPEED → wolniej reaguje, większy → szybciej (ale może „pompować”).
    
    Na start naprawdę wystarczy:
    
    float eqAnalyzerSensitivity = 0.7f;   // albo 1.0f
    
    Co konkretnie zrób teraz
    
    W main_with_volume_analyzer_ok.cpp (lub aktualnym main.cpp) znajdź blok:
    
    float eqAnalyzerSensitivity = DEFAULT_ANALYZER_SENSITIVITY;
    bool  eqAnalyzerPreGain     = true;
    bool  eqAnalyzerNormalize   = true;
    bool  eqAnalyzerAGC         = true;
    
    
    Podmień pierwszą linijkę na:
    
    float eqAnalyzerSensitivity = 0.7f;   // albo dla testu 1.0f
    
  • #1723 21763757
    DJCheester
    Level 27  
    Hi sofcik uploaded from the remote everything works, thanks. Just write how you can hide / skip the last view, because I only need one analyzer this first one is nice.

    Greetings ...
  • #1724 21763763
    ejcon
    Level 15  
    At the top of the file you have something like this:

    #define displayModeMax 6 // Limiting the maximum number of modes


    Change to:

    #define displayModeMax 5 // Restriction of maximum number of modes (0..5)


    What it does:

    sRC button will only spin 0,1,2,3,4,5

    displayMode == 6 will never appear, so vuMeterMode6() will not get called either

    all the style 6 code is still in the program, but "hidden"

    If you ever want to go back to style 6, you just set it again:

    #define displayModeMax 6
  • ADVERTISEMENT
  • #1725 21764042
    QALAB
    Level 11  
    I installed the EQUALIZER Software for testing purposes.



  • #1726 21764080
    DJCheester
    Level 27  
    I also have this soft, it might be worth giving some other name so that it doesn't clash with Robgold's versions e.g. Web Radio with Bargraph....

    I would leave the version at the bottom because it is clear what version it was created from.

    Regards....

    Added after 3 [hours] 44 [minutes]:

    simw wrote:
    DJCheester wrote:
    Are these version portals not using the Arduino15 directory where the core is downloaded ?

    As far as I have been able to determine it does not, Arduino15 is created inside the directory.
    This is more or less what the tree looks like. The "Projects" directory I created myself.
    The whole thing takes up almost 7.4 GiB once I have adapted to compile version 3.19.33.

    Arduino folder structure with subfolders like Arduino15 and Projekty


    Hello

    Can a colleague provide a link from where he downloaded this version and if it is portals ?

    I am looking for the 2.1.1 portable version but on the Arduino website either there are no such old versions or I don't know how to search ?

    Greetings....
  • ADVERTISEMENT
  • #1728 21764747
    bolszoy
    Level 11  
    Colleagues I am at a loss. Why do we have 4 files, and how do we upload them (use them)? Thank you
  • #1729 21764750
    DJCheester
    Level 27  
    Via OTA you only upload the bin - the radio will boot as standard with the card
    If you want to mess around with the code, you have to copy the other three into one folder
    The compilation on the Arduino looks like this.
    You create a folder e.g. Analyzer-RadioESP
    Upload all three files there
    Rename the main.cpp file to Analyser-RadioESP.ino

    You start the ino the Arduino opens and there you already work normally.

    The name can be different as long as it is the same as the folder you created

    Greetings ...
  • #1730 21765235
    bolszoy
    Level 11  
    DJCheester wrote:
    Through OTA you upload only the bin - the radio will boot as standard with the card
    If you want to mess around with the code, you have to copy the other three into one folder
    The compilation on the Arduino looks like this.
    You create a folder e.g. Analyzer-RadioESP
    Upload all three files there
    Rename the main.cpp file to Analyser-RadioESP.ino

    You start the ino the Arduino opens and there you already work normally.

    The name can be different as long as it is the same as the folder you created

    Greetings ...



    Thank you .
  • #1731 21765866
    robgold
    Level 22  
    Hello,
    i have uploaded on GitHub the new soft 3.19.47, what's new ?

    SD SD and SPIFFS memory
    Now, by defining "USE_SD" we set whether the radio should use SD card or SPIFFS memory. No manual modifications in the code are needed.
    Code: C / C++
    Log in, to see the code


    ONE OR TWO encoders
    The same option is for using a second encoder. If we define "twoEncoders" the radio will be operated with two encoders according to the diagram below:
    Code: C / C++
    Log in, to see the code


    One encoder (as it has been so far):
    Option 1 - Volume, 1x click Stations, 1x click hold select Memory Bank, 1x click and super long hold Power ON/OFF (if we are in power OFF mode)
    Option 2 - Stations,1x click Volume, 1x click memory bank selection, 1x click and super long hold Power ON/OFF (if in power OFF mode)

    Two encoders:
    Encoder 2
    Volume, 1x mute, 1x click select memory bank, 1x click and super long hold Power OFF / Power ON
    Here you have to remember to save this order of encoder 2 in the settings, otherwise both encoders will open the station list

    Encoder 1
    Rotate - station list, 1x click memory bank selection, 1x click and super long hold Power OFF / Power ON

    Example1: SD card and second encoder enabled
    Code: C / C++
    Log in, to see the code

    NOTE: In this case, if no card is inserted the radio will start with the basic settings and read the last station number and bank from the EEPROM. If this data is missing (empty cells - FF,255) it will set Bank:1, Station:1

    Example2: SD card disabled (we will use SPIFFS memory, second encoder enabled)
    Code: C / C++
    Log in, to see the code


    OFF POWER ON / POWER OFF from IR PILOT
    From now on, a single click on the button assigned as "SW_POWER" on the remote control is sufficient to wake up the radio. In the case of the RC-406 remote control, this is the "red handset" symbol

    NTP TIME SYNCHRONIZATION
    Time synchronisation with NTP servers has been improved. Now, during a power failure or when switching on for the first time, the radio first tries to download the time correctly before switching to power OFF or radio mode.

    Web server and WEB page
    Replaced ON/OFF selection for functions with practical "checkboxes", Corrected disabling the Mute flag when changing volume and added a Mute indicator on the web page

    AUDIO OPERATION
    Improved reading of information from the audio library of so-called events.

    Radio data handling - stationString
    I've added BOM UTF character elimination from the title string (thanks to my colleague @hevet for the inspiration), this way there are no strange stamps at the beginning of the name such as: was on Radio ZET

    BONUS:
    I played around with creating an Android app for a while (in appInventor) and came up with this insanely simple but I think useful app for Android phones.
    In fact, it is a web browser that connects to http://evoradio.local/ and displays its contents. In addition, there are Home / Menu / Mute / Refresh buttons on the top bar. This allows us to control the radio by launching a simple application.

    INFO:
    There will soon be a new/modified version of the 3D printable case (easier to print) and a new front option.
    Additionally, I will try to introduce the promised update of the memory banks this weekend.

    Page (checkboxes)
    Screenshot of Evo Web Radio settings highlighting three OLED options

    Application
    EVO Web Radio interface in browser with navigation buttons and station list Evo Web Radio app interface showing station name, volume, and memory bank selection

    Side profile of the "new" enclosure
    3D model of the side profile for a new enclosure with visible mounting holes
  • #1732 21765971
    wieh76
    Level 12  
    @robgold I have uploaded this new soft and when switching off it happens:


    did you remove the animation a la old TV?
  • #1733 21765996
    robgold
    Level 22  
    @wieh76 There's a small error in the shutdown logic but I'll correct it soon. I didn't catch it because I leave the timer on there. I'm firing and testing the OLED how long it will last :)
  • #1734 21766000
    DJCheester
    Level 27  
    Hi, just a question (I haven't uploaded the new software yet), does the link editor and the browser work when using the SPIFFS option (appropriate declaration)?

    Because previously we changed the SD. to SPIFFS.
    But besides in two places SD, editor.html to SPIFFS, editor/HTML and the same for browser.html ?

    Greetings ...
  • #1735 21766005
    robgold
    Level 22  
    @DJCheester YES, it works but of course you have to upload with a memory editor those two files to SPIFFS space. Then they will already be there.
    That is, go to Menu > SD / SPIFFS Explorer and upload the two files from the SD content directory browser.html and editor.html
  • #1736 21766008
    DJCheester
    Level 27  
    And that's cool, I already have the browser files and editor in SPIFFS 😀

    That's great I'll upload tomorrow and see how this app performs 😀

    Greetings...
  • #1737 21766120
    robgold
    Level 22  
    @wieh76 @DJCheester I have uploaded a fix. The current version is now 3.19.48.
    I have corrected the clock flag at powerOFF and minor corrections to the behaviour of WebSockets. Additionally, after playing, you can see in the terminal what the SD/SPIFFS configuration is and 1 or 2 encoders.

    Please check if everything works.

    ESP32 startup info with firmware v3.19.48 and SD/encoder configuration displayed


    @wieh76 would you remove the animation a la old TV? - > NO. It's just disabled in the code.
    Code: C / C++
    Log in, to see the code

    I will move this to the settings file in future versions.

    Question, those knobs with the blue wrapper are illuminated ? Gee I'm looking at this short video and I'm in awe of how perfect it looks. Really great.
  • #1738 21766232
    wieh76
    Level 12  
    @robgold works beautifully. I won't see the terminal because I'm doing the update via OTA. I'm creating a custom bin file because I need to swap the encoders on the chassis😀 in place. Also, I am commenting out two lines in the code so as not to display the "little watches" in the corner of the display.
    As for the knobs, they are ordinary aluminium knobs and there are blue rings glued into the chassis turned out of polymer(they are not illuminated).
    This is an amp I made about two years ago. As you can see it matches the Evo because the chassis from the same source🙂 .
    Black PESANTE audio amplifier with blue-rimmed knobs and an internet radio player on top
    Greetings
  • #1739 21766239
    robgold
    Level 22  
    @wieh76 Looks great. And why are you throwing the clock out of the corner ? Is there something in it that I should improve ?
    I added the second encoder among others just for this your case. It would be a pity for people who have such an enclosure with two knobs to have the other one without function :)
  • #1740 21766261
    wieh76
    Level 12  
    @robgold With the clock everything is ok, only as I wrote a couple of posts back the opening for the display is too small "width-wise"
    and covers up slightly just the clock. It looked bad so I removed it. On the other hand as for me the time display when switched off is sufficient and I don't need it anywhere else😀
📢 Listen (AI):

Topic summary

The discussion centers on the development of an internet radio and audio file player based on the ESP32-S3-WROOM-1 module, featuring a custom-designed prototype PCB with OLED display and user controls including rotary encoders and buttons. Key challenges addressed include pin spacing discrepancies in the ESP32-S3 module footprint, integration of Wi-Fi connectivity with dynamic station list updates, and handling of Polish character encoding on the OLED display. The project uses Arduino IDE (version 2.3.2) with ESP-IDF support and requires enabling PSRAM. Audio playback supports MP3, AAC, and FLAC streams, with the ESP32-audioI2S library recommended over the incompatible Audio library. Users reported issues with SPI MISO pin assignment causing bootloader conflicts, resolved by reassigning MISO to pin 35. The project incorporates WiFiManager for network configuration, EEPROM and SD card storage for saving last played station and settings, and includes plans for tone control via an external KA2107 equalizer and a CS8673 amplifier module. Problems with encoder input stability and memory limitations for Bluetooth A2DP on ESP32-S3 were noted. The community suggested alternatives like KaRadio and ESP32-MiniWebRadio projects. Debugging tips include serial terminal logs for HTTP errors and flash memory erasure to resolve boot loops. The project is open-source on GitHub, encouraging forks and modifications. Additional features under development include browser-based updates, directory navigation, and potential audio recording to SD card.
Summary generated by the language model.
ADVERTISEMENT