logo elektroda
logo elektroda
X
logo elektroda

Internet radio and audio file player on ESP32-S3

MAJSTER XXL 100725 1227
ADVERTISEMENT
Treść została przetłumaczona polish » english Zobacz oryginalną wersję tematu
  • #331 21386300
    and32jar
    Level 14  
    @=master= XXL and @robgold
    Thank you for your comprehensive reply.
    My fault for not specifying what I uploaded, and uploaded the soft from @robgold - "evo2".
    List taken care of and now looks nice, thanks to you :) .

    Gentlemen I have one more small remark, in the code there is a different pin layout than in the schematic
    this is a bit confusing for others (several friends had problems with connecting the card)
    In both @robgold (ESP32_radio_evo2) and @Majster XXL (ESP32_radio_v2) there is in the code
    lines: 15-18
    #define SD_CS 47
    #define SPI_MOSI 39
    #define SPI_MISO 0
    #define SPI_SCK 38

    And further in the code it states:
    // SPI initialisation with new pins for SD card reader
    customSPI.begin(45, 21, 48, SD_CS_PIN); // SCLK = 45, MISO = 21, MOSI = 48, CS = 47


    On the other hand, in the schematic :
    MOSI 48
    MISO 21
    SCK 45

    --------------------------------------------
    Gentlemen, what about the Polish font?
    I'm just listening to RMF PRL and the titles are missing Polish characters ( piss them off - at least so it displays the missing letter without the Polish accent)
    Unless I something....
    I'm now testing saruni's soft with openweathermap - it's OK. :)

    Thank you and best regards
  • ADVERTISEMENT
  • #332 21387099
    MAJSTER XXL
    Level 29  
    @and32jar in the schematic is correct, so let's stick to that. Today I corrected the SPI configuration in the code, defining the correct pins for the OLED display and SD card. I also changed the way the SPI for the OLED display is initialised, setting MISO to -1 (since the OLED doesn't use it) and corrected the use of the custom SPI for the SD card, initialising it via customSPI.
    I uploaded the entire .ino file to my github profile, and the changes were as follows:
    https://github.com/sarunia/ESP32_radio_player...mmit/a81314ebebd1e504c923f6b6419e6f175b903867
  • ADVERTISEMENT
  • #333 21387281
    robgold
    Level 20  
    @MAJSTER XXL today I think we are connecting telepathically. After the south I corrected the SPI definitions...I go into the forum and please the same correction from you :) .
    only I left the names for what the SPI is for e.g.: "#define SPI_MOSI_OLED 39".

    I have uploaded evo3 versions of the code to GitHub.
    Enjoy testing. As usual, any comments welcome. This version has a "scroller" function to scroll through the radio broadcast titles.
    https://github.com/dzikakuna/ESP32_radio_evo3/tree/main/src

    @and32jar .
    With Polish characters the matter is a little complicated. At the moment it supports two encoding standards with a manually modified Spleen font. However, each radio transmits as it pleases. I tested it on "Radio Nowy Świat", as they are most fond of Polish "tails", and they displayed correctly. On RMF FM I think they convert the Polish letters to the basic alphabet. I have never encountered Polish characters there.
  • #334 21387742
    MAJSTER XXL
    Level 29  
    Regarding encoding of Polish characters there is a peculiar mess, in the first version of the radio I had the function void processText(String &text) which handled for me the substitution of double-byte characters into single-byte characters from the glcdfont.c font file, which I made up in the character array.
    I did the printing in bytes of the resulting string as artistString, titleString, stationString data and then noticed this inconsistency in the encoding of characters broadcast by different stations. The function e.g. processText(stationString); handled Polish characters from different stations well for me, as far as I caught such surprises at the time. It might be worth checking and using that earlier function to replace the caught double-bytes with the appropriate characters from the Spleen table.

    Code: C / C++
    Log in, to see the code
    .

    The function iterates through each character in the passed text string. The variable i indicates the current index of the character being processed. If it encounters specific byte sequences (characteristic of UTF-8 encoded characters), it performs the corresponding replacement operation, e.g.
    0xC2: processes the sequence 0xC2 0xB3 into the character "ł" (encoded by 0x10 in glcdfont.c)
  • #335 21387820
    and32jar
    Level 14  
    @=master= XXL and @robgold
    Today I tested your new softwares and ...
    both one and the other after the changes have problems with sound.
    At first I thought the 5102 had died, then I changed the cables (strange noises)

    After all the tests I uploaded evo2 firmware - and everything works perfectly (evo3 - screen works, sound is absent - only noises, a bit awkward encoder handling)
    On the other hand, saruni's soft the same, i.e. trouble with sound - I edited to the changes he wrote about (last night) and now the radio works (sound)
    I think there is trouble with the new SPI pin definitions .
    This is my opinion after checking the software

    Regards
  • #336 21387880
    robgold
    Level 20  
    @and32jar Could you describe it more ? Doesn't it work at all ? Are you not playing any specific stations ?

    The evo3 version has been playing with me for over a week now, some minor cosmetic changes I've made mainly in the handling of the "scroller" and the VU indicators but I haven't noticed that there is a problem with the sound. Sometimes when the radio starts to download time it has a problem to start (needs about 5 seconds) then it is ok.

    Evo3 is a soft to work ultimately with only one encoder - you have Station, Volume and Banks handling on one "roll". Let us know what the problem is and we may be able to solve it.
  • #337 21387904
    and32jar
    Level 14  
    >>21387880 .
    So:
    From the visual side, the screen works OK.
    (I left the encoder only No.2 - you have to get used to changing the volume, changing the channel as well as the bank)

    From the Audio side..... no sound on all stations (the same on the corrected sofet of saruni) sometimes a sound of interference only audible (as if you disconnect one of the cables e.g. din)
    I have the configuration the same, all memory cleaned before uploading.

    Edit:
    Same symptoms on saruni's soft
    just edited his soft to yesterday's changes he wrote about last night and the sound came back (talking about SPI pin definitions, which you also did).
  • #338 21387932
    robgold
    Level 20  
    Very interesting what you write. Today my test radio was playing on the Majster sofet and I didn't change anything. Everything worked properly. I just compile and upload.
    The only hardware change I made at my place was to add 10 Ohm resistors on the SPI lines to the OLED display.
    Admittedly there is a 1MHz ( SPI.setFrequency(1000000);) but I gave for decency.

    Check your HW well. Because the SPI pins have nothing to do with the i2s bus definition.
    In addition I have a bridge on top of the PCM to not connect the SCK pin to ground on the wires so much for the differences with the Major's schematic.
    I power the whole thing from a USB-C USB hub, the OLED and PCM powered by 3.3V from the ESP board. I don't use 5V on the radio.

    Two views of printed circuit boards with connector labels. .


    I have now uploaded:
    -> Evo2- works,
    -> Evo3- works,
    -> Soft master - works

    They all boot and I have sound. Can you take a picture of your board and connections ?
  • #339 21387949
    and32jar
    Level 14  
    >>21387932 .
    @robgold
    I have everything just as you describe. I solder jumpers on each new 5102 and also do not connect SCK so on top of the jumper.
    I have already tested on 4pcs and all the same.
    I only have sound on evo2 and saruni softy yesterday. No sound on the new patched ones
    See, I don't know why the sound stopped working after your changes.


    As you see now the sarunia soft is uploaded
    LCD display showing information about the song I Don't Like Mondays by The Boomtown Rats, connected to a set of wires. .
    Close-up of a purple PCM5102 circuit board held in hand, connected to wires. .
    Electronic module with connected wires and a glowing LED. .
    Microcontroller with wires on a wooden table. .

    @robgold

    MAJSTER XXL wrote:
    I uploaded the entire .ino file to my github profile, and the changes were as follows:
    https://github.com/sarunia/ESP32_radio_player...mmit/a81314ebebd1e504c923f6b6419e6f175b903867
    .
    Just why when I undid those changes did the sound work?
  • ADVERTISEMENT
  • #340 21387978
    robgold
    Level 20  
    The only difference apart from the fact that pins are now defined by the "#define" directive is:

    evo2:
    #define SPI_MISO 0

    evo3, the new master soft:
    #define SPI_MISO_OLED -1

    Change this MISO to 0 in the Evo3 or the Major's soft.
  • #341 21388001
    and32jar
    Level 14  
    >>21387978 .

    @robgold
    change ----> MISO to 0
    Have a big beer - works your evo3 like this and will work saruni too.


    Thank you
  • #342 21388028
    MAJSTER XXL
    Level 29  
    @robgold interesting, isn't it? If setting MISO to 0 works, it means that the system requires the pin to be configured correctly (indicating the actual port number) even if MISO is not used, i.e. #define SPI_MISO_OLED -1. In that case, it's best to set MISO to the actual pin number. It works fine for me in both cases, I had port number 0 physically used in the first version of the radio, but this was a mistake because sometimes after uploading the software I had to unplug the USB port from the computer for the ESP32 to boot, port 0 is related to the bootloader and that's why in the v2 version I got away from it and now I don't have a problem with the ESP32 module autostarting after uploading the new software.
  • #343 21388071
    robgold
    Level 20  
    And I wouldn't be surprised if it still depends on the Arduino version. I'm compiling this on a fairly old 2.0.1.
    As for GPIO0, theoretically a plugged in display shouldn't pull it down by itself, but I also remember that you have an additional 5V supply and the logic in the display is 3.3V so maybe some "unbalance" current flowed :) .

    From the "pleasures" for today it was printing the fronts for the chassis both of my own design and the first attempt for Hammond.
    As usual it turned out that Chinese specifications for displays with dimensions are nice to have but good to have my own caliper.

    Front end files (SKP, STL and 3mf under the Prusa slicer) of my own chassis design on GitHub: https://github.com/dzikakuna/ESP32_radio_evo3/tree/main/Housing/3D%20printed%20variant


    Black front panel of a device with an OLED display showing text: Radio Italo!. .
    Printed front panel with a black rectangular opening and an electronic component inside.
    Front panel of the ESP32 Network Player enclosure with a switch and a knob. .
  • #344 21388418
    and32jar
    Level 14  
    @Majster XXL and @robgold
    Gentlemen what about this GPIO0 ?

    All powered by 3.3V,

    I am compiling on 2.3.3 ,
    Arduino ESP32 Boards 2.0.13,
    esp32 Espressif Systems 2.0.14
    I'm asking out of curiosity why it works on yours but not on my -1 setting
  • #345 21388703
    MAJSTER XXL
    Level 29  
    I'm struggling like a horse today to somehow get the Polish letters for the strings sent to the screen, but it keeps going wrong. If I ever find a lot of free time, I'll make my own font with our characters and a function that will replace them on the fly. For the moment I made a simple conversion of printed Polish diacritics on the terminal serial to ASCII characters according to my original function processText , so that there are no missing letters on the screen.


    Code: C / C++
    Log in, to see the code
    .

    I later call this processing before dropping the text onto the OLED in a place like:
    processText(stationString);
    processText(artistString);
    processText(titleString);
    processText(folder);

    As far as I was able to catch the unusual two-byte juxtaposition with supposedly Polish characters, I replaced them with the correct ones.
  • #346 21389019
    robgold
    Level 20  
    @and32jar , @MAJSTER XXL .
    I poked around the web a bit on the subject of this "#define SPI_MISO_OLED 0" and found that this is a known bug. Since a certain version (2.0.3, I think) apparently someone has changed this and the ESP32 libraries have a problem accepting the value "-1". To read:
    https://github.com/espressif/arduino-esp32/issues/6737
    https://github.com/Bodmer/TFT_eSPI/issues/1851

    So as I wrote, the old Arduino will still accept "-1" on the new one.
    Your Arduino probably added to this "-1" value the definition of the next "def", which is "#define I2S_DOUT 13", which resulted in a non-working i2s interface.


    @MAJSTER XXL .
    Great work as usual.

    I sat down for my morning coffee and have already changed these features a bit. Since I have the font Spleen 6x12 that we use redacted with Polish "tails" in the ISO-8859-2 Latin2 standard, Windows 1250 and, where possible, the old-fashioned DOS (who still remembers that?) CP852.
    I assigned individual characters font codes according to the standards and.... we have beautiful Polish letters on (I think) all stations. I checked Nowy Świat, Radio Pogoda, RMF PRL - it was correct everywhere.

    Assignment according to the table: https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
    I'm attaching the font code, maybe you can throw in yourself and enter Spleen's 6x12PL font will have Polish letters in both versions.

    You just need to replace the setFont definitions everywhere with --> u8g2.setFont(spleen6x12PL); .

    Updated as usual on GitHub: https://github.com/dzikakuna/ESP32_radio_evo3/tree/main
    In addition, I have uploaded the case files. Only the rear cap is missing, which is in the design phase.


    
    // Funkcja przetwarza tekst, zamieniając polskie znaki diakrytyczne
    void processText(String &text)
    {
      for (int i = 0; i < text.length(); i++)
      {
        switch (text[i])
        {
          case (char)0xC2:
            switch (text[i+1])
            {
              case (char)0xB3: text.setCharAt(i, 0xB3); break; // Zamiana "ł" na "l"
              case (char)0x9C: text.setCharAt(i, 0x9C); break; // Zamiana "ś" na "s"
              case (char)0x8C: text.setCharAt(i, 0x8C); break; // Zamiana "Ś" na "S"
              case (char)0xB9: text.setCharAt(i, 0xB9); break; // Zamiana "ą" na "a"
              case (char)0x9B: text.setCharAt(i, 0xEA); break; // Zamiana "ę" na "e"
              case (char)0xBF: text.setCharAt(i, 0xBF); break; // Zamiana "ż" na "z"
              case (char)0x9F: text.setCharAt(i, 0x9F); break; // Zamiana "ź" na "z"
            }
            text.remove(i+1, 1);
            break;
          case (char)0xC3:
            switch (text[i+1])
            {
              case (char)0xB1: text.setCharAt(i, 0xF1); break; // Zamiana "ń" na "n"
              case (char)0xB3: text.setCharAt(i, 0xF3); break; // Zamiana "ó" na "o"
              case (char)0xBA: text.setCharAt(i, 0x9F); break; // Zamiana "ź" na "z"
              case (char)0xBB: text.setCharAt(i, 0xAF); break; // Zamiana "Ż" na "Z"
            }
            text.remove(i+1, 1);
            break;
          case (char)0xC4:
            switch (text[i+1])
            {
              case (char)0x85: text.setCharAt(i, 0xB9); break; // Zamiana "ą" na "a"
              case (char)0x99: text.setCharAt(i, 0xEA); break; // Zamiana "ę" na "e"
              case (char)0x87: text.setCharAt(i, 0xE6); break; // Zamiana "ć" na "c"
              case (char)0x84: text.setCharAt(i, 0xA5); break; // Zamiana "Ą" na "A"
              case (char)0x98: text.setCharAt(i, 0xCA); break; // Zamiana "Ę" na "E"
              case (char)0x86: text.setCharAt(i, 0xC6); break; // Zamiana "Ć" na "C"
            }
            text.remove(i+1, 1);
            break;
          case (char)0xC5:
            switch (text[i+1])
            {
              case (char)0x82: text.setCharAt(i, 0xB3); break; // Zamiana "ł" na "l"
              case (char)0x84: text.setCharAt(i, 0xF1); break; // Zamiana "ń" na "n"
              case (char)0x9B: text.setCharAt(i, 0x9C); break; // Zamiana "ś" na "s"
              case (char)0xBB: text.setCharAt(i, 0xAF); break; // Zamiana "Ż" na "Z"
              case (char)0xBC: text.setCharAt(i, 0xBF); break; // Zamiana "ż" na "z"
              case (char)0x83: text.setCharAt(i, 0xD1); break; // Zamiana "Ń" na "N"
              case (char)0x9A: text.setCharAt(i, 0x97); break; // Zamiana "Ś" na "S"
              case (char)0x81: text.setCharAt(i, 0xA3); break; // Zamiana "Ł" na "L"
              case (char)0xB9: text.setCharAt(i, 0xAC); break; // Zamiana "Ź" na "Z"
            }
            text.remove(i+1, 1);
            break;
        }
      }
    }
    
    
    .


    Font definition:

    
    const uint8_t spleen6x12PL[2954] U8G2_FONT_SECTION("spleen6x12PL") = 
      "\340\1\3\2\3\4\1\3\4\6\14\0\375\10\376\11\377\1\225\3]\13m \7\346\361\363\237\0!\12"
      "\346\361#i\357`\316\0\42\14\346\361\3I\226dI\316/\0#\21\346\361\303I\64HI\226dI"
      "\64HIN\6$\22\346q\205CRK\302\61\311\222,I\206\60\247\0%\15\346\361cQK\32\246"
      "I\324\316\2&\17\346\361#Z\324f\213\22-Zr\42\0'\11\346\361#i\235\237\0(\13\346\361"
      "ia\332s\254\303\0)\12\346\361\310\325\36\63\235\2*\15\346\361S\243L\32&-\312\31\1+\13"
      "\346\361\223\323l\320\322\234\31,\12\346\361\363)\15s\22\0-\11\346\361s\32t\236\0.\10\346\361"
      "\363K\316\0/\15\346q\246a\32\246a\32\246\71\15\60\21\346\361\3S\226DJ\213\224dI\26\355"
      "d\0\61\12\346\361#\241\332\343N\6\62\16\346\361\3S\226\226\246\64\35t*\0\63\16\346\361\3S"
      "\226fr\232d\321N\6\64\14\346q\247\245\236\6\61\315\311\0\65\16\346q\17J\232\16qZ\31r"
      "\62\0\66\20\346\361\3S\232\16Q\226dI\26\355d\0\67\13\346q\17J\226\206\325v\6\70\20\346"
      "\361\3S\226d\321\224%Y\222E;\31\71\17\346\361\3S\226dI\26\15ii'\3:\11\346\361"
      "\263\346L\71\3;\13\346\361\263\346\264\64\314I\0<\12\346\361cak\334N\5=\13\346\361\263\15"
      ":\60\350\334\0>\12\346\361\3qk\330\316\2\77\14\346\361\3S\226\206\325\34\314\31@\21\346\361\3"
      "S\226dI\262$K\262\304CN\5A\22\346\361\3S\226dI\226\14J\226dI\226S\1B\22"
      "\346q\17Q\226d\311\20eI\226d\311\220\223\1C\14\346\361\3C\222\366<\344T\0D\22\346q"
      "\17Q\226dI\226dI\226d\311\220\223\1E\16\346\361\3C\222\246C\224\226\207\234\12F\15\346\361"
      "\3C\222\246C\224\266\63\1G\21\346\361\3C\222V\226,\311\222,\32r*\0H\22\346qgI"
      "\226d\311\240dI\226dI\226S\1I\12\346\361\3c\332\343N\6J\12\346\361\3c\332\233\316\2"
      "K\21\346qgI\226D\321\26\325\222,\311r*\0L\12\346q\247}\36r*\0M\20\346qg"
      "\211eP\272%Y\222%YN\5N\20\346qg\211\224HI\77)\221\222\345T\0O\21\346\361\3"
      "S\226dI\226dI\226d\321N\6P\17\346q\17Q\226dI\226\14QZg\2Q\22\346\361\3"
      "S\226dI\226dI\226d\321\252\303\0R\22\346q\17Q\226dI\226\14Q\226dI\226S\1S"
      "\16\346\361\3C\222\306sZ\31r\62\0T\11\346q\17Z\332w\6U\22\346qgI\226dI\226"
      "dI\226d\321\220S\1V\20\346qgI\226dI\226dI\26m;\31W\21\346qgI\226d"
      "I\226\264\14\212%\313\251\0X\21\346qgI\26%a%\312\222,\311r*\0Y\20\346qgI"
      "\226dI\26\15ie\310\311\0Z\14\346q\17j\330\65\35t*\0[\13\346\361\14Q\332\257C\16"
      "\3\134\15\346q\244q\32\247q\32\247\71\14]\12\346\361\14i\177\32r\30^\12\346\361#a\22e"
      "\71\77_\11\346\361\363\353\240\303\0`\11\346\361\3q\235_\0a\16\346\361S\347hH\262$\213\206"
      "\234\12b\20\346q\247\351\20eI\226dI\226\14\71\31c\14\346\361S\207$m\36r*\0d\21"
      "\346\361ci\64$Y\222%Y\222ECN\5e\17\346\361S\207$K\262dP\342!\247\2f\14"
      "\346\361#S\32\16Y\332\316\2g\21\346\361S\207$K\262$K\262hN\206\34\1h\20\346q\247"
      "\351\20eI\226dI\226d\71\25i\13\346\361#\71\246v\325\311\0j\13\346\361C\71\230\366\246S"
      "\0k\16\346q\247\245J&&YT\313\251\0l\12\346\361\3i\237u\62\0m\15\346\361\23\207("
      "\351\337\222,\247\2n\20\346\361\23\207(K\262$K\262$\313\251\0o\16\346\361S\247,\311\222,"
      "\311\242\235\14p\21\346\361\23\207(K\262$K\262d\210\322*\0q\20\346\361S\207$K\262$K"
      "\262hH[\0r\14\346\361S\207$K\322v&\0s\15\346\361S\207$\236\323d\310\311\0t\13"
      "\346\361\3i\70\246\315:\31u\20\346\361\23\263$K\262$K\262h\310\251\0v\16\346\361\23\263$"
      "K\262$\213\222\60gw\17\346\361\23\263$KZ\6\305\222\345T\0x\16\346\361\23\263$\213\266)"
      "K\262\234\12y\21\346\361\23\263$K\262$K\262hH+C\4z\14\346\361\23\7\65l\34t*"
      "\0{\14\346\361iiM\224\323\262\16\3|\10\346q\245\375;\5}\14\346\361\310iY\324\322\232N"
      "\1~\12\346\361s\213\222D\347\10\177\7\346\361\363\237\0\200\6\341\311\243\0\201\6\341\311\243\0\202\6"
      "\341\311\243\0\203\6\341\311\243\0\204\6\341\311\243\0\205\6\341\311\243\0\206\6\341\311\243\0\207\6\341\311"
      "\243\0\210\6\341\311\243\0\211\6\341\311\243\0\212\6\341\311\243\0\213\6\341\311\243\0\214\16\346\361eC"
      "\222\306sZ\31r\62\0\215\6\341\311\243\0\216\6\341\311\243\0\217\14\346qe\203T\354\232\16:\25"
      "\220\6\341\311\243\0\221\6\341\311\243\0\222\6\341\311\243\0\223\6\341\311\243\0\224\6\341\311\243\0\225\6"
      "\341\311\243\0\226\6\341\311\243\0\227\16\346\361eC\222\306sZ\31r\62\0\230\6\341\311\243\0\231\6"
      "\341\311\243\0\232\6\341\311\243\0\233\6\341\311\243\0\234\16\346\361\205\71\66$\361\234&CN\6\235\6"
      "\341\311\243\0\236\6\341\311\243\0\237\15\346\361\205\71\64\250a\343\240S\1\240\7\346\361\363\237\0\241\23"
      "\346\361\3S\226dI\226\14J\226dI\26\306\71\0\242\21\346\361\23\302!\251%Y\222%\341\220\345"
      "\24\0\243\14\346q\247-\231\230\306CN\5\244\22\346\361\3S\226dI\226\14J\226dI\26\346\4"
      "\245\22\346\361\3S\226dI\226\14J\226dI\26\346\4\246\16\346\361eC\222\306sZ\31r\62\0"
      "\247\17\346\361#Z\224\245Z\324\233\232E\231\4\250\11\346\361\3I\316\237\1\251\21\346\361\3C\22J"
      "\211\22)\221bL\206\234\12\252\15\346\361#r\66\325vd\310\31\1\253\17\346\361\223\243$J\242\266"
      "(\213r\42\0\254\14\346qe\203T\354\232\16:\25\255\10\346\361s\333y\3\256\21\346\361\3C\22"
      "*\226d\261$c\62\344T\0\257\14\346qe\203\32vM\7\235\12\260\12\346\361#Z\324\246\363\11"
      "\261\20\346\361S\347hH\262$\213\206\64\314\21\0\262\14\346\361#Z\224\206\305!\347\6\263\13\346\361"
      "\3i\252\251\315:\31\264\11\346\361Ca\235\337\0\265\14\346\361\23\243\376i\251\346 \0\266\16\346\361"
      "\205\71\66$\361\234&CN\6\267\10\346\361s\314y\4\270\11\346\361\363\207\64\14\1\271\20\346\361S"
      "\347hH\262$\213\206\64\314\21\0\272\15\346\361#Z\324\233\16\15\71#\0\273\17\346\361\23\243,\312"
      "\242\226(\211r\62\0\274\15\346\361\205\71\64\250a\343\240S\1\275\17\346\361\204j-\211\302\26\245\24"
      "\26\207\0\276\21\346\361hQ\30'\222\64\206ZR\33\302\64\1\277\15\346\361#\71\64\250a\343\240S"
      "\1\300\21\346\361\304\341\224%Y\62(Y\222%YN\5\301\21\346\361\205\341\224%Y\62(Y\222%"
      "YN\5\302\22\346q\205I\66eI\226\14J\226dI\226S\1\303\23\346\361DI\242MY\222%"
      "\203\222%Y\222\345T\0\304\21\346\361\324\241)K\262dP\262$K\262\234\12\305\16\346\361eC\222"
      "\306sZ\31r\62\0\306\14\346\361eC\222\366<\344T\0\307\15\346\361\3C\222\366<di\30\2"
      "\310\17\346\361\304\341\220\244\351\20\245\361\220S\1\311\17\346\361\205\341\220\244\351\20\245\361\220S\1\312\20"
      "\346\361\3C\222\246C\224\226\207\64\314\21\0\313\17\346\361\324\241!I\323!J\343!\247\2\314\13\346"
      "\361\304\341\230v\334\311\0\315\13\346\361\205\341\230v\334\311\0\316\14\346q\205I\66\246\35w\62\0\317"
      "\13\346\361\324\241\61\355\270\223\1\320\15\346\361\3[\324\262D}\332\311\0\321\20\346\361EIV\221\22"
      ")\351'%\322\251\0\322\20\346\361\304\341\224%Y\222%Y\222E;\31\323\20\346\361\205\341\224%Y"
      "\222%Y\222E;\31\324\21\346q\205I\66eI\226dI\226d\321N\6\325\22\346\361DI\242M"
      "Y\222%Y\222%Y\264\223\1\326\21\346\361\324\241)K\262$K\262$\213v\62\0\327\14\346\361S"
      "\243L\324\242\234\33\0\330\20\346qFS\226DJ_\244$\213\246\234\6\331\21\346\361\304Y%K\262"
      "$K\262$\213\206\234\12\332\21\346\361\205Y%K\262$K\262$\213\206\234\12\333\23\346q\205I\224"
      "%Y\222%Y\222%Y\64\344T\0\334\22\346\361\324\221,\311\222,\311\222,\311\242!\247\2\335\17"
      "\346\361\205Y%K\262hH+CN\6\336\21\346\361\243\351\20eI\226dI\226\14QN\3\337\17"
      "\346\361\3Z\324%\213j\211\224$:\31\340\20\346q\305\71\64GC\222%Y\64\344T\0\341\20\346"
      "\361\205\71\66GC\222%Y\64\344T\0\342\20\346q\205I\16\315\321\220dI\26\15\71\25\343\21\346"
      "\361DI\242Cs\64$Y\222ECN\5\344\20\346\361\3I\16\315\321\220dI\26\15\71\25\345\20"
      "\346q\205I\30\316\321\220dI\26\15\71\25\346\15\346\361Ca\70$i\363\220S\1\347\15\346\361S"
      "\207$m\36\262\64\14\1\350\20\346q\305\71\64$Y\222%\203\22\17\71\25\351\20\346\361\205\71\66$"
      "Y\222%\203\22\17\71\25\352\20\346\361S\207$K\262dP\342!\254C\0\353\21\346\361\3I\16\15"
      "I\226d\311\240\304CN\5\354\13\346q\305\71\244v\325\311\0\355\13\346\361\205\71\246v\325\311\0\356"
      "\14\346q\205I\16\251]u\62\0\357\14\346\361\3I\16\251]u\62\0\360\21\346q$a%\234\262"
      "$K\262$\213v\62\0\361\21\346\361\205\71\64DY\222%Y\222%YN\5\362\20\346q\305\71\64"
      "eI\226dI\26\355d\0\363\20\346\361\205\71\66eI\226dI\26\355d\0\364\20\346q\205I\16"
      "MY\222%Y\222E;\31\365\21\346\361DI\242CS\226dI\226d\321N\6\366\20\346\361\3I"
      "\16MY\222%Y\222E;\31\367\13\346\361\223sh\320\241\234\31\370\17\346\361\223\242)RZ\244$"
      "\213\246\234\6\371\21\346q\305\71\222%Y\222%Y\222ECN\5\372\21\346\361\205\71\224%Y\222%"
      "Y\222ECN\5\373\22\346q\205I\216dI\226dI\226d\321\220S\1\374\22\346\361\3I\216d"
      "I\226dI\226d\321\220S\1\375\23\346\361\205\71\224%Y\222%Y\222ECZ\31\42\0\376\22\346"
      "q\247\351\20eI\226dI\226\14Q\232\203\0\377\23\346\361\3I\216dI\226dI\226d\321\220V"
      "\206\10\0\0\0\4\377\377\0";
    
    .

    OLED display showing information about the music being played. .
  • #347 21389128
    MAJSTER XXL
    Level 29  
    @robgold Add in the processText function the display of the character "Ó" composed of the characters 0xC3 0x93 - to case, substitute the correct character as you have done "Ó":

    Code: C / C++
    Log in, to see the code
    .
  • #348 21389148
    robgold
    Level 20  
    @Majster

    Done. Converts to 0xD3 -> case (char)0x93: text.setCharAt(i, 0xD3); break; // Converts to "Ó" .
    hm... what song will start with "Ó" ? :) I don't think I would have noticed the absence of that letter for a long time :)
  • ADVERTISEMENT
  • #349 21389178
    MAJSTER XXL
    Level 29  
    Great, so far I can't see any other shortcomings, the big "Ó" came in handy in this and other similar places:

    Code: C / C++
    Log in, to see the code
    .
  • #350 21389267
    robgold
    Level 20  
    And so from another topic. Have you tested the radio with the Bank file where you have e.g.: 100 or 103 stations ?
    Theoretically you get information on the terminal about the limitation but with me it "crashed" a couple of times as if it was trying to get outside the RAM area.
    Unfortunately the debug uploaded ESP Exception Decoder showed nothing clever. When I went back to 95 station the problem disappeared.
    I am using an ESP32 S3 16N8.

    Added after 35 [minutes]: .

    On the subject of buttons, I was shown on Ali today - an interesting encoder: https://pl.aliexpress.com/item/1005006220063364.html .

    Spins and it has a built in 4 position joy plus button. No perfect :) .
  • #352 21390073
    Andrzej Ch.
    Level 33  
    Yes, they will fit into the design
  • #353 21390189
    robgold
    Level 20  
    Yes, they will fit however try to look for modules that have a QR code on them. My impression is that the ones without the code are Chinese fakes.
    I have both. The originals from TME always have a QR code and those from auctions with codes are also very stable. The one without the code has already partially died for me.

    This 2.08 inch display will also work in your project without any modifications and you don't even have to configure it with jumpers. You only need to copy yourself one line of the display configuration. https://pl.aliexpress.com/item/1005007403044293.html .



    I have made an update to the software regarding the update of the banks.
    Now going into the bank selection menu and approving with the second encoder always forces updates from the GitHub of the bank in question.

    If you approve with the same encoder, in case the file already exists on the SD card it will be read from it without an update.
    The download will only take place if the file is missing (which is how it was in my version so far)
  • #354 21390502
    DJCheester
    Level 26  
    robgold wrote:
    I have now uploaded:
    -> Evo2- works,
    -> Evo3- works,
    -> Soft master - works

    They all boot and I have sound.
    .

    Hello I am also trying to build this radio.

    The question is do these softy's quoted above have common hardware ??
    I.e. are the pins connecting the display, ESP, card slot the same ???
    Because as far as I can see, they differ in the buttons/encoders

    I am planning to make a new PCB in Eagle and I would like to be sure not to cut the tracks afterwards.

    Greetings ...
  • #355 21390558
    robgold
    Level 20  
    Yes, nothing has changed on the HW side. For all versions it is still the same connection system.
    Up to now, 2 rotary encoders, the display on the SSD1322 controller and any SD memory card reader are supported.

    The rest are differences in what you see on the display and the functions supported in the software.
    If you are interested in the radio itself without MP3/FLAC player support, the EVO3 version can work with one encoder.

    Will you tell us more about how you want to make the board? Under ready-made modules? Or a circuit to be soldered and a pure ESP module?
    I am also thinking of making a dedicated PCB, but time is lacking. Maybe we can join forces?
  • #356 21390590
    DJCheester
    Level 26  
    Hello

    Under the ready made ESP module not soldered the one what my colleague CodeBoy above has given just look for with QR code.
    For now I have to buy it and see physically if the footprints will fit - if not I will have to make it in Eagle.

    Overall:
    goldpin type connectors brought out for encoders i.e. 1x5pin (raster 2.54) two leads
    goldpin connector for the memory card module, i.e. with several resistors 1x6pin (raster 2.54)
    IDC-16 connector for connecting a 16-pin-16-pin ready-made strip to plug in the larger LCD.
    2x22-pin goldpin connectors for the ESP module
    1x6pin and 1x9pin connectors for the audio converter - with spacing to fit the finished module.

    I will definitely not use the large power supply board that the author of the topic used, instead I will use a regular USB connector so that the whole thing can be powered from a mains charger or a powerbank or other USB source.

    In addition I plan to bring the chinch sockets outside the board.

    And that's probably all I've come up with for now

    I want to pack the whole board in relation to the author's board in order to reduce the size of the PCB to the necessary minimum.

    Possibly as an additional option I will add the MP1584 inverter (ready-made module) and a 12V DC socket, but I don't know if this will be of much use in the era of the USB standard.

    I am now looking for reliable and well sized footprints in Eagle, if I can't find them I will size them myself and create them in Eagle.

    Regards ...

    Added after 7 [minutes]: .

    So tell me the project author has updated the schematic with a directional button module - so far this is not used in the sofet so it will be worth making a goldpi 1x5pin strip on the PCB for this too.

    Greetings ...

    Added after 4 [minutes]:

    As for the lead-out connectors I plan to do on such sockets under the ready-made JST wire connectors

    https://pl.rs-online.com/web/p/gniazda-do-pcb/1755457

    Regards ...
  • #357 21391091
    robgold
    Level 20  
    The tape for the display on the one hand is a great idea on the other hand there you use only 7 wires. The rest will be redundant. Here an IDC connector of this type would probably be better: https://www.tme.eu/pl/details/m20-1070800/zlacza-sygnalowe-raster-2-54mm/harwin/ .

    Eagle library for ESP32-S3 I have, I have drawn, I can send you.

    As for the differences in the schematics, Majster's colleague added the joystick as a 5 button keyboard. His code already supports this.
    As he wrote himself there are a lot of problems because this joystick is analogue so it requires reading ADC pins.

    Eventually I will also have a keyboard, but on tact-switches, maybe to keep compatibility I will start "pretending" resistance with my keyboard.
  • #358 21391249
    DJCheester
    Level 26  
    Hi, you can add his pins on the joy and yours as digital to make the board bbyła universal.

    As for the concept of the PCB, it would be designed as a single-sided board with jumpers, which would make it possible to make the PCB with a simple thermo transfer, because the cost of making the PCB in the factory in the author's case was considerable.

    The issue of IDC I was thinking of connectors of this type

    https://www.piekarz.pl/02176-wtyk-bh14-r-14-torow/

    And a tape of this type

    https://botland.com.pl/przewody-i-zlacza-idc/...14-pin-zensko-zenski-30-cm-5904422304621.html

    The board to simplify the directional sockets and the cable as much as possible so that the tape cannot be plugged in backwards.

    As for the library you can send or post here, I'm still looking for a library for PCM and a raster because I don't have a module I would size.

    Also the sd card module raster 2.54 ?
    Here I am thinking of setting the pins so that the module can be plugged in or soldered to the main PCB and so that the slot is flush with the PCB line, i.e. the pins are set appropriately back.

    I will start drawing something there this week.

    Greetings....

    Added after 1 [hour] 21 [minutes]: .

    Oh and the OLED issue I wanted the bigger one exactly that

    https://sklep.msalamon.pl/produkt/wyswietlacz-oled-312-256x64px-zielony/

    Do I have to change anything in the source to make it work ? Or is it enough to connect it according to the diagram ?

    Another thing, do I need to compile the code or can I use the compiled bin files and upload them as explained earlier ?

    And will the radio moved to another network be able to change it from the radio level and save it so that on subsequent activations it will work automatically with the new network and forget about it.

    Alternatively, how is authentication performed, is it stored in the code and when we want to change the network, we have to compile it from scratch or the stored login data is somewhere, e.g. on a memory card.

    Greetings ...
  • #359 21391533
    robgold
    Level 20  
    I understand that you want to simplify this PCB very much, but the question is whether nowadays, when you order double-sided PCBs in China, with metallization and description for a few dollars, thermo-transfer still makes sense? You have to decide for yourself.

    To answer your questions:
    Yes the display from Msalamon 3.12 is exactly that display. I also bought there myself because there is not much difference between Ali and you have it the next day - a very good shop. At my place on GitHub you have ready-made binaries. You don't even need to have an Arduino. The code there available ino and bin is just for this display on the SSD1322 controller.

    In both versions there is a WiFi manager that allows you to use your phone/computer to configure WiFi - the radio emulates an Access Point called ESP Radio - you connect to it, go to 192.168.4.1 and the WiFi manager portal starts up. The login details are stored in the ESP's internal flash memory. If the radio cannot connect to the network at the new location, it will enter configuration mode again after a while and you can once again save a new network name and password.

    Here you have my schematic files and unfinished PCB. Link .
    I couldn't find an ESP32 S3 library so I made my own symbol and footprint for the existing one I had.
    The PCM5102A library is from the web. I only corrected the signal names. I have not checked if it is drawn correctly in the raster, so I suggest to print it on a sheet of paper beforehand.

    Electronic schematic of a PCB using ESP32 and PCM5102A. .
  • #360 21391578
    DJCheester
    Level 26  
    Thanks a lot for the materials tomorrow I'm firing up Eagle and working.

    As for ordering PCBs from china I didn't do it, I've already made over 1000 PCBs by thermo transfer, so for me making a PCB from a ready design is 1h depending on size and number of holes.
    I used to make even 30pcs PCBs in one day 😀 .

    A few more questions if that LCD you mentioned above

    https://pl.aliexpress.com/item/1005007403044293.html

    Can it be used interchangeably (without changing the code and compilation), i.e. by unplugging the large 3 inches and mounting the smaller 2 inches ?

    Because if so, it is worth preparing two connectors and either one or the other should be fitted.

    I would like to make the PCB as universal as possible.
    As for china I will make gerber available so that you can order this PCB from china.

    In the gerber I will give two layers and replace the jumpers from the single layer with TOP tracks to make it less soldering.
    If someone wants to do a thermal transfer, he will do it on a single-sided laminate and guide the jumpers.

    Tell me, because I have not dealt with ESP before, only with Arduino. The power supply as I see it is one 5V, the 3.3v that powers the reader is taken from the stabiliser on the ESP ?

    Is it possible to power the whole thing via the USBC socket from the ESP module ? Or is it only used for programming ?

    Because if so, you can dispense with the additional module I was planning to place.

    Such

    https://sklep.msalamon.pl/produkt/gniazdo-usb-c-do-plytki-prototypowej-2/

    Encoders with PCBs for better soldering of pins or 5x5 tape to fasten the sequence as on the encoder boards.

    https://sklep.msalamon.pl/produkt/enkoder-impulsator-obrotowy/

    Encoders are with buttons in the design ?

    Greetings ...

Topic summary

The discussion revolves around building an internet radio and audio file player using the ESP32-S3 microcontroller. The project includes features such as an OLED display, Wi-Fi connectivity, and audio playback capabilities. Users share their experiences with hardware setup, including issues with pin configurations, library compatibility, and troubleshooting compilation errors in the Arduino IDE. Suggestions for libraries, such as ESP32-audioI2S and WiFiManager, are provided to enhance functionality. Participants also discuss the importance of proper wiring, capacitor usage for encoders, and the potential for adding features like DLNA support and a web management interface for radio station management. Several users report on their progress, share code snippets, and offer solutions to common problems encountered during development.
Summary generated by the language model.
ADVERTISEMENT