Web-radio based on ESP32-audioI2S or/and ESP32-vs1053_ext library
- Hardware
- Connection tables
- Software dependencies
- Hardware setup
- Quick start
- Update
- Update over web-interface
- Controls
- MQTT
- Home Assistant
- More features
- Plugins
- Version history
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 SH1106 1.3' 128x64 I2C https://aliexpress.com/item/32683094040.html
- or 1602 16x2 I2C https://aliexpress.com/item/32305776560.html
- or 1602 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 SSD1305 (SSD1309) 2.4' 128x64 SPI 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
- 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
SPI Display | ESP-32 | options.h |
---|---|---|
GND | GND | - |
VCC | +5v | - |
SCL | 18 | - |
SDA | 23 | - |
CSL | 5* | TFT_CS |
RSTL | 15* | TFT_RST |
DCL | 4* | TFT_DC |
NOKIA5110 | ESP-32 | options.h |
---|---|---|
RST | 15* | TFT_RST |
CE | 5* | TFT_CS |
DC | 4* | TFT_DC |
DIN | 23 | - |
CLK | 18 | - |
VCC | +3v3 | - |
GND | GND | - |
I2C Display | ESP-32 | options.h |
---|---|---|
GND | GND | - |
VCC | +5v | - |
SDA | 13* | I2C_SDA |
SCL | 14* | I2C_SCL |
LCD 1602 | ESP-32 | options.h |
---|---|---|
GND | GND | - |
VCC | +5v | - |
RS | any* | LCD_RS |
E | any* | LCD_E |
D4 | any* | LCD_D4 |
D5 | any* | LCD_D5 |
D6 | any* | LCD_D6 |
D7 | any* | LCD_D7 |
Touchscreen | ESP-32 | options.h |
---|---|---|
GND | GND | - |
VCC | +3.3v | - |
CLK | 18 | - |
DIN | 23 | - |
DO | 19 | - |
IRQ | N/C | - |
CS | any* | TS_CS |
I2S DAC | ESP-32 | options.h |
---|---|---|
GND | GND | - |
VIN | +5v | - |
DOUT(DIN) | 27* | I2S_DOUT |
BCLK | 26* | I2S_BCLK |
LRC(WSEL) | 25* | I2S_LRC |
VS1053 | ESP-32 | options.h |
---|---|---|
XDCS | 25* | VS1053_DCS |
XCS | 27* | VS1053_CS |
XRST | EN* | VS1053_RST |
DERQ | 26* | VS1053_DREQ |
SCK | 18 | - |
MOSI | 23 | - |
MISO | 19 | - |
5V | +5V | - |
DGND | GND | - |
## Important! You must choose between I2S DAC and VS1053 by disabling the second module in the settings (see below)
Buttons, Encoder, LED, IR, Joystick | ESP-32 | options.h |
---|---|---|
GND | GND | - |
PIN | any* | ENC_BTNx, BTN_xxx, LED_BUILTIN, IR_PIN |
* Any free pin, configured in myoptions.h
** GPIOs 34-39 don't have software pullup/down functions. For encoder/buttons use an external pullup resistor, 10 kOhm works here.
** GPIO 16 and 17 are used by PSRAM on the WROVER modules.
Library Manager: Adafruit_GFX, Adafruit_ST7735*, Adafruit_SSD1306*, Adafruit_PCD8544*, Adafruit_SH110X*, Adafruit_SSD1327*, Adafruit_ILI9341*, Adafruit_SSD1305*, (* depending on display model), ESP32Encoder, OneButton, IRremoteESP8266, XPT2046_Touchscreen
Github: ESPAsyncWebServer, AsyncTCP, async-mqtt-client*
* if you need MQTT support
Dont 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 27
Define 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.html
Rotation of the display:
#define TFT_ROTATE 3 // 270 degrees
Note: 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 core for the ESP32 v2.0.0 or higgest is required!
- In ArduinoIDE - upload sketch data via Tools→ESP32 Sketch Data Upload (it's here)
- Upload the sketch to the board
- Connect to yoRadioAP acces 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!
Localization: Если Adafruit_GFX ещё не русифицирована, русифицировать её, заменив файл Arduino/libraries/Adafruit_GFX_Library/glcdfont.c файлом yoRadio/fonts/glcdfont.c
- 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 yoRadio.ino.esp32.bin and yoRadio.spiffs.bin in turn, checking the appropriate upload options.
- Well done!
- Copy file exsamples/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 exsample)
- Restart Home Assistant
- Add Lovelace Media Player card to UI (or mini-media-player card)
- Well done!
-
Сan add up to 65535 stations to a playlist. Supports and imports KaRadio playlists (WebStations.txt)
-
Telnet with KaRadio format output
Commands:
cli.prev (or simply prev) - previous station
cli.next or next - next station
cli.toggle or toggle - start/stop
cli.stop or stop - stop
cli.start or start or cli.play or play - start playing
cli.play("x") or play(x) or play x - play station x
cli.vol or vol - display the current value of volume (0-254)
cli.vol("x") or vol(x) or vol x - set volume (0-254)
cli.audioinfo or audioinfo - display the current value of debug (0-1)
cli.audioinfo("x") or audioinfo(x) or audioinfo x - debug on/off (0-1)
cli.smartstart or smartstart - display the current value of smart start
cli.smartstart("x") or smartstart(x) or smartstart x - smart start: 2-off, 0-1 - start playing on boot, if the radio was playing before the reboot
cli.list or list - display playlist
cli.info or info - display current state
sys.boot or boot or reboot - reboot
sys.date - sync date/time and display it
sys.tzo or tzo - display the timezone offset
sys.tzo("h:m") or tzo(h:m) or tzo h:m - set timezone offset
sys.tzo("h") or tzo(h) or tzo h - set timezone offset in hours only -
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
At the moment, you can display additional information on the display by writing a few additional functions. There is no documentation yet, you will have to deal with the example, which is in file exsamples/displayhandlers.ino.
Work is in progress...
- 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
- сompilation 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.