I've recently decided to fork yoRadio from version 0.9.533. Many changes are coming... many things remain untested.
I will absolutely drop support for ESP8266 (mostly already deleted but some elements remain). Support for low-end versions of ESP32s may get dropped inadvertantly. I build with ESP32-S3s and various displays. I can't test all of them.
I may drop support for certain components like Nextion.
But for now, check yoRadio documentation. The hardware implementations should still be 100% compatible.
Documentation will be slowly improved.
- Display fixes and other fixes from yoRadio up to v0.9.693 which should include:
- fixed incorrect behavior of the
HIDE_VUsetting - fixed
CORRUPT HEAPerror when playing "invalid links" - optimized code of utfToAscii
- fixed artifacts in scrolling text
- fixed SD card connection bug in configurations with
SD_SPIPINSdefined - time synchronization setting (maybe?)
- fixed bug with redundant epoch time being added to the tag in SD mode (maybe?)
- fixed clock display bug when exiting screensaver in playback mode
- increased number of SD card initialization attempts when switching mode
- fixed bug with incorrect text clipping on scrolling widgets
- display performance optimization
- to improve rendering smoothness, a framebuffer has been added for TFT SPI displays ST7735, ST7789, ILI9341, GC9106, ST7796, GC9A01A, ILI9488, ILI9486
- the framebuffer is applied only to moving elements (scrolling text, VU meter, clock)
- the framebuffer works on modules with additional PSRAM
- on such modules, the framebuffer is enabled automatically, no extra steps required
- to disable the framebuffer, add #define USE_FBUFFER false in myoptions.h
- on modules without PSRAM, the framebuffer is disabled by default. It can be forced on by adding
#define SFBUFFERinmyoptions.h - but in that case, free memory (as well as HTTPS streams) will be severely limited
- fixed compilation error for Nextion displays
- code cleanup, optimization, and refactoring (actually with 2 different codebases, it may have been made more spaghettified)
- fixed compilation error for certain displays when
#define DSP_INVERT_TITLE falseis set - fixed compilation error for
DSP_DUMMY
- fixed incorrect behavior of the
- Major fixes to online updater (if running an older version, need to manually flash)
- WebUI fixed for mobile displays
- MQTT added to WebUI options / defaults set by adding defines to
myoptions.h#define MQTT_ENABLEto enable (will not be available otherwise)- defaults can be set with (Still editable in WebUI):
#define MQTT_HOST "192.168.1.2"#define MQTT_PORT 1883#define MQTT_USER "mqttuser"#define MQTT_PASS ""#define MQTT_TOPIC "ehradio/myradio/"
- Home Assistant integration fixed
- Display On toggle removed from WebUI
- new folder
builds/trip5that contain myplatformio.ini,myoptions.h,mytheme.h- these files are used by the workflow that generates the automatic builds
- using VSCode extension, can be automatically synced from root to builds/username (see notes in build folder)
- for forks, just make a sub-folder in
buildsusing their github name- must contain
platformio.iniat a minimum or the workflow will abort
- must contain
- automatic builds into Releases are triggered by tags
git tag 2025.08.12git push origin 2025.08.12
- this way, we can share configuration and platformio.ini working codes
.gitignorefile now included by default that ignores certain files- you can still use
platformio.ini,myoptions.h,mytheme.hin your root locally- but put them in
buildsif you want the automatic builds to work
- but put them in
- you can still use
- fixes to hotspot AP mode
- default AP is
ehRadiowith no password - can use
#define AP_SSID ssidnameand#define AP_PASSWORD passwordinmyoptions.h - a bit faster reponse time
- default AP is
- 12-hour mode fixed on color screens (space is now the same width as numbers)
- some more options can have their defaults set by adding defines to
myoptions.h#define SOUND_VOLUME 12sets the default of the sound volume (0 to 254, otherwise 12)#define SOUND_BALANCE truesets the default of the sound balance (-16 to 16, otherwise 0)#define EQ_TREBLE 0sets the default of the EQ treble (-16 to 16, otherwise 0)#define EQ_MIDDLE 0sets the default of the EQ middle (-16 to 16, otherwise 0)#define EQ_BASS 0sets the default of EQ bass (-16 to 16, otherwise 0)#define SD_SHUFFLE truesets the default of SD shuffle (otherwise false)#define SMART_START truesets the default of smart start (otherwise false)#define SHOW_AUDIO_INFO truesets the default of audio info (otherwise false)#define SHOW_VU_METER truesets the default of the VU meter (otherwise false)#define SOFTAP_REBOOT_DELAY 0sets the default of the soft AP reboot delay (0 to 20 minutes, otherwise 0)#define SCREEN_FLIP truesets the default of flip screen (otherwise false)#define SCREEN_INVERT truesets the default of invert display (otherwise false)#define NUMBERED_PLAYLIST truesets the default of numbered playlist (otherwise false)#define CLOCK_TWELVE truesets the default of the 12-hour clock (otherwise false)#define VOLUME_PAGE truesets the default of the volume page (otherwise false)#define SCREEN_BRIGHTNESS truesets the default of the screen brightness (otherwise 100)#define SCREEN_CONTRAST truesets the default of screen brightness (otherwise 55)- not yet editable in the UI but it should be soon.
- screensaver options (while not playing):
#define SS_NOTPLAYING trueto set the default state (otherwise false)#define SS_NOTPLAYING_BLANK truesets the default of blank (otherwise false)#define SS_NOTPLAYING_TIME 20sets the default of the timeout (5 to 65520 seconds, otherwise 20)
- screensaver options (while playing):
#define SS_PLAYING trueto set the default state (otherwise false)#define SS_PLAYING_BLANK truesets the default of blank (otherwise false)#define SS_PLAYING_TIME 5sets the default of the timeout (1 to 1080 minutes, otherwise 5)
#define VOLUME_STEPS 1sets the default of volume steps (1 to 10, otherwise 1)#define TOUCH_FLIP truesets the default of touchscreen debug (otherwise false)#define TOUCH_DEBUG truesets the default of touchscreen debug (otherwise false)#define ROTARY_ACCEL 200sets the default of the rotary encoder acceleration (1 to 700, otherwise 200)#define ONE_CLICK_SWITCH truesets the default of one-click station switching (otherwise false)#define IR_TOLERANCE 35sets the default of IR tolerance (10 to 80, otherwise 35)- during this process I also deleted many store keys that were leftover from much earlier versions of yoRadio
- WebUI colors tweaked (more changes later)
- Displays ST7796 (480x320) and ILI9488 (480x320) can have a bigger boot logo
- add
#define BIG_BOOT_LOGOtomyoptions.h- this takes up a not-small amount of flash memory so not recommended for plain ESP32
- add
- improvements from yoRadio v0.9.574 (latest as of this date)
- ST7789_76 2.25" display
- MQTT & HA improvements
- AsyncTCP & WebSockets
- vortigont's PRs (thanks!)
- display task - optimize taks delay and message handling
- page class migrated from LinkedList to std::list
- other bug fixes and optimizations
- some fixes ignored due to ongoing restructuring of yoRadio code
- probably the last time to update core functionality from yoRadio
- display code remains the same so those can be updated easily
- Forked from yoRadio 0.9.533
- was geting tired of PRs not being accepted and as you can see below (many were made previous to 2025.07.20)
- source folder structure moved up (makes more sense especially with VSCode and Platformio)
- Re-branding & Styling
- logos added to boot screens and WebUI
- color changes to display and WebUI (not 100% satisfied but good enough for now)
- replacement font with icons added into builds using
platformio.ini#define YO_FIXremoved (maybe never needed?)
- data files will no longer be compressed in the repository
- but they will be available in
Releasesas .gz files for automatic updating of SPIFFS- which means if you really wish to compress them and upload them to SPIFFs, you can
- except
rb_srvrs.jsonwhich is obtained automatically anyways
- except
- which means if you really wish to compress them and upload them to SPIFFs, you can
- but they will be available in
- a Github workflow is used to automatically update
timezones.json.gzandrb_srvrs.json- added to the repo automatically whenever a commit is made
- minor additions to UI / display options
- one-click option ignores long-press right/left
- 12-hour clock
- hide volume page (instead of using a
#define)
- BREAKING CHANGES
- requires larger app partitions
- if using 4MB flash sizeESP32, use the
ESP32-4MB.csvas your partition file (see the text file for more)
- if using 4MB flash sizeESP32, use the
- many settings will be reset to defaults
- notes were added to
config.cpphow to handle breaking and non-breaking store updates in the future - future re-flashes should not lose settings after this update
- capability to update firmware and download SPIFFS files from online has been added
- requires larger app partitions
- library dependency:
bblanchon/ArduinoJson@^6.21.3 - EEProm storage removed in favor of Preferences
- config.store variables may still be used as before
- no need to handle store version changes except by adding old ones to the "remove" list in
config.cpp- char handling improved throughout (size may be changed later with 1 edit to
config.h)- affects timezone, mdnsname, weather coordinate variables
- char handling improved throughout (size may be changed later with 1 edit to
- shorter searching for Wi-fi message
- LED_INVERT fixed (
#define LED_INVERT) - fixes for screens that can't display certain characters (add to
myoptions.h)#define YO_FIX// changes ёRadio to yoRadio for screens that can't print ё#define PRINT_FIX// fix Chinese certain screens so they don't display gibberish- hijacks
utf8RusGFX.h(which is meant for Russian model displays?)- does not interrupt this function unless
PRINT_FIXdefined
- does not interrupt this function unless
- will transliterate as many European characters as possible by dropping accents
- will transliterate Cyrillic... probably badly
- will transliterate various punctuation and currency symbols
- any characters that can't be handled will be replaced by a space
- hijacks
- ESPFileUpdater can update and download files (used in multiple places)
- a new library created for this project
- this may be used to download / update any file from online to SPIFFS
- add
#define ESPFILEUPDATER_DEBUGtomyoptions.hto get verbose output
- Online updating for pre-built BIN files and other assets
- Uses ESPFileUpdater when SPIFFS is empty or incomplete if the running program is a pre-built firmware
- the online URL path used to download SPIFFS file assets (for the running version):
#define FILESURL "https://github.com/trip5/yoradio/releases/download/2025.07.19/"
- the online URL path used to OTA update firmware:
#define UPDATEURL "https://github.com/trip5/yoradio/releases/latest/download/"
- the online file that the current version can compare it's version against:
#define CHECKUPDATEURL "https://raw.githubusercontent.com/trip5/yoradio/refs/heads/trip5/yoRadio/src/core/options.h"
- the above file must contain a line that is defined by this setting:
#define VERSIONSTRING "#define YOVERSION"(followed by a version string)
- which
.binfile to be used for online OTA updates can be specified as:#define FIRMWARE "firmware_sh1106_pcm_remote.bin"
- all of these can be automatically defined by
platformio.iniamdmyoptions.h- an example of this automatic building is at
https://github.com/trip5/yoradio/tree/trip5/ - check out
platformio-trip5-builds.ymlto see how firmwares are built and files made available online- First commit your changes to Github
- Tag your local most recent commit and push it to Github:
git tag 2025.07.20git push origin 2025.07.20
- Re-doing a tagged release:
git tag -d 2025.07.20git tag -a 2025.07.20 -m "2025.07.20"git push origin 2025.07.20 --force
- this means you can just download a .bin file and flash from a command line (see the Release page for detailed instructions)
- an example of this automatic building is at
- implements proper timezones
- uses ESPFileUpdater to download an up-to-date json to be used as a selector in the WebUI
- fetches from https://raw.githubusercontent.com/trip5/timezones.json/refs/heads/master/timezones.gz.json
- this can be a gzipped or regular json
- uses github workflow to automatically update whenever tzdb has changed
- also created for this project
- another json.gz can be used by a define in
myoptions.h(default in quotes)#define TIMEZONES_JSON_URL "https://raw.githubusercontent.com/trip5/timezones.json/master/timezones.json.gz"
- will handle Daylight Savings Times
- does not affect timed functions that use ticks (screensaver, weather)
- may have side-effects on other timed functions that don't use ticks
- timezone offset completely removed
- timezones may be changed through WebUI or telnet
- telnet has some extra functions added
TZO ±Xnow just changes to a GMT-type (non-standard is OK)TZO ±X:XXnow just changes to a custom timezone (based on GMT-type)TZPOSIXcommand can create a custom timezone (be careful)PLAY urlcan play a station not on the playlist
- Nextion displays only show timezone now, cannot change timezone
- there may be a good way to implement with + & - with GMT timezones (see
telnet.cppfor some idea) - I have no Nextion display to test (sorry!)
- there may be a good way to implement with + & - with GMT timezones (see
- regional defaults now be defined in
myoptions.h(defaults in quotes):#define TIMEZONE_NAME "Europe/Moscow"#define TIMEZONE_POSIX "MSK-3"#define SNTP_1 "pool.ntp.org"#define SNTP_2 "0.ru.pool.ntp.org"#define WEATHER_LAT "55.7512"#define WEATHER_LON "37.6184"- all can still be edited using WebUI
- Radio station search via Radio Browser API
- performs search queries to a https://www.radio-browser.info/ server
- uses ESPFileUpdater to download an up-to-date json of API servers
- another json can be used by a define in options.h
#define RADIO_BROWSER_SERVERS_URL "https://all.api.radio-browser.info/json/servers"inmyoptions.h
- another json can be used by a define in options.h
- handles down API servers gracefully (and they do go down fairly often)
- uses ESPFileUpdater to download JSON search results directly from the API to the ESP's file system
- previous searches are saved and not lost on reboot (100 results, page number)
- saved searches will be deleted on reboot if they are older than 24 hours
- search results shows station name, country code, codec, bitrate
- stations can be previewed (through the radio) with a play button that does not add it to the playlist
- if matches URL in the playlist will play the station from the playlist
- stations can be added with a plus button
- will not add a station which has the same URL as one already in the playlist (http & https considered same)
- Playback queue (either from playlist, search, or telnet) put into an RTOS task that runs in the background
- stability improved but slight delay added
- Improved JSON and CSV file importing
- CSV import made more resilient
- can import any type of list with fields separated by tabs or spaces
- missing name or ovol fields will continue to be imported
- for example, all of these are valid:
- space-separated values:
nap.casthost.net:8793/stream Intra Nature RadioAmbient Sleeping Pill http://radio.stereoscenic.com/asp-sSuper Relax FM https://streams.radio.menu/listen/super-relax-fm/radio.mp3 0
- tab-separated values:
Traxx FM - Ambient http://traxx011.ice.infomaniak.ch/traxx011-low.mp3 0Positively Meditation 0 https://streaming.positivity.radio/pr/posimeditation/icecast.audio0 Cryosleep http://streams.echoesofbluemars.org/8000/cryosleephttps://ice4.somafm.com/darkzone-128-mp3 Soma FM - Dark Zone 0
- just the URL
https://ice4.somafm.com/dronezone-128-mp3
- space-separated values:
- the old CSV parser is still used for the yoRadio playlist internally
- JSON import made more resilient
- can handle line-by-line files that are not enclosed in [ ]
- ie. each line looks like
{"name":"Swinging radio 60s","host":"http://s2.xrad.io","file":"/8058/stream","port":"0","ovol":"0"}
- ie. each line looks like
- can handle proper json files where all entries are enclosed in [ ]
- the field "url_resolved" will be preferred
- fallback to "url"
- finally, fallback to "host" and "file" and "port" - which will be combined into a url
- can handle line-by-line files that are not enclosed in [ ]
- in both parsers, only the url is mandatory
- if "name" is absent, it will be assumed to be the url even without http(s)://
- if "ovol" is absent, is will be assumed to be 0
- CSV import made more resilient
- Added some of Maleksm's additions and changes from v0.9.434m (04.04.25) (with some changes)
- includes improved decoding for VS1053 and PCM decoder and various codecs
- ESP8266 support completely removed
- includes BacklightDown plugin (tweaked to be non-blocking)
- dims the display after awhile
#define BRIGHTNESS_PINmust be in yourmyoptions.h#define DOWN_LEVEL 2(brightness level 0 to 255, default 2 )#define DOWN_INTERVAL 60(seconds to dim, default 60 = 60 seconds)
- use
#define HIDE_VOLPAGEto hide the separate page showing volume (uses the progress bar instead)
Web-radio based on ESP32-audioI2S or/and ESP32-vs1053_ext library
- Hardware
- Connection tables
- Software dependencies
- Hardware setup
- Quick start
- Detailed start
- Update
- Update over web-interface
- Controls
- MQTT
- Home Assistant
- More features
- Plugins
- Version history
- Описание на 4PDA
https://github.com/e2002/yopcb
More images in Images.md
ESP32 board: https://aliexpress.com/item/32847027609.html
I2S DAC, roughly like this one: https://aliexpress.com/item/1005001993192815.html
https://aliexpress.com/item/1005002011542576.html
or VS1053b module : https://aliexpress.com/item/32893187079.html
https://aliexpress.com/item/32838958284.html
https://aliexpress.com/item/32965676064.html
- ST7735 1.8' or 1.44' https://aliexpress.com/item/1005002822797745.html
- or SSD1306 0.96' 128x64 I2C https://aliexpress.com/item/1005001621806398.html
- or SSD1306 0,91' 128x32 I2C https://aliexpress.com/item/32798439084.html
- or Nokia5110 84x48 SPI https://aliexpress.com/item/1005001621837569.html
- or ST7789 2.4' 320x240 SPI https://aliexpress.com/item/32960241206.html
- or ST7789 1.3' 240x240 SPI https://aliexpress.com/item/32996979276.html
- or SH1106 1.3' 128x64 I2C https://aliexpress.com/item/32683094040.html
- or LCD1602 16x2 I2C https://aliexpress.com/item/32305776560.html
- or LCD1602 16x2 without I2C https://aliexpress.com/item/32305776560.html
- or SSD1327 1.5' 128x128 I2C https://aliexpress.com/item/1005001414175498.html
- or ILI9341 3.2' 320x240 SPI https://aliexpress.com/item/33048191074.html
- or ILI9341 2.8' 320x240 SPI https://aliexpress.com/item/1005004502250619.html
- or SSD1305 (SSD1309) 2.4' 128x64 SPI/I2C https://aliexpress.com/item/32950307344.html
- or SH1107 0.96' 128x64 I2C https://aliexpress.com/item/4000551696674.html
- or GC9106 0.96' 160x80 SPI (looks like ST7735S, but it's not him) https://aliexpress.com/item/32947890530.html
- or LCD2004 20x4 I2C https://aliexpress.com/item/32783128355.html
- or LCD2004 20x4 without I2C https://aliexpress.com/item/32783128355.html
- or ILI9225 2.0' 220x176 SPI https://aliexpress.com/item/32952021835.html
- or Nextion displays - more info
- or ST7796 3.5' 480x320 SPI https://aliexpress.com/item/1005004632953455.html?sku_id=12000029911293172
- or GC9A01A 1.28' 240x240 https://aliexpress.com/item/1005004069703494.html?sku_id=12000029869654615
- or ILI9488 3.5' 480x320 SPI https://aliexpress.com/item/1005001999296476.html?sku_id=12000018365356570
- or ILI9486 (Testing mode) 3.5' 480x320 SPI https://aliexpress.com/item/1005001999296476.html?sku_id=12000018365356568
- or SSD1322 2.8' 256x64 SPI https://aliexpress.com/item/1005003480981568.html
- or ST7920 2.6' 128x64 SPI https://aliexpress.com/item/32699482638.html
- or ST7789 2.25' 284x76 SPI https://aliexpress.ru/item/1005009016973081.html
(see Wiki for more details)
- Three tact buttons https://www.aliexpress.com/item/32907144687.html
- Encoder https://www.aliexpress.com/item/32873198060.html
- Joystick https://aliexpress.com/item/4000681560472.html
https://aliexpress.com/item/4000699838567.html - IR Control https://www.aliexpress.com/item/32562721229.html
https://www.aliexpress.com/item/33009687492.html - Touchscreen https://aliexpress.com/item/33048191074.html
- DS1307 or DS3231 https://aliexpress.com/item/4001130860369.html
Use this tool to build your own connection table and myoptions.h file.
https://e2002.github.io/docs/myoptions-generator.html
Library Manager: Adafruit_GFX, Adafruit_ST7735*, Adafruit_SSD1306*, Adafruit_PCD8544*, Adafruit_SH110X*, Adafruit_SSD1327*, Adafruit_ILI9341*, Adafruit_SSD1305*, TFT_22_ILI9225* (* depending on display model), OneButton, IRremoteESP8266, XPT2046_Touchscreen, RTCLib
Github: ESPAsyncWebServer, AsyncTCP, async-mqtt-client (if you need MQTT support) <<< starting with version 0.8.920, these libraries have been moved into the project, and there is no need to install them additionally.
See wiki for details
Don't edit the options.h!
Hardware is adjustment in the myoptions.h file.
Important! You must choose between I2S DAC and VS1053 by disabling the second module in the settings:
// If I2S DAC used:
#define I2S_DOUT 27
#define VS1053_CS 255
// If VS1053 used:
#define I2S_DOUT 255
#define VS1053_CS 27Define display model:
#define DSP_MODEL DSP_ST7735 /* default - DSP_DUMMY */The ST7735 display submodel:
#define DTYPE INITR_BLACKTAB // 1.8' https://aliexpress.ru/item/1005002822797745.html
//#define DTYPE INITR_144GREENTAB // 1.44' https://aliexpress.ru/item/1005002822797745.htmlRotation of the display:
#define TFT_ROTATE 3 // 270 degreesNote: If INITR_BLACKTAB dsp have a noisy line on one side of the screen, then in Adafruit_ST7735.cpp:
// Black tab, change MADCTL color filter
if ((options == INITR_BLACKTAB) || (options == INITR_MINI160x80)) {
uint8_t data = 0xC0;
sendCommand(ST77XX_MADCTL, &data, 1);
_colstart = 2; // ← add this line
_rowstart = 1; // ← add this line
}- Arduino IDE version 2.x.x is not supported. Use Arduino IDE 1.8.19
- ESP32 core version 2.0.0 or higher is required!
- Generate a myoptions.h file for your hardware configuration using this tool.
- Put myoptions.h file next to ehRadio.ino.
- Replace file Arduino/libraries/Adafruit_GFX_Library/glcdfont.c with file yoRadio/fonts/glcdfont.c
- Restart Arduino IDE.
- In ArduinoIDE - upload sketch data via Tools→ESP32 Sketch Data Upload (it's here)
- Upload the sketch to the board
- Connect to yoRadioAP access point with password 12345987, go to http://192.168.4.1/ configure and wifi connections.
*this step can be skipped if you add WiFiSSID WiFiPassword pairs to the yoRadio/data/data/wifi.csv file (tab-separated values, one line per access point) before uploading the sketch data in step 1 - After successful connection go to http://<yoipaddress>/ , add stations to playlist (or import WebStations.txt from KaRadio)
- Well done!
See wiki for details
- Backup your settings:
download http://<yoradioip>/data/playlist.csv and http://<yoradioip>/data/wifi.csv and place them in the yoRadio/data/data/ folder - In ArduinoIDE - upload sketch data via Tools→ESP32 Sketch Data Upload
- Upload the sketch to the board
- Go to page http://<yoradioip>/ in the browser and press Ctrl+F5 to update the scripts.
- Well done!
- Backup your settings:
download http://<yoradioip>/data/playlist.csv and http://<yoradioip>/data/wifi.csv and place them in the yoRadio/data/data/ folder - Get firmware binary: Sketch → Export compiled binary
- Get SPIFFS binary: disconnect ESP32 from your computer, click on ESP32 Data Sketch Upload.
You will get an error and file path
- Go to page http://<yoradioip>/update and upload ehRadio.ino.esp32.bin and yoRadio.spiffs.bin in turn, checking the appropriate upload options.
- Well done!
- Copy file examples/mqttoptions.h to yoRadio/ directory
- In the mqttoptions.h file, change the options to the ones you need
- Well done!
- Requires MQTT integration
- Copy directory HA/custom_components/yoradio to .homeassistant/custom_components/
- Add yoRadio entity into .homeassistant/configuration.yaml (see example)
- Restart Home Assistant
- Add Lovelace Media Player card to UI (or mini-media-player card)
- Well done!
-
Can add up to 65535 stations to a playlist. Supports and imports KaRadio playlists (WebStations.txt)
-
Telnet with KaRadio format output
see list of available commands -
MQTT support
Topics:
MQTT_ROOT_TOPIC/command - Commands
MQTT_ROOT_TOPIC/status - Player status
MQTT_ROOT_TOPIC/playlist - Playlist URL
MQTT_ROOT_TOPIC/volume - Current volume
Commands:
prev - prev station
next - next station
toggle - start/stop playing
stop - stop playing
start, play - start playing
boot, reboot - reboot
volm - step vol down
volp - step vol up
vol x - set volume
play x - play station x -
Home Assistant support
The Plugin class serves as a base class for creating plugins that hook into various system events.
To use it, inherit from Plugin and override the necessary virtual methods.
Place your new class in the src/plugins/<MyPlugin> directory
More details can be found in the comments within the yoRadio/src/pluginsManager/pluginsManager.h file and at here.
Additional examples are provided in the examples/plugins folder.
Work is in progress...
- fixed compilation error for esp32 core version lower than 3.0.0
- fixed error setting display brightness to 1
- fixed error setting IR tolerance value (upload a new file
options.html.gzvia WEB Board Uploader and press Ctrl+F5 on the settings page)
- optimization of webserver/socket code in netserver.cpp, part#1
- added support for ArduinoOTA (OTA update from Arduino IDE) (disabled by default)
to enable you need to add to myoptions.h:#define USE_OTA true
set password: in myoptions.h#define OTA_PASS "myotapassword12345" - in web interface added basic HTTP authentication capability (disabled by default)
to enable you need to add to myoptions.h:
#define HTTP_USER "user"
#define HTTP_PASS "password" - added "emergency firmware uploader" form (for unforeseen cases) http://ipaddress/emergency
- added config (sys.config) telnet command that displays the same information usually shown over serial at boot.
- bug fixes 🪲
- fixed a bug with resetting all parameters when resetting only one section of parameters
- fixed bug with saving ntp server #1 value
In this version, the contents of the data/www directory have changed, so that the first time you flash it, you will be greeted by WEB Board Uploader. Just upload all the files from data/www (11 pcs) to it
or -> !!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- fixed a bug with saving smartstart mode
- fixed a bug with no restart when initially uploading files to spiffs
- fixed a bug with hanging on unavailable hosts
- fixed a bug with attempting to connect with an empty playlist
- fixed a bug with passing strings with quotes in mqtt
- fixing some other bugs
- web interface rewritten from scratch (well, almost), bugs added 👍
- added listening to links in the browser in playlistEditor
- buttons reboot (reboot) format (spiffs format) and reset (reset settings to default) have been added to the settings
- the beginnings of theming (theme.css) (just a list of global colors that can be changed, and then uploaded to theme.css via WB uploader)
- fixed the issue with exiting Screensaver Blank Screen mode via button presses and IR commands.
- reduced the minimum frequency for tone control on I2S modules to 80Hz.
- increased the display update task delay to 10 TICKS.
to revert to the previous setting, add
#define DSP_TASK_DELAY 2tomyoptions.h. - when ENCODER2 is connected, the UP and DOWN buttons now work as PREV and NEXT (single click).
- implemented backlight off in Screensaver Blank Screen mode.
- fixed freezing after SD scanning during playback
- AsyncWebSocket queue increased to 128
- fixed VU meter overlapping the clock on displays
- fixed Guru Meditation error when loading in SD mode with SD card removed
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- added screensaver mode during playback, configurable via the web interface, pull request#129
- added blank screen mode to screensaver, configurable via the web interface, pull request#129 Thanks to @trip5 for the amazing code!
- speeding up indexing of SD cards (advice - don't put all files in one folder)
- i don't remember (honestly) why the AsyncTCP server worked on the same core with the player, now it works on the same core with the display
#define CONFIG_ASYNC_TCP_RUNNING_CORE 0 - bug fixes
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- added mDNS support, configurable via the web interface, pull#125
- added a setting that allows you to switch stations with the UP and DOWN buttons immediately, bypassing the playlist, configurable via the web interface, pull#125
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- added a screensaver mode, configurable via the web interface.
- changes to the tone control algorithm for the VS1053.
- updated the VU meter algorithms - shamelessly borrowed from @schreibfaul1, (thanks a lot!)
- fixed the magic error "HSPI" redefined.
- fixed compilation error for ESP32 cores >= 3.1.0
- fixed freezing error with incorrectly configured RTC module
- [www|uart|telnet] new command
mode- change SD/WEB mode. (0 - WEB, 1 - SD, 2 - Toggle) example: http://<ipaddress>/?mode=2
- fixed the issue with saving settings for TIMEZONE.
- fixed the issue with displaying the settings page on fresh ESP modules after saving the weather key (a reset may be required)
- fixed the issue with saving settings on fresh ESP modules.
- fixed the issue with the non-functional HSPI bus
- SD Card - optimization and bug fixes
- Config - improvements and bug fixes
- Added stream format display in the web interface !!! A full update is required, including SPIFFS Data !!!
(Alternatively, upload the newstyle.css.gzandscript.js.gzfiles via the web interface.) - The content of
ehRadio.inohas been moved tosrc/main.cpp - [www|uart|telnet] new command:
reset- resets settings to default values. More details - Fixed compilation error:
'ets_printf' was not declared in this scope
- fixed freezing when loading without plugins in some configurations "running dots"
-
Added parameters for configuring
LED_BUILTINon ESP32S3 modules:USE_BUILTIN_LED: Determines whether to use the built-inLED_BUILTIN(default istrue).LED_BUILTIN_S3: Specifies a custom pin for the built-inLED_BUILTIN. Used in combination withUSE_BUILTIN_LED = false(default is255).
Note: For ESP32S3 boards, no changes are required by default; the onboard LED will work as expected.
These settings were added to allow disabling the built-in LED or reassigning it to a custom pin. -
New class for plugin management, enabling multiple plugins to be assigned to each function.
More details can be found in the comments within theyoRadio/src/pluginsManager/pluginsManager.hfile and at here.
Additional examples are provided in theexamples/pluginsfolder. Backward compatibility: The old method of adding plugins will remain functional for some time in future versions but will eventually be deprecated and removed.
- fixed compilation error for OLED displays
- fixed compilation error audioVS1053Ex.cpp:181:5: error: 'sdog' was not declared in this scope
- fixed the error of subscribing to mqtt topic on some systems
- added support for Arduino ESP32 v3.0.0 and later
- disabled SD indexing on startup; now the card is indexed only if the
data/index.datfile is missing from the card - IRremoteESP8266 library integrated into the project (
yoRadio/src/IRremoteESP8266)
- added support for ESP32-S3 boards (ESP32 S3 Dev Module) (esp32 cores version 3.x.x is not supported yet)
- fixes in displaying sliders in the web interface
- HA component >> bug fixes in the component for newer versions of Home Assistant
- added the ability to play SDCARD without an Internet connection. More in Wiki
- fixed an issue where it was impossible to reconnect when the WiFi connection was lost
- fixed an "Guru Meditation Error" when playing streams with the ESP32 v2.0.10 and higher core installed
- fixed date display bug for ILI9488/ILI9486 displays
- fixed a hang bug when switching to SD mode after removing the SD
- fixed a hangup error when the connection to the stream was lost in WEB mode
- added support for DS1307 or DS3231 RTC module (you need to install the RTCLib library in the library manager)
- setup
#define RTC_MODULE DS3231 /* or DS1307 */
#define RTC_SDA <pin>
#define RTC_SCL <pin>
- fixed a hang bug when scrolling through an SD playlist with an encoder in configurations with VS1053B
- fixed a hang bug when quickly switching SD / WEB modes from the WEB interface in configurations with VS1053B
- fixes in the logic of work
- fix compilation error 'class NetServer' has no member named 'resetQueue'
- SD card playlist moved from SPIFFS to SD card
- new parameter #define SD_MAX_LEVELS - Search depth for files on SD card
- fixed bugs with SD card in multi-threaded mode
- fixed SD prelist indexing error when switching Web>>SD
- fixed a bug of switching to the next track when accidentally playing SD
- fixed import of large playlists (tried). PS: import playlist size is limited by SPIFFS size (SPIFFS.totalBytes()/100*65-SPIFFS.usedBytes() = approximately 60kb )
- new url parameter - http://YPRADIOIP/?clearspiffs - for clearing tails from SD playlist
- optimization of the issuance of the WEB-interface
- brought back the functionality of the track slider
- fixing bugs in the application logic
- fixed a bug when importing a playlist
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- implementation of WEB/SD mode switching without reboot
- replacement of SD cards without turning off the power
- switching WEB / SD from the web interface. full update required, including SPIFFS Data
- fixing the Home Assistant integration behavior logic
- SD_HSPI parameter now works. Pins HSPI - 13(MOSI) 12(MISO) 14(CLK)
- new parameter SD_SPIPINS.
#define SD_SPIPINS sck, miso, mosi - sck, miso, mosi - any available pins. Used for "TTGO Tm Music Album" boards
#define SD_SPIPINS 14, 2, 15 - fixed a bug with garbage appearing on display ILI9225
- the slider for moving along the SD track is temporarily not working.
- bug fixes
- OneButton library moved to the project
- fixed bitrate display error when playing SD on VS1053B modules
- added forced shutdown of smartstart when WebSocket freezes on problem stations
- added bitrate icon when playing files from SD card
- fix html markup errors
- fixed errors 403 Account already in use, 401 Authorization required
- fixed bitrate icon overflow bug
- fix html markup errors
- fixed bug of random change of playback location when playing files from SD card
- added bitrate badget for displays ST7789, ST7796, ILI9488, ILI9486, ILI9341, ILI9225 and ST7735(BLACKTAB) (disable: #define BITRATE_FULL false)
- fixed a bug with garbage appearing on display ILI9225
- fixed NOKIA5110 display invert/off bug
- fixed a bug with smartstart playback when the power is turned off
- fixed error reconnecting to WiFi when connection is lost
- ADDED a compilation error when choosing a board other than "ESP32 Dev Module" or "ESP32 Wrover Module"
- fixed crash in configurations with NOKIA5110 displays
- fixed bug with displaying buffer indicator when switching audioinfo
- fixed bug with displaying the buffer indicator when the connection is lost
- fixed bug of MUTE_PIN failure when connection is lost
- other minor fixes
- fixed a bug in the operation of SSD1305 displays
- fixed bug in operation of LCD1602/2004 displays
- fixed errors in Serial Monitor output
- optimization and bug fixes (display, player, netserver, telnet. mqtt)
- monospace fonts for clock on TFT displays. Fonts can be restored to their original form by adding the
#define CLOCKFONT_MONO falseparameter to the myoptions.h file - new parameter
#define COLOR_CLOCK_BG R,G,B- color of inactive clock segments
- added support for ST7920 128x64 2.6' OLED display https://aliexpress.com/item/32699482638.html
- added support for SSD1322 256x64 2.8' OLED display https://aliexpress.com/item/1005003480981568.html
- optimization of the display of the list of stations
- now the playlist size can be changed with one parameter in the yoRadio/src/displays/conf/displayXXXXconf.h file --> const ScrollConfig playlistConf param #3
- fixed fonts for ILI9225 display
- fixes in Nextion displays
- bug fixes (including BUFFER FILLED IN 403 MS)
- fixed compilation error netserver.cpp:63:28 for some configurations
- added WEB Board Uploader. ESP32 Filesystem Uploader is no longer needed, the initial setup can be done in the browser. (see wiki for more info)
- fixed error getting weather for some locations
- fixed error displaying access point credentials when DSP_INVERT_TITLE is false
- fixed compilation error for OLED displays when DSP_INVERT_TITLE is false
- DSP_INVERT_TITLE now works for all displays when assigned
#define DSP_INVERT_TITLE falsethe display title takes on a "classic" look (light letters on a dark background) - advanced weather display - wind direction and strength, feels like
- sea level pressure changed to surface pressure
- added degree icon [*ps]
- displaying the WiFi signal level in graphical form [*ps]
[*ps] - glcdfont.c from the Adafruit_GFX_Library library has been changed to add new icons, so for the correct display of all this, you need to replace the specified file in the Adafruit_GFX library with the file from the yoRadio/fonts/ folder
- fixed reboot error after sending media from Home Assistant
- fixed bug when playing media from Home Assistant for VS1053
- fix grammar errors
- added support for remote media playback from Home Assistant (Local Media, Radio Browser, TTS)
- HA component >> fixed bugs of getting and generating a playlist
- added support for ILI9488 display
- added support for ILI9486 display in testing mode
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
Please backup playlist.csv and wifi.csv before updating.
- fixed bug with displaying horizontal scroll in playlist
- fixed compilation error with IR_PIN=255
- libraries async-mqtt-client, AsyncTCP, ESPAsyncWebServer moved to the project
- new parameter #define XTASK_MEM_SIZE - buffer size for AsyncTCP task (4096 by default)
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
Please backup playlist.csv and wifi.csv before updating.
- added SD Card support (more info in connection table and examples/myoptions.h)
- added MODE button to switch SD/WEB modes (more info in Controls.md)
- asterisk on the remote control now switches SD/WEB modes
- double click BTN_CENTER and ENC_BTNB now toggles SD/WEB modes
- bug fixes
- bootlog added
- fixed work of start/stop button in configurations with DSP_DUMMY
- fixed unclosed comment in examples/myoptions.h
- fixed compilation error without encoder
- added numeric IR remote buttons in configurations with DSP_DUMMY
- fixed navigation bug in playlist with more than 255 stations
- fixed work of encoders in configurations with DSP_DUMMY
- fixed missing volume value bug when switching to volume control dialog
- LED_BUILTIN is now 255 by default (off)
- fixed compilation error with BOOMBOX_STYLE parameter
- fixes in default configuration for GC9A01A display
- added support for GC9A01A display https://aliexpress.com/item/1005004069703494.html?sku_id=12000029869654615
- increased length of SSID string to 30 characters (requires full update + ESP32 Data Upload)
- fixed artifacts when adjusting the volume on OLED displays
- fixed bug with missing current station in playlist on OLED displays
- new parameter DSP_INVERT_TITLE - invert colors in station name for OLED displays (more details in examples/myoptions.h)
- added support for ST7796 display
- added support for capacitive touch GT911
- HSPI bus support added - DSP_HSPI, VS_HSPI, TS_HSPI options More details in examples/myoptions.h
- changed the method of connecting the touchscreen in myoptions.h Now instead of specifying TS_CS, you must specify TS_MODEL (by default TS_MODEL_UNDEFINED) More details in examples/myoptions.h
- new parameters TS_SDA, TS_SCL, TS_INT, TS_RST for GT911 touchscreen
- new parameters LIGHT_SENSOR and AUTOBACKLIGHT - to automatically adjust the brightness of the display. More details in examples/myoptions.h
- new parameter LED_INVERT (true/false) - to invert the behavior of the built-in LED
- fixed bug with extra sign } in humidity value
- fixed artifacts when displaying the volume level
- changes in mytheme.h . Added colors COLOR_PL_CURRENT, COLOR_PL_CURRENT_BG, COLOR_PL_CURRENT_FILL. Details in examples/mytheme.h
- fix INITR_MINI160x80 compiling error
- fix ENC_INTERNALPULLUP description in examples/myoptions.h
- rewritten the display engine
- added the ability to position widgets on the display using configuration files. More info in yoRadio/src/displays/conf/ and here https://github.com/e2002/yoradio/wiki/Widgets
- the VU_PARAMS3 parameter is deprecated. VUmeter configuration is done through yoRadio/src/displays/conf/ configs
- added bitrate display on displays
- added the ability to display the weather on all displays except LCD1602
- examples of plug-ins related to displaying information on the display are outdated and no longer work. The examples have been removed from the examples/plugins folder.
- the structure of the project files has been changed so that I don’t know what.
- localization of information displayed on the display (rus, en). Option L10N_LANGUAGE (EN by default. see examples/myoptions.h for details)
- changes in mytheme.h . Added colors COLOR_STATION_BG, COLOR_STATION_FILL, COLOR_BITRATE
- optimization, refactoring
- bugs fixes
- bugs adding
- probably something else that I forgot .__.
- fixed compilation error when using NEXTION display with DUMMY display
- added control via uart (see list of commands). The uart and telnet commands are the same.
- added additional commands
- added control via GET/POST (see list of commands)
- fixed clock operation when configured with DSP_DUMMY
- fixed RSSI display in web interface when configured with DSP_DUMMY
- added brightness control/on/off nextion displays from the web interface
- new parameter WAKE_PIN (to wake up esp after sleep command earlier than given time (see examples/myoptions.h and list of commands)
- minor memory optimization
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
Please backup playlist.csv and wifi.csv before updating.
- fixed playlist break down when saving it
- fixed bug with cropped song titles on single line displays (GC9106, ST7735mini, N5110 etc.)
- netserver - optimization and refactoring
- web interface optimization
- the AUDIOBUFFER_MULTIPLIER parameter is deprecated. New parameter AUDIOBUFFER_MULTIPLIER2. If everything works fine, then it is better not to touch it.
- new setting VS_PATCH_ENABLE (see PS)
- fixing other bugs
PS: A bug was found with the lack of sound on some (not all) green VS1053 boards. If there is no sound, you need to assign in myoptions
#define VS_PATCH_ENABLE false
On red boards and normally working green boards, nothing else needs to be done.
- fixed non latin long titles of songs error
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
Please backup playlist.csv and wifi.csv before updating.
- added the ability to themize color displays. Details in examples/mytheme.h
- in this connection, examples of plugins displayhandlers.ino and rssibitrate.ino have been updated
- parameter VU_PARAMS2 is deprecated. New parameter - VU_PARAMS3. Details in yoRadio/display_vu.h
- added deepsleep capability for LCD_I2C and OLED displays
- in this connection, a full update with Sketch data upload is required
- in this connection, example of plugin deepsleep.ino (examples/plugins/deepsleep.ino) have been updated
- some bug fixes
- updating libraries ESP32-audioI2S and ESP32-vs1053_ext to the latest version
- optimization of the web interface during playback
- fixed one js bug. a full update with Sketch data upload is desirable
- plugin example for esp deep sleep when playback is stopped (examples/plugins/deepsleep.ino)
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
Please backup playlist.csv and wifi.csv before updating.
- added the ability to configure parameters through the web interface
- new parameter BRIGHTNESS_PIN - pin for adjusting the brightness of the display. Details in examples/myoptions.h
- the weather plugin is integrated into the code, the settings are made through the web interface
PS: Due to the change in the storage location of settings in the ESP memory, settings such as:
smartstart, audioinfo, time zone, IR remote, last volume level, last played station, equalizer
will have to be configured again through the web interface. Please understand and forgive.
- fix initialization of some vs1053b green boards
- fix VU initialization on vs1053b boards
- fixed choppy of sound when volume adjustment
- fixed initialisation of Nextion displays
- added support for Nextion displays (more info)
- fixed work of VU Meter
- fixed time lag when adjusting the volume / selecting a station
- optimization of work with the DSP_DUMMY option
- some bug fixes
- adding VU meter for displays ST7735 160x80, GC9106 160x80, ILI9225 220x176, ST7789 240x240
- TFT_22_ILI9225 library is integrated into the project
- adding VU meter for displays ST7735 160x128, ST7735 128x128, ILI9341 320x240, ST7789 320x240
option ENABLE_VU_METER (see myoptions.h for example)
!!! Important !!!
if you enable this feature on the esp32 wroom, due to lack of memory, you must modify the file Arduino/libraries/AsyncTCP/src/AsyncTCP.cpp
replace the line 221
_xTaskCreateUniversal(_async_service_task, "async_tcp", 8192 * 2, NULL, 3, &async_service_task_handle, CONFIG_ASYNC_TCP_RUNNING_CORE);
with
_xTaskCreateUniversal(_async_service_task, "async_tcp", 8192 / 2, NULL, 3, &async_service_task_handle, CONFIG_ASYNC_TCP_RUNNING_CORE);
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- adding an IR remote control has been moved to the web-interface (more info in Controls.md)
- fixed broken internal DAC on esp32 core 2.0.3 and highest
- fixed compilation errors with esp32 core 2.0.4
!!! a full update with Sketch data upload is required. After updating please press CTRL+F5 in browser !!!
- fixed a bug when saving a playlist with special characters in the name and url
- fixed a bug when saving wifi settings with special characters in the name and password
- fixed css bugs
- remove ZERO WIDTH NO-BREAK SPACE (BOM, ZWNBSP) from stream title
- added support for ST7789 1.3' 240x240 SPI displays
!!! Important !!! This display requires further development when used in conjunction with the VS1053 module.
See this link for details https://www.instructables.com/Adding-CS-Pin-to-13-LCD/
- fixed display bugs in the rssibitrate plugin
- fixed some compilation warnings
- fix compilation error in rssibitrate plugin with ILI9225 display
- fixed SPI-display bugs when used with VS1053B module
- added example plugin for analog volume control (examples/plugins/analogvolume.ino)
- added example plugin for backlight control depending on playback (examples/plugins/backlightcontrols.ino)
- added example plugin for replace a RSSI to bitrate information alternately (examples/plugins/rssibitrate.ino)
- fixed ILI9225 display bug when used with VS1053B module
- fixed ILI9225 plugin support
- added support for ILI9225 220x176 SPI displays
- added support for I2S internal DAC, option I2S_INTERNAL (see myoptions.h for example)
(this option worked only with esp32 core version==2.0.0) - new option SOFT_AP_REBOOT_DELAY (see myoptions.h for example)
- fixed MQTT connection when WiFi reconnected
- fixed date display for ILI9341 displays
- fixed garbage on volume control with displays ILI9341
- fixed interface blocking error when synchronizing time
- time sync optimization
- new option SNTP_SERVER, to set your custom server for synchronization (see myoptions.h for example)
- added support for LCD2004 displays
- added support for SSD1305/SSD1309 I2C displays
- fixed rotation of SH1106 display
- fixed encoder internal pullup
- change encoder library to ai-esp32-rotary-encoder (injected to project)
- added new option VOL_ACCELERATION - volume adjustment acceleration by encoder (see myoptions.h for example)
- fixed connection error with http-stations on esp32-core v2.0.3
- fixed css errors (a full update is required)
- added update via web-interface
Attention! Full firmware with chip re-partitioning is required! see board setup example - fixed choppy when switching stations via Home Assistant
- new option PLAYER_FORCE_MONO (with i2S DAC only)
- change default scroll speed in DSP_NOKIA5110
- improved reconnect to WiFi on connection loss
- fixed choppy playback on DSP_ST7735 displays used with VS1053
- new option PL_WITH_NUMBERS (show the number of station in the playlist)
- fixed compiling error with DSP_DUMMY option
- correction of displays GC9106 and SSD1305
- fixed errors in the operation of the second encoder
- rewrote plugin example
- fixed compilation errors on macOS #2
- please backup your playlist and wifi settings before updating (export)
- accelerated displays up to ~30fps (everything except LCD)
- corrections/additions in the WEB interface (a full update is required)
- rewrote plugin example
- fixed compilation errors on macOS
- changed the logic of the second encoder (switching to the volume control mode by double click)
- optimization, bug fixes
- probably some other things that I forgot about %)
- added support for GC9106 160x80 SPI displays
- fixed compiling error with DSP_DUMMY option
- fixed compiling error with DSP_1602I2C / DSP_1602 option
- the logic of division by cores has been changed
- fixed choppy playback (again)
- improvements in the stability of the web interface
- increased smoothness of the encoder
- bug fixes
- bug fixes
- fixed choppy playback
- added displays SSD1327, ILI9341, SSD1305/SSD1309, SH1107, 1602
- added touchscreen support
- tasks are divided into cores, now the sound is not interrupted when selecting stations / volume
- increased speed of some displays
- optimization of algorithms, bugs fixes
- added something similar to plugins
- added two buttons BTN_UP, BTN_DOWN
- added the pins for the second encoder ENC2_BTNL, ENC2_BTNB, ENC2_BTNR
- fixed display of playlist with SSD1306 configuration
- improvements in the displays work
- bugs fixes, some improvements
- added support for SSD1306 128x32 I2C displays
- added support for ST7789 320x240 SPI displays
- added support for SH1106 I2C displays
- added support for 1602 16x2 I2C displays
- a little modified control logic
- added buttons long press feature
- small changes in options.h, check the correctness of your myoptions.h file
- bugs fixes
- fixed bug Equalizer not come visible after go to playlist
(a full update is required) - fixed playlist filling error in home assistant component
- fixed garbage in MQTT payload
- MQTT support
- added support for digital buttons for the IR control
(num keys - enter number of station, ok - play, hash - cancel) - added buttons for exporting settings from the web interface
- added MUTE_PIN to be able to control the audio output
- fixed js/html bugs (a full update is required)
- fixed playlist scrollbar in Chrome (a full update is required)
- fix "Could not decode a text frame as UTF-8" websocket error //Thanks for Verholazila
- fix display of non-latin characters in the web interface
- fix css in Chrome (a full update is required)
- IR repeat fix
- added support for IR control
- new options in options.h (ENC_INTERNALPULLUP, ENC_HALFQUARD, BTN_INTERNALPULLUP, VOL_STEP) //Thanks for Buska1968
- compilation error for module SSD1306 with arduino-esp32 version newest than 2.0.0
- fix compiler warnings in options.h
- fix some compiler warnings
- added control of balance and equalizer for VS1053
- TFT_ROTATE and st7735 DTYPE moved to myoptions.h
- fixed compilation error bug when using VS1053 together with ST7735
- fix VS1003/1053 reseting
- fix css in Firefox
- fix font in NOKIA5110 display
- added support for VS1053 module in testing mode
- added timezone config by telnet
- fix telnet output
- some separation apples and oranges
- excluded required installation of all libraries for displays
- added support for Nokia 5110 SPI displays
- some bugs fixes
- ovol reading bug
- display connection algorithm changed
- added support for myoptions.h file for custom settings
- vol steps 0..256 (in ESP32-audioI2S)
- added support for SSD1306 I2C displays
- fixed broken buttons.







