16 KiB
ёRadio
Web-radio based on ESP32-audioI2S or/and ESP32-vs1053_ext library
- Hardware
- Connection tables
- Software dependencies
- Hardware setup
- Quick start
- Update
- Controls
- MQTT
- Home Assistant
- More features
- Plugins
- Version history
More images in Images.md
Hardware
Required:
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
Optional:
Displays
- 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
Controls
- 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
Connection tables
| 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.
Dependencies
Libraries:
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
Tool:
Hardware setup
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
}
Quick start
- 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 (example of the board settings)
- 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
Update
- 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!
MQTT
- Copy file exsamples/mqttoptions.h to yoRadio/ directory
- In the mqttoptions.h file, change the options to the ones you need
- Well done!
Home Assistant
- 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!
More features
-
С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
Plugins
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...
Version history
v0.6.210
- 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
v0.6.202
- fixed errors in the operation of the second encoder
- rewrote plugin example
- fixed compilation errors on macOS #2
v0.6.200
- 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 %)
v0.6.120
- added support for GC9106 160x80 SPI displays
- fixed compiling error with DSP_DUMMY option
- fixed compiling error with DSP_1602I2C / DSP_1602 option
v0.6.110
- 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
v0.6.012
- fixed choppy playback
v0.6.010
- 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
v0.5.070
- added something similar to plugins
v0.5.035
- 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
v0.5.020
- added support for SSD1306 128x32 I2C displays
v0.5.010
- 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
v0.4.323
- fixed bug Equalizer not come visible after go to playlist
(a full update is required) - fixed playlist filling error in home assistant component
v0.4.322
- fixed garbage in MQTT payload
v0.4.320
- MQTT support
v0.4.315
- 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)
v0.4.298
- fixed playlist scrollbar in Chrome (a full update is required)
v0.4.297
- 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)
v0.4.293
- IR repeat fix
v0.4.292
- 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
v0.4.260
- added control of balance and equalizer for VS1053
- TFT_ROTATE and st7735 DTYPE moved to myoptions.h
v0.4.251
- fixed compilation error bug when using VS1053 together with ST7735
v0.4.249
- fix VS1003/1053 reseting
- fix css in Firefox
- fix font in NOKIA5110 display
v0.4.248
- added support for VS1053 module in testing mode
v0.4.210
- added timezone config by telnet
- fix telnet output
- some separation apples and oranges
v0.4.199
- excluded required installation of all libraries for displays
v0.4.197
- added support for Nokia 5110 SPI displays
- some bugs fixes
v0.4.183
- ovol reading bug
v0.4.182
- display connection algorithm changed
- added support for myoptions.h file for custom settings
v0.4.180
- vol steps 0..256 (in ESP32-audioI2S)
v0.4.177
- added support for SSD1306 I2C displays
- fixed broken buttons.

