mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-15 16:07:05 +03:00
Merge branch 'master' into nvs_parameters
# Conflicts: # .cproject # Makefile # README.md # components/cmd_nvs/cmd_nvs.c # components/cmd_system/cmd_system.c # components/cmd_system/cmd_system.h # components/driver_bt/CMakeLists.txt # components/wifi-manager/CMakeLists.txt # components/wifi-manager/Kconfig.projbuild # components/wifi-manager/code.js # components/wifi-manager/component.mk # components/wifi-manager/dns_server.c # components/wifi-manager/dns_server.h # components/wifi-manager/http_server.c # components/wifi-manager/http_server.h # components/wifi-manager/index.html # components/wifi-manager/style.css # components/wifi-manager/wifi_manager.c # components/wifi-manager/wifi_manager.h # main/CMakeLists.txt # main/console.c # main/esp_app_main.c # sdkconfig.defaults
This commit is contained in:
145
README.md
145
README.md
@@ -1,7 +1,76 @@
|
||||
# Getting pre-compiled binaries
|
||||
An automated build was configured to produce binaries on a regular basis, from common templates that are the most typical. They can be downloaded from :
|
||||
# Squeezelite-esp32
|
||||
## Supported Hardware
|
||||
### SqueezeAMP
|
||||
Works with the SqueezeAMP see [here](https://forums.slimdevices.com/showthread.php?110926-pre-ANNOUNCE-SqueezeAMP-and-SqueezeliteESP32) and [here](https://github.com/philippe44/SqueezeAMP/blob/master/README.md)
|
||||
|
||||
https://github.com/sle118/squeezelite-esp32/releases
|
||||
Use the `squeezelite-esp32-SqueezeAmp-sdkconfig.defaults` configuration file.
|
||||
|
||||
### ESP32-WROVER + I2S DAC
|
||||
Squeezelite-esp32 requires esp32 chipset and 4MB PSRAM. ESP32-WROVER meets these requirements.
|
||||
To get an audio output an I2S DAC can be used. Cheap PCM5102 I2S DACs work others may also work. PCM5012 DACs can be hooked up via:
|
||||
|
||||
I2S - WROVER
|
||||
VCC - 3.3V
|
||||
3.3V - 3.3V
|
||||
GND - GND
|
||||
FLT - GND
|
||||
DMP - GND
|
||||
SCL - GND
|
||||
BCK - 26
|
||||
DIN - 22
|
||||
LCK - 25
|
||||
FMT - GND
|
||||
XMT - 3.3V
|
||||
|
||||
Use the `squeezelite-esp32-I2S-4MFlash-sdkconfig.defaults` configuration file.
|
||||
|
||||
## Setting up ESP-IDF
|
||||
### Docker
|
||||
You can use docker to build squeezelite-esp32
|
||||
First you need to build the Docker container:
|
||||
```
|
||||
docker build -t esp-idf .
|
||||
```
|
||||
Then you need to run the container:
|
||||
```
|
||||
docker run -i -t -v `pwd`:/workspace/squeezelite-esp32 esp-idf
|
||||
```
|
||||
The above command will mount this repo into the docker container and start a bash terminal
|
||||
for you to then follow the below build steps
|
||||
|
||||
### Manual Install of ESP-IDF
|
||||
<strong>Currently this project requires a specific combination of IDF 4 with gcc 5.2. You'll have to implement the gcc 5.2 toolchain from an IDF 3.2 install into the IDF 4 directory in order to successfully compile it</strong>
|
||||
|
||||
You can install IDF manually on Linux or Windows (using the Subsystem for Linux) following the instructions at: https://www.instructables.com/id/ESP32-Development-on-Windows-Subsystem-for-Linux/
|
||||
And then copying the i2s.c patch file from this repo over to the esp-idf folder
|
||||
|
||||
## Building Squeezelite-esp32
|
||||
MOST IMPORTANT: create the right default config file
|
||||
- for all libraries, add -mlongcalls.
|
||||
- make defconfig
|
||||
(Note: You can also copy over config files from the build-scripts folder to ./sdkconfig)
|
||||
Then adapt the config file to your wifi/BT/I2C device (can also be done on the command line)
|
||||
- make menuconfig
|
||||
Then
|
||||
|
||||
```
|
||||
# Build recovery.bin, bootloader.bin, ota_data_initial.bin, partitions.bin
|
||||
# force appropriate rebuild by touching all the files which may have a RECOVERY_APPLICATION specific source compile logic
|
||||
find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -type f -print0 | xargs -0 grep -l "RECOVERY_APPLICATION" | xargs touch
|
||||
export PROJECT_NAME="recovery"
|
||||
make -j4 all EXTRA_CPPFLAGS='-DRECOVERY_APPLICATION=1'
|
||||
make flash
|
||||
#
|
||||
# Build squeezelite.bin
|
||||
# Now force a rebuild by touching all the files which may have a RECOVERY_APPLICATION specific source compile logic
|
||||
find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -type f -print0 | xargs -0 grep -l "RECOVERY_APPLICATION" | xargs touch
|
||||
export PROJECT_NAME="squeezelite"
|
||||
make -j4 app EXTRA_CPPFLAGS='-DRECOVERY_APPLICATION=0'
|
||||
python ${IDF_PATH}/components/esptool_py/esptool/esptool.py --chip esp32 --port ${ESPPORT} --baud ${ESPBAUD} --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0x150000 ./build/squeezelite.bin
|
||||
# monitor serial output
|
||||
make monitor
|
||||
|
||||
```
|
||||
|
||||
# Configuration
|
||||
1/ setup WiFi
|
||||
@@ -20,68 +89,49 @@ At this point, the device should have disabled its built-in access point and sho
|
||||
- Add or change any additional command line option (for example player name, etc)
|
||||
- Activate squeezelite execution: this tells the device to automatiaclly run the command at start
|
||||
- Update the configuration
|
||||
- Reboot
|
||||
- click on the "start toggle" button. This will force a reboot.
|
||||
- The toggle switch should be set to 'ON' to ensure that squeezelite is active after booting
|
||||
|
||||
3/ set bluetooth & airplaysink name (if you want something other than default)
|
||||
3/ Updating Squeezelite
|
||||
- From the firmware tab, click on "Check for Updates"
|
||||
- Look for updated binaries
|
||||
- Select a line
|
||||
- Click on "Flash!"
|
||||
- The system will reboot into recovery mode (if not already in that mode), wipe the squeezelite partition and download/flash the selected version
|
||||
|
||||
*this will eventually be moved to the web configuration*
|
||||
3/ Recovery
|
||||
- From the firmware tab, click on the "Recovery" button. This will reboot the ESP32 into recovery, where additional configuration options are available from the NVS editor
|
||||
|
||||
you need to be connected to the device using a usb to serial adapter, with a terminal program (for example putty) opened on that serial port.
|
||||
- To setup the bluetooth sink name, enter the following command
|
||||
|
||||
nvs_set bt_sink_name str -v "your_bt_name_here"
|
||||
|
||||
- To setup the airplay sink name, enter the following command
|
||||
|
||||
nvs_set airplay_sink_name str -v "your_airplay_name_here"
|
||||
|
||||
# Additional command line notes
|
||||
# Additional command line notes, configured from the http configuration
|
||||
The squeezelite options are very similar to the regular Linux ones. Differences are :
|
||||
|
||||
- the output is -o [\"BT -n <sinkname>\"] | [I2S]
|
||||
|
||||
- the output is -o ["BT -n '<sinkname>' "] | [I2S]
|
||||
- if you've compiled with RESAMPLE option, normal soxr options are available using -R [-u <options>]. Note that anything above LQ or MQ will overload the CPU
|
||||
|
||||
- if you've used RESAMPLE16, <options> are (b|l|m)[:i], with b = basic linear interpolation, l = 13 taps, m = 21 taps, i = interpolate filter coefficients
|
||||
|
||||
For example, so use a BT speaker named MySpeaker, accept audio up to 192kHz and resample everything to 44100 and use 16 bits resample with medium quality, the command line is:
|
||||
|
||||
To add options that require quotes ("), escape them with \". For example, so use a BT speaker named MySpeaker and resample everything to 44100 (which is needed with Bluetooth) and use 16 bits resample with medium quality, the command line is:
|
||||
squeezelite -o "BT -n 'BT <sinkname>'" -b 500:2000 -R -u m -Z 192000 -r "44100-44100"
|
||||
|
||||
nvs_set autoexec1 str -v "squeezelite -o \"BT -n 'MySpeaker'\" -b 500:2000 -R -u m -Z 192000 -r \"44100-44100\""
|
||||
See squeezlite command line, but keys options are
|
||||
|
||||
# Building Squeezelite-esp32
|
||||
MOST IMPORTANT: create the right default config file
|
||||
```
|
||||
make defconfig
|
||||
```
|
||||
Then adapt the config file to your wifi/BT/I2C device (can alos be done on the command line)
|
||||
```
|
||||
make menuconfig
|
||||
```
|
||||
Then you will need to build the recovery binary and squeezelite binary:
|
||||
```
|
||||
# Build recovery.bin, bootloader.bin, ota_data_initial.bin, partitions.bin
|
||||
PROJECT_NAME="recovery" make -j4 all EXTRA_CPPFLAGS='-DRECOVERY_APPLICATION=1'
|
||||
# Now force a rebuild by touching all the files which may have a RECOVERY_APPLICATION specific source compile logic
|
||||
find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -type f -print0 | xargs -0 grep -l "RECOVERY_APPLICATION" | xargs touch
|
||||
# Build squeezelite.bin
|
||||
PROJECT_NAME="squeezelite" make -j4 app EXTRA_CPPFLAGS='-DRECOVERY_APPLICATION=0'
|
||||
- Z <rate> : tell LMS what is the max sample rate supported before LMS resamples
|
||||
- R (see above)
|
||||
- r "<minrate>-<maxrate>"
|
||||
|
||||
make flash monitor
|
||||
```
|
||||
|
||||
Once the application is running, under monitor, you can monitor the system activity.
|
||||
|
||||
- for all libraries, add -mlongcalls.
|
||||
## Additional misc notes to do you build
|
||||
- as of this writing, ESP-IDF has a bug int he way the PLL values are calculated for i2s, so you *must* use the i2s.c file in the patch directory
|
||||
- for all libraries, add -mlongcalls.
|
||||
- audio libraries are complicated to rebuild, open an issue if you really want to
|
||||
- libmad, libflac (no esp's version), libvorbis (tremor - not esp's version), alac work
|
||||
- libfaad does not really support real time, but if you want to try
|
||||
- -O3 -DFIXED_POINT -DSMALL_STACK
|
||||
- change ac_link in configure and case ac_files, remove ''
|
||||
- compiler but in cfft.c and cffti1, must disable optimization using
|
||||
- compiler but in cfft.c and cffti1, must disable optimization using
|
||||
#pragma GCC push_options
|
||||
#pragma GCC optimize ("O0")
|
||||
#pragma GCC pop_options
|
||||
- opus & opusfile
|
||||
- opus & opusfile
|
||||
- for opus, the ESP-provided library seems to work, but opusfile is still needed
|
||||
- per mad & few others, edit configure and change $ac_link to add -c (faking link)
|
||||
- change ac_files to remove ''
|
||||
@@ -90,11 +140,10 @@ Once the application is running, under monitor, you can monitor the system activ
|
||||
- set IDF_PATH=/home/esp-idf
|
||||
- set ESPPORT=COM9
|
||||
- update flash partition size
|
||||
- other compiler #define
|
||||
- other compiler #define
|
||||
- use no resampling or set RESAMPLE (soxr) or set RESAMPLE16 for fast fixed 16 bits resampling
|
||||
- use LOOPBACK (mandatory)
|
||||
- use BYTES_PER_FRAME=4 (8 is not fully functionnal)
|
||||
- LINKALL (mandatory)
|
||||
- NO_FAAD unless you want to us faad, which currently overloads the CPU
|
||||
- TREMOR_ONLY (mandatory)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user