Files
yoradio/README.md
2022-03-22 15:03:42 +03:00

352 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ёRadio
![ёRadio Logo](yoRadio/data/www/elogo100.png)
##### Web-radio based on [ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S) or/and [ESP32-vs1053_ext](https://github.com/schreibfaul1/ESP32-vs1053_ext) library
---
- [Hardware](#hardware)
- [Connection tables](#connection-tables)
- [Software dependencies](#dependencies)
- [Hardware setup](#hardware-setup)
- [Quick start](#quick-start)
- [Update](#update)
- [Controls](Controls.md)
- [MQTT](#mqtt)
- [Home Assistant](#home-assistant)
- [More features](#more-features)
- [Version history](#version-history)
---
<img src="images/img0.jpg" width="830" height="443">
##### More images in [Images.md](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** 320x240 SPI https://aliexpress.com/item/32960241206.html
- or **SH1106** 128x64 I2C https://aliexpress.com/item/32683094040.html
- or **1602** 16x2 I2C https://aliexpress.com/item/32305776560.html
##### Controls
- Three tact buttons https://www.aliexpress.com/item/32907144687.html
- Encoder https://www.aliexpress.com/item/32873198060.html
- IR Control https://www.aliexpress.com/item/32562721229.html \
https://www.aliexpress.com/item/33009687492.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 |
| 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 | ESP-32 | options.h |
| ------ | ------ | ------ |
| GND | GND | - |
| PIN | * | ENC_BTNx, BTN_xxx, LED_BUILTIN, IR_PIN |
_\* Any free pin, configured in options.h_ \
_\** GPIOs 34-39 don't have software pullup/down functions. For encoder/buttons use an external pullup resistor, 10 kOhm works here_
---
## Dependencies
#### Libraries:
**Library Manager**: Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\*, Adafruit_PCD8544\*, (\* depending on display model), ESP32Encoder, OneButton, IRremoteESP8266 \
**Github**: [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP), [async-mqtt-client](https://github.com/marvinroger/async-mqtt-client)* \
\* _if you need MQTT support_
#### Tool:
[ESP32 Filesystem Uploader](https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/)
---
## Hardware setup
Hardware is connected in the **[options.h](yoRadio/options.h)** file. \
_so that the settings are not overwritten when updating git, you need to put the file **myoptions.h** ([exsample](exsamples/myoptions.h)) in the root of the project and make settings in it_ \
**Important!**
You must choose between I2S DAC and VS1053 by disabling the second module in the settings:
````c++
// 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:
````c++
/* DISPLAY MODEL
* 0 - DUMMY
* 1 - ST7735
* 2 - SSD1306
* 3 - NOKIA5110
*/
#define DSP_MODEL 1
````
The ST7735 display submodel:
````c++
#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:
````c++
#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:
````c++
// 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
1. In ArduinoIDE - upload sketch data via Tools→ESP32 Sketch Data Upload ([it's here](images/board2.jpg))
2. Upload the sketch to the board ([example of the board settings](images/board.jpg))
3. 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](yoRadio/data/data/wifi.csv) file (tab-separated values, one line per access point) before uploading the sketch data in step 1_
4. After successful connection go to http://\<yoipaddress\>/ , add stations to playlist (or import WebStations.txt from KaRadio)
5. Well done!
**Localization:**
Если Adafruit_GFX ещё не русифицирована, русифицировать её, заменив файл Arduino/libraries/Adafruit_GFX_Library/glcdfont.c файлом [yoRadio/fonts/glcdfont.c](yoRadio/fonts/glcdfont.c)
---
## Update
1. Backup your settings: \
download _http://\<yoradioip\>/data/playlist.csv_ and _http://\<yoradioip\>/data/wifi.csv_ and place them in the yoRadio/data/data/ folder
2. In ArduinoIDE - upload sketch data via Tools→ESP32 Sketch Data Upload
3. Upload the sketch to the board
4. Go to page _http://\<yoradioip\>/_ in the browser and press Ctrl+F5 to update the scripts.
5. Well done!
---
## MQTT
1. Copy file exsamples/mqttoptions.h to yoRadio/ directory
2. In the mqttoptions.h file, change the options to the ones you need
3. Well done!
---
## Home Assistant
<img src="images/ha.jpg" width="500" height="270"><br />
0. Requires [MQTT integration](https://www.home-assistant.io/integrations/mqtt/)
1. Copy directory HA/custom_components/yoradio to .homeassistant/custom_components/
2. Add yoRadio entity into .homeassistant/configuration.yaml ([see exsample](HA/exsample_configuration.yaml))
3. Restart Home Assistant
4. Add Lovelace Media Player card to UI (or [mini-media-player](https://github.com/kalkih/mini-media-player) card)
5. Well done!
---
## More features
- Сan add up to 65535 stations to a playlist. Supports and imports [KaRadio](https://github.com/karawin/Ka-Radio32) 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](exsamples/displayhandlers.ino).\
Work is in progress...
---
## Version history
#### 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](https://github.com/e2002/yoradio/issues/1) \
(a [full update](#update) is required)
- fixed playlist filling error in home assistant component
#### v0.4.322
- fixed garbage in MQTT payload
#### v0.4.320
- MQTT support
<img src="images/mqtt.jpg" width="680" height="110">
#### 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](#update) is required)
#### v0.4.298
- fixed playlist scrollbar in Chrome (a [full update](#update) is required)
#### v0.4.297
- fix _"Could not decode a text frame as UTF-8"_ websocket error _//Thanks for [Verholazila](https://4pda.to/forum/index.php?s=&showtopic=1010378&view=findpost&p=113551446)_
- fix display of non-latin characters in the web interface
- fix css in Chrome (a [full update](#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](https://4pda.to/forum/index.php?s=&showtopic=1010378&view=findpost&p=113385448)_
- с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.