# ёRadio ![ёRadio Logo](yoRadio/data/www/elogo100.png) ##### Web-radio based on [ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S) library --- - [Hardware](#hardware) - [Connection tables](#connection-tables) - [Software dependencies](#dependencies) - [Hardware setup](#hardware-setup) - [Quick start](#quick-start) - [More features](#more-features) - [Version history](#version-history) --- ##### More images in [Images.md](Images.md) --- ## Hardware #### Required: **ESP32 board**: https://aliexpress.ru/item/32847027609.html \ **I2S DAC**, roughly like this one: https://aliexpress.ru/item/1005001993192815.html \ https://aliexpress.ru/item/1005002011542576.html #### Optional: ##### Displays - **ST7735** 1.8' or 1.44' https://aliexpress.ru/item/1005002822797745.html - or **SSD1306** 0.96' I2C https://aliexpress.ru/item/1005001621806398.html - or **Nokia5110** 84x48 SPI https://aliexpress.ru/item/1005001621837569.htmlz ##### Controls Three tact buttons or Encoder or all together --- ## 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 | | 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 | | Buttons, Encoder | ESP-32 | options.h | | ------ | ------ | ------ | | GND | GND | - | | PIN | * | ENC_BTNx, BTN_xxx | _\* 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: Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\*, Adafruit_PCD8544\*, (\* depending on display model), ESP32Encoder, OneButton, [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP) #### 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_ ```` /* DISPLAY MODEL * 0 - DUMMY * 1 - ST7735 * 2 - SSD1306 * 3 - NOKIA5110 */ #define DSP_MODEL 1 ```` The ST7735 display model is configured in the file [src/displays/displayST7735.cpp](yoRadio/src/displays/displayST7735.cpp) ```` #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 ST7735 display is configured in the file [src/displays/displayST7735.h](yoRadio/src/displays/displayST7735.h) ```` #define TFT_ROTATE 3 // 180 degress ```` If there is 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 1. In ArduinoIDE - upload sketch data (Tools→ESP32 Sketch Data Upload) 2. Upload the sketch to the board ([example of the board connection](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://\/ , 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) --- ## 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, next - next station \ cli.toggle, toggle - start/stop \ cli.stop, stop - stop \ cli.start, start, cli.play, play - start playing \ cli.play("x"), play(x), play x - play station x \ cli.vol, vol - the current value of volume (0-254) \ cli.vol("x"), vol(x), vol x - set volume (0-254) \ cli.audioinfo, audioinfo - the current value of debug (0-1) \ cli.audioinfo("x"), audioinfo(x), audioinfo x - debug on/off (0-1) \ cli.smartstart, smartstart - the current value of smart start \ cli.smartstart("x"), smartstart(x), smartstart x - smart start: 2-off, 0-1 - start playing on boot, if the radio was playing before the reboot \ cli.list, list - get playlist \ cli.info, info - get current state \ sys.boot, boot, reboot - reboot \ sys.date - date/time --- ## Version history #### 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.