{"id":28621455,"url":"https://github.com/schreibfaul1/ESP32-MiniWebRadio","last_synced_at":"2025-06-12T05:05:28.230Z","repository":{"id":40378473,"uuid":"123805672","full_name":"schreibfaul1/ESP32-MiniWebRadio","owner":"schreibfaul1","description":"Internetradio with ESP32, I2S DAC and SPI TFT Display with Touchpad","archived":false,"fork":false,"pushed_at":"2025-05-30T14:58:54.000Z","size":420969,"stargazers_count":397,"open_issues_count":42,"forks_count":100,"subscribers_count":41,"default_branch":"master","last_synced_at":"2025-05-30T20:40:24.279Z","etag":null,"topics":["esp32","esp32s3","internetradio","miniwebradio","webradio"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=6QbPee2583o","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schreibfaul1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-03-04T16:13:03.000Z","updated_at":"2025-05-30T14:58:58.000Z","dependencies_parsed_at":"2024-03-04T00:31:58.620Z","dependency_job_id":"f26e61e7-4c4e-49c5-a98c-b801837937d6","html_url":"https://github.com/schreibfaul1/ESP32-MiniWebRadio","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/schreibfaul1/ESP32-MiniWebRadio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schreibfaul1%2FESP32-MiniWebRadio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schreibfaul1%2FESP32-MiniWebRadio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schreibfaul1%2FESP32-MiniWebRadio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schreibfaul1%2FESP32-MiniWebRadio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schreibfaul1","download_url":"https://codeload.github.com/schreibfaul1/ESP32-MiniWebRadio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schreibfaul1%2FESP32-MiniWebRadio/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259402010,"owners_count":22851867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp32","esp32s3","internetradio","miniwebradio","webradio"],"created_at":"2025-06-12T05:01:42.311Z","updated_at":"2025-06-12T05:05:28.221Z","avatar_url":"https://github.com/schreibfaul1.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# ESP32-S3-MiniWebRadio V4\n\n![Display](docs/MiniWebRadio.jpg)\n\nMiniWebRadio Features:\n\u003cul\u003e\n\u003cli\u003eUser interfaces: TFT touchscreen display, web browser and FTP\u003c/li\u003e\n\u003cli\u003eFunctions: WiFi Radio, Digital Clock, MP3 player, Alarm, Sleep timer, adjust screen brightness, EQ settings and Volume, web browser User Interface, access SD card via FTP (e.g. FileZilla), IR remote controller support\u003c/li\u003e\n\u003cli\u003eUp to 999 pre-set stations can be held in stations.csv file on SD card (can edit using web UI)\u003c/li\u003e\n\u003cli\u003eEach station can display its own station icon (when saved to SD card)\u003c/li\u003e\n\u003cli\u003eTime is obtained via Network Time Protocol (NTP) from internet. Local Time Zone can be set from web UI\u003c/li\u003e\n\u003cli\u003eWeb UI - MiniWebRadio can be accessed via any web browser (e.g. IE/Edge/Chrome/FireFox)\u003c/li\u003e\n\u003cli\u003eInternal SD card can be accessed via FTP (e.g. FileZilla)\u003c/li\u003e\n\u003cli\u003eYour home WiFi router SSID and password can be set using the browser on your smart phone (only required on first boot) or edit the networks.csv file on SD card\u003c/li\u003e\n\u003cli\u003ePlay audio files on SD card or on DLNA home network (via web UI)\u003c/li\u003e\n\u003cli\u003eUse Infra-Red (IR) remote controller (38kHz NEC-encoded - e.g. arduino or mp3 remote). The web UI allows you to configure the buttons if required\u003c/li\u003e\n\u003cli\u003eOne Alarm time can be pre-set using display (choose days, Monday-Sunday)\u003c/li\u003e\n\u003cli\u003eA Sleep timer can be set using display (switches off sound and screen after a pre-set time - max. 6 hours)\u003c/li\u003e\n\u003cli\u003eCan announce the time each hour when in radio mode (set via web UI)\u003c/li\u003e\n\u003cli\u003eScreen brightness can be adjusted using display (if the display has a backlight-pin)\u003c/li\u003e\n\u003cli\u003eSupports the Latin, Greek and Cyrillic character sets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.radio-browser.info/\"\u003eCommunity Radio Browser\u003c/a\u003e is integrated as a search engine. User can find new stations and then add them to the station list via web UI (with station icon if available) and then save the list and station icon file to the SD card\u003c/li\u003e\n\u003cli\u003eChannel lists can be exported or imported in Excel format (for data backup).\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\nRequired HW:\n\u003cul\u003e\n\u003cli\u003eESP32-S3 board \u003cb\u003ewith 4MB PSRAM or larger\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003eDAC (e.g. PCM5102a)\u003c/li\u003e\n\u003cli\u003eTFT Display with Touchpad (SPI), Display controller can be ILI9341 (320x240px), ILI9486 (480x320px), ILI9488 (480x320px) or ST7796 (480x320px) or\nRGB Display with Touchpad (I2C) \u003c/li\u003e\n\u003cli\u003eSD Card (FAT32) + SD adapter (can use SD slot on back of TFT display if available)\u003c/li\u003e\n\n![Display sizes](docs/Displysizes.jpg)\n\n\n\n\u003c/ul\u003e\nOptional HW:\n\u003cul\u003e\n\u003cli\u003eIR receiver + IR remote controller according to the NFC protocol\u003c/li\u003e\n\u003cli\u003eKCX_BT_EMITTER V1.7, for connecting external Bluetooth devices, needs sufficient free GPIOs\u003c/li\u003e\n\u003cli\u003eBH1750 light sensor: The BH1750 has a wide range of values, which is still sufficiently sensitive at average room brightness. On the display, you can set the desired brightness when the sensor is darkened. Then the display is dimmed to this value 'at night', needs sufficient free GPIOs.\u003c/li\u003e\n\u003c/ul\u003e\u003cbr\u003e\n\nControl is via the display touchscreen or a web page in a browser, no additional components such as switches, rotary encoders, capacitors or resistors are required.\n\nSchematic\u003cbr\u003eSPI Display\n![Schematic ESP32-S3 with external DAC](docs/MWR_V4_SPI_Display_schematic.jpg)\u003cbr\u003e\n\u003cbr\u003eRGB Display\n![Schematic ESP32-S3 with RGB Display](docs/MWR_V4_RGB_Display_schematic.jpg)\u003cbr\u003e\n\u003cbr\u003e\n\n[Display Layout](docs/MiniWebRadio%20V3.4%20Layout.pdf)\u003cbr\u003e\n\n[Using the Community Radio Browser](docs/Using%20the%20RadioBrowser.pdf)\u003cbr\u003e\n\n[How to install](docs/How%20to%20install.pdf) : PlatformIO is definitely recommended as the IDE.\n\n#### Some features:\n\n- The audioprocess works in its own task and is decoupled. This prevents dropouts when drawing on the display or when the website is loading.\n- The SD card is wired as SD_MMC to improve stability and increase speed. This means that the GPIOs cannot be chosen freely. The [SD card adapter](docs/SD_Card_Adapter_for_SD_MMC_.jpg) must not have any resistors in series. For best display update speed, use 40MHz frequency for SD card if possible (SDMMC_FREQUENCY 40000000 in common.h).\n- Audio can be decoded using software. Possible formats are mp3, aac, mp4, opus, vorbis and flac.\n- External DACs (e.g. UDA13348, MAX98357A, PCM5102A) are connected via I2S, ES8388 and AC101 also require an I2C connection\n- 480x320px display supported. The ILI9486 (SPI display from the Raspberry PI) is also supported\n- The SD card files can be accessed via FTP. See settings for [Filezilla](docs/Filezilla.pdf). The username and password are 'esp32' (this can be changed in 'common.h')\n- Access Point SSID/password can be set using mobile phone browser - no need to modify source code or networks.csv file on SD card\n- Stations URLs support entry of username and password if the server expects access data, \"URL|user|pwd\"\n- Can process local playlists in m3u format\n- Either the ESP32 or the ESP32-S3 can be used (PSRAM is highly recommended)\n- IR remote button codes can be changed by user using web UI\n- Improved web UI reliability\n- VU meter added to display\n- Timezone can be set using web UI\n- Play media files on home network DLNA (uPNP/DLNA app on smart phone, router, etc.)\n- Prevent clicks when changing radio stations\n\n\u003cbr\u003e\n\n|Codec       |                                                       |\n|------------|-------------------------------------------------------|\n| mp3        | y                                                     |\n| aac        | y                                                     |\n| aacp       | y (+SBR, +PS)                                         |\n| wav        | y                                                     |\n| flac       | y (blocksize max 16KB)                                |\n| vorbis     | y \u003c=256Kbit/s                                         |\n| m4a        | y                                                     |\n| opus       | y (except hybrid mode)                                |\n\n\n***\n\u003cbr\u003e\n\n[self-made devices of the users](https://github.com/schreibfaul1/ESP32-MiniWebRadio/wiki/User-devices)\u003cbr\u003e\n\n***\n\n## Known problems\n### SD Card\nIn the simplest case, the SD card is connected directly to the ESP32\n\u003cbr\u003e\n![SD Card Pinout](docs/SD_Card_Pinout.jpg)\u003cbr\u003e\nSome SD card adapters for displays use series resistors. These are useless and in many cases harmful. Therefore, it is better to remove them and replace them with solder bridges.\u003cbr\u003e\n![Display Resistors](docs/Display_resistors.jpg)\u003cbr\u003e\nIf an ESP32 is used, any existing pull-up resistor at pin D0 must be removed (ESP32 - bootstrap pin). This will be added again later via SW. This is not necessary with the ESP32-S3.\n(Photo from the \u003ca href=\"https://forum.espuino.de/\"\u003e ESPuino \u003c/a\u003eforum)![SD Card Adapter ESP32](docs/ESP32_SD_Card_PullUp.jpg)\u003cbr\u003e\n\n### Display\nMany displays can be used without any problems. If the touchpad does not work, it may be that the TFT controller does not enable the SPI bus. This is the case with my ILI9488 display. Then MISO of the TFT controller must not be connected.\u003cbr\u003e\n![ILI9488 Display](docs/ILI9488_pins.jpg)\nThe values ​​of the PLCK frequency specified for RGB displays are not fully achieved. The reason for this is the high load of PSRAM for audio processing.\n\u003cbr\u003e\n\n### DAC\nOn some PCM5102 boards the solder bridges are missing on the back.\u003cbr\u003e\n![PCM5102A Board](docs/PCM5102A.png)\u003cbr\u003e\nThis is how the DAC CS4344 is connected:\u003cbr\u003e\n![CS4344 Board](docs/DAC_CS434.jpg)\u003cbr\u003e\nIf the DAC PT8211 is used, the *I2S_COMM_FMT* must be changed in common.h. This DAC requires Japanese LSBJ (Least Significant Bit Justified) format\n\n### IR Receíver\nVarious 38KHz IR receivers can be used. While the TSOP4838 can be used without any problems, the VS1838B is very sensitive to high frequency fields despite its metal shielding. The VS1838B should not be installed near the WiFi antenna. The HS0038A2D is also suitable. HS0038 - HS0038A2 can be used with Vcc 5V.\u003cbr\u003e\n![IR Receiver](docs/IR_Receiver.jpg)\u003cbr\u003e\n\n### IR Remote Control\nThe remote control must support the NEC protocol. If several remote controls are operated in one room, they must have different address codes to avoid mutual interference. The \"Arduino\" remote control on the left in the picture uses the address code 0x00FF and the \"Android X96\" remote control (right) uses the address code 0x01FE.\u003cbr\u003e\n![IR Transmitter](docs/IR_Transmitter.jpg)\u003cbr\u003e\n\n### KCX_BT_EMITTER\nThe RT pin is not part of the soldering strip, but is located in the middle of the right side.\u003cbr\u003e\n![PCM5102A Board](docs/KCX_BT_EMITTER_pins.jpg)\u003cbr\u003e\n\n### WiFi Credentials\nIf you see that, there are illegal characters in the WIFI access data. Sometimes only an `erase flash` help\n![Wrong Credentials](docs/wrong_credentials.jpg)\u003cbr\u003e\n\n\u003cbr\u003e\n___________________________________________________________\n\u003cbr\u003e\n\n![MWR](/docs/MWR.jpg)\u003cbr\u003e\n\u003cbr\u003e\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschreibfaul1%2FESP32-MiniWebRadio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschreibfaul1%2FESP32-MiniWebRadio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschreibfaul1%2FESP32-MiniWebRadio/lists"}