Closed DerPicknicker closed 1 year ago
Hi guys,
I am planing to build a device with this great software. But I am not sure if the software supports that specific i2s dac (TAS5805M)... I am planning to buy one of these: https://www.tindie.com/products/sonocotta/louder-esp32/ @philippe44 added the ability to send commands to DAC for models that aren't supported or of the box. So it is definitely doable with a bit of configuration. Alternatively, I think @philippe44 still has some SqueezeAmp in stock, which he sells at cost.
Another question: The central unit is the LMS. The multiroom-sync is done on the LMS, right? So if I stream to LMS I can select the device inside the webUI, the esp32 is not involved in that right? How long does it take to start the stream in LMS and the esp32 starts playing? You are correct. When LMS is used to stream audio, you can either use LMS web UI or one of the excellent control applications for Android or Apple devices. Our firmware boots in under 7 seconds and is ready to playback from there. The delay for playback from LMS is short but depends on your source. Local playback is relatively quick with very little delay. Streaming from Spotify involves a couple more things on the server but not a lot more delay.
It is possible to synchronize several players and LMS sends corrections when needed. Personally, I sync 3 zones on a regular basis, 2 of which are in the same space and you could swear that they are hard wired together.
Hi @sle118 ...
thank you for the response.. I want to know if I buy one if you would support me to get this thing running.
Do you know how much the SqueezeAmp is?
Do you think I can build a 2.1 System wirelessly? So that I can group a subwoofer, two smaller speakers as one group and the sub is playing the lower frequencies and the other speaker are playing the other frequencies?
@philippe44 Is this board pre-soldered? How much are them and does it have an external antenna?
thank you for the response.. I want to know if I buy one if you would support me to get this thing running.
Since we don't have one of these devices, we can't really help, but we can certainly provide some guidance, although the Logitech forums are probably a better place to get some support. Others have configured different DAC themselves.
Do you know how much the SqueezeAmp is?
Can't remember. You should have a read here: https://forums.slimdevices.com/forum/user-forums/3rd-party-hardware/108002-announce-the-squeezeamp-next-generation-squeezeboxen-amplifier-receiver
I think there are some infos towards the end.
Do you think I can build a 2.1 System wirelessly? So that I can group a subwoofer, two smaller speakers as one group and the sub is playing the lower frequencies and the other speaker are playing the other frequencies?
I have not tried that and not sure how cross over would work, but I suspect it's possible. @philippe44?
@philippe44 Is this board pre-soldered? How much are them and does it have an external antenna?
They are pre soldered, yes, but no external antenna. They are also perfect for turning a pair of old speakers into a battery powered portable wireless speakers (I built two of these for my own usage). You can stream Bluetooth, AirPlay and Spotify (in addition to LMS of course)
I will buy one of the tindy ones.. It's quite cheap and for my usecase it's ideal. Should I create an GitHub issue or post it in the linked forum?
The SqueezeAMP is fully assembled and comes with a case https://github.com/philippe44/SqueezeAMP
The SqueezeAMP is fully assembled and comes with a case https://github.com/philippe44/SqueezeAMP
Could you give me a figure how much is anSquerzeAMP? I found a old number in the thread (around 60$) is that still valid?
Do you think a wireless 2.1 System is possible? I am still thinking about the Tindie Offer for me the shipment is quite low and the price 20€ incl. esp32 seems fair. Do you have an link where I can check the manual config? I searched here in the GitHub but I found only something for tested hardware... Thank you in advance!
I just did a batch a few weeks ago. It cost me 58USD per unit, that include a casing. Shipment is usually USD12. It's a non-profit thing, means I'm just passing the cost the PCB assembly house is charging me + taxes. You could do a 2.1 but that needs more one device. The TI chip on SqueezeAMP is not 2.1
Hi @philippe44 ...
Thank you for the response.. I will think about. For now I will test it first with a cheaper one. I meant that the 2.1 system is controlled by LMS so that LMS sends the Bass-Channel to a different esp32 than the 2 speaker channels.
@sle118 ..
I found a max98357a in my electronics box. Can I use this for testing it out?
@sle118 ..
I found a max98357a in my electronics box. Can I use this for testing it out?
Most definitely yes. These i2s boards don't have an active i2c communication interface and therefore don't require commands to be sent for them to work. Just hook it up to a WROVER and you're good to go. Since i2s is a one way protocol, you could also probably just wire up these in parallel (e.g. one for speakers and one for sub, although these don't provide much power), but experimenting is the best way to find out
@sle118 ...
Thank you for your great Response.. I will try that as soon as possible. For now I tested only two x86 Devices (Mac and windows) I am blown away: Bad Wifi signal but it's still totally in sync. I just had to increase the delay of one player about 6ms... but it's awesome. What a Cool tech.. Now I will never buy Sonos stuff. Its crazy how good that LMS handles that.. Now I am thinking about buying Squeezeboxes lol...
TLDR: I am blown away. Now I can really think about using ESP32... Lets see.
Best advice is to go and scourge the forums as they are a massive pile of unstructured knowledge.
Fun fact is that slimproto, which is at the heart of most features including sync, is close to 20 years old or so, and was so well thought of that it still works wonder today. https://en.m.wikipedia.org/wiki/Slim_Devices
The main reason I started this port of squeezelite to the esp32 with the invaluable contribution of Philippe (seriously, the project wouldn't be closer to half of what it is without him) was that squeezebox devices were hard to find and expensive. So our goal was to come up with a platform that could totally replace original hardware while being accessible by enthusiasts for a low cost.
Here the Logitech Squeezes are cheap. A touch one cost around 50$ - 80$ and Radio ones starting at 35$...
Only the duet is quite expensive 120$.. This device looks still quite Cool.
@sle118 Just for my understanding the S3 are not part of the official release. Does it have big impacts on the performance? I thought the CPU is basically the same.I have some S3 laying around. But my development setup is already migrated to IDF 5, so would it be possible IF the performance is really improved about the normal esp32 that you can send me a pre-build binary?
I've made a build for the s3 and all the code currently checked-in works on s3, I have one device working. @wizmo is tweaking it. You need esp-idf 4.4 at minimum. There a BIG improvement in CPU because of the memory and if you chose Octal SPI and Octal SPIRAM, it's 1/3 of the esp32 CPU., but you lose BT.
@philippe44 ..
I will try to build that. If not I will stay on esp32. My model has 16mb Flash and 8mb ram. Great model and cheap (8$..)
Do you know how long it will take until the S3 is also available as an "official" release?
Is there a way to support the development in a monetary way? I can't support coding, only testing due the small amount of Time...
It's a matter of finding the time for @sle118 and myself. But it should easily build - I'm building it everyday with the same code. I did all the heavy lifting last summer.
I've got an ESP-Louder here. ~~Tried to flash generic image via Webinstaller. But that bootloops. I assume cuz it comes with a WemosD32 included which as a WROOM module but the ESP32 Louder has 4MB PSRAM on the AMP Board so you need to included that while building i assume.~~ Edit: Web Flasher was broken at that time!
Edit: Seems to be an issue with the Web Installer... did a full reflash of everything with ESP32 FlashTool and now it boots properly!
Edit 2: Seems like i have some issues with the Setup... i don't get any Audio.
I think i set the pins correctly right?
Only thing that's missing is the "I2C device address. e.g. 106" which i dont know. because the Scan ends empty.
Edit3: okay okay i get it... the TAS5805M is still Offline...
For other codecs that might require an I2C commands, please use the parameter "dac_controlset" that allows definition of simple commands to be sent over i2c for init, power, speakder and headset on and off using a JSON syntax:
Original Firmware uses the Command: Tas5805m.init();
Which can be found here and does:
esp_err_t tas5805m::init()
{
/* Register the PDN pin as output and write 1 to enable the TAS chip */
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_OUTPUT;
io_conf.pin_bit_mask = TAS5806M_GPIO_PDN_MASK;
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
gpio_config(&io_conf);
gpio_set_level(TAS5806M_GPIO_PDN, 0);
vTaskDelay(20 / portTICK_RATE_MS);
gpio_set_level(TAS5806M_GPIO_PDN, 1);
vTaskDelay(200 / portTICK_RATE_MS);
/* initialize I2C to drive the TAS5806M */
// ret = i2c_master_init();
// if (ret != ESP_OK)
// {
// ESP_LOGE(TAS5806M_TAG, "I2C could not be initialized.");
// return ret;
// }
return ESP_OK;
}
@haldi4803 ... So did you get it running with audio..?
This is way over my head.... but as far as i get it we simply need to pull pin33 low and then high again to get the DAC to boot. But i have absolutely no idea how to do that on SqueezeElite-ESP32 Seems like i accidently set pin33 as mute.... but it's not like there is a damn mute button on Bluetooth or Airplay... so cant test. And i haven't found the command for mute via Serial either.
Ping @sle118 & @philippe44
INDEED!
Found it.
set_GPIO33=vcc
turned it on!
I (2372876) messaging: i2cdetect
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- 2d -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
------------------------------------------------------------------------------------
Detected the following devices (names provided by https://i2cdevices.org/addresses).
45 [2dh]- CAP1188 AD5248 AD5251 AD5252 CAT5171
--------
45 was correct. (found that in the other Code) #define TAS5806M_ADDRESS 0x2D /*!< 7-bit address with a 15k pull up resistor */
But it seems like the "init" is only the booting up... We still need the "begin" part as well.
void tas5805m::begin()
{
/* sound is ready */
log_d("I2S is ready, setup of the audio amp begin");
vTaskDelay(1000 / portTICK_RATE_MS);
/* set PDN to 1 */
gpio_set_level(TAS5806M_GPIO_PDN, 1);
vTaskDelay(100 / portTICK_RATE_MS);
log_i("Setting to HI Z");
ESP_ERROR_CHECK(_write_byte(0x03, 0x02));
vTaskDelay(100 / portTICK_RATE_MS);
log_i("Setting to PLAY");
ESP_ERROR_CHECK(_write_byte(0x03, 0x03));
vTaskDelay(100 / portTICK_RATE_MS);
int ret;
uint8_t h70 = 0, h71 = 0, h72 = 0;
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, TAS5806M_ADDRESS << 1 | WRITE_BIT, ACK_CHECK_EN);
i2c_master_write_byte(cmd, 0x70, ACK_CHECK_EN);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_TAS5806M_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
if (ret != ESP_OK)
{
log_e("I2C ERROR");
}
vTaskDelay(1 / portTICK_RATE_MS);
cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, TAS5806M_ADDRESS << 1 | READ_BIT, ACK_CHECK_EN);
i2c_master_read_byte(cmd, &h70, ACK_VAL);
i2c_master_read_byte(cmd, &h71, ACK_VAL);
i2c_master_read_byte(cmd, &h72, NACK_VAL);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_TAS5806M_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
log_d("0x70 Register: %d", h70);
log_d("0x71 Register: %d", h71);
log_d("0x72 Register: %d", h72);
}
Not entirely sure what it does...
log_i("Setting to HI Z");
ESP_ERROR_CHECK(_write_byte(0x03, 0x02));
vTaskDelay(100 / portTICK_RATE_MS);
log_i("Setting to PLAY");
ESP_ERROR_CHECK(_write_byte(0x03, 0x03));
esp_err_t tas5805m::_write_byte(uint8_t register_name, uint8_t value)
seems to be:
Edit: uhm yeah... Official Documentation on Chapter 7.5.3.1 states:
You need to reproduce this using dac_controlset entry. The syntax is in the README
Yeah...... plx halp.
{ <command>: [ {"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"}, ... {{"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"} ],
<command>: [ {"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"}, ... {{"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"} ],
... }
Taking by example the SourceCode for others.
config DAC_CONTROLSET
string
default "{ \"init\": [ {\"reg\":41, \"val\":128}, {\"reg\":18, \"val\":255} ], \"poweron\": [ {\"reg\":18, \"val\":64, \"mode\":\"or\"} ], \"poweroff\": [ {\"reg\":18, \"val\":191, \"mode\":\"and\"} ] }" if TWATCH2020
default "{\"init\":[ {\"reg\":0,\"val\":128}, {\"reg\":0,\"val\":0}, {\"reg\":25,\"val\":4}, {\"reg\":1,\"val\":80}, {\"reg\":2,\"val\":0}, {\"reg\":8,\"val\":0}, {\"reg\":4,\"val\":192}, {\"reg\":0,\"val\":18}, {\"reg\":1,\"val\":0}, {\"reg\":23,\"val\":24}, {\"reg\":24,\"val\":2}, {\"reg\":38,\"val\":9}, {\"reg\":39,\"val\":144}, {\"reg\":42,\"val\":144}, {\"reg\":43,\"val\":128}, {\"reg\":45,\"val\":128}, {\"reg\":27,\"val\":0}, {\"reg\":26,\"val\":0}, {\"reg\":2,\"val\":240}, {\"reg\":2,\"val\":0}, {\"reg\":29,\"val\":28}, {\"reg\":4,\"val\":48}, {\"reg\":25,\"val\":0}, {\"reg\":46,\"val\":33}, {\"reg\":47,\"val\":33} ]}" if MUSE
default ""
so we got the init command which sends the value 128 into the registry nr 41 ? and then 255 into reg 18
Going by his code to set hi Z
ESP_ERROR_CHECK(_write_byte(0x03, 0x02));
which uses Registry 0x03 aka #define TAS5806M_DEVICE_CTRL_2_REGISTER 0x03
which should be Register 3 on offset 3h according to documentation on chapter 7.6.1.3
Setting it to 10 = hi-Z and 11 = Play or do i set that to 2 = hi-Z and 3 = Play as it does not support hex?
the 5ms delay that is required there cannot be reproduced but is just a "let's hope thats slow enough" ?
That would end in: init:[{"reg":3, "val":2}, {"reg":3, "val":3}]
BTW i was wrong about set_GPIO.... after a reboot that does not work anymore -.- i2cdetect doesn't find the TAS5805M anymore. No matter what i do.
I can extend the json parser to include delay and gpio setting
Ok, it's done : you have 2 extra command words
"delay":<value in ms>
"gpio":<gpio number>,"level":<0|1>
See log to verify it works as expected, I've not tested it
You need to get the build artefacts directly, this version will not be released for now
Hey Folks
I'm the author of Louder-ESP and happy to help. I actually did run squeezelite-esp32 on it, and it worked great, but it took some effort, and I didn't document it unfortunately.
First of all, I'm happy to provide few samples to developers for delivery cost only (~$5), if any of you have commitment to actually run it. I would like to test it myself as well )
Second, there is software sample that includes all the necessary to bootstrap TAS5805 DAC. It is essentially startup pin bootstrap + sequence of I2C commands, nothing fancy.
Last point. Board provides external power connector (9..25V). It is not necessary for ESP32 when it is connected to USB, however it should be connected if you expect DAC to startup properly. Clearly you cannot pull ~50W of power of USB
@anabolyc ...
I want to order some of them. But I am not a developer so I will do it on Tindie. If it's out of stock are you planning to re-stock them? Also in Future with an ESP32-S3...?
Another great option would be USB-C so you can get up to 20V via USB... Just in case you're planning to update the board.
@anabolyc ...
I want to order some of them. But I am not a developer so I will do it on Tindie. If it's out of stock are you planning to re-stock them? Also in Future with an ESP32-S3...?
I have 3 in stock still. With S3 so far not so many code samples with I2S, so I didn't foresee a lot of interest.
Another great option would be USB-C so you can get up to 20V via USB... Just in case you're planning to update the board.
Not that easy. You need negotiation IC to actually request it from charger. Which should support it as well, so.. maybe some day:)
Another great option would be USB-C so you can get up to 20V via USB... Just in case you're planning to update the board.
Won't happen. The USB port is made for Data and not Power. If you want to Power via USB-c that's no issue. There are Adapter Cables that trigger Power Delivery Voltage to Jack. With 100W But you can't use it for Serial Data and Power at the same time.
BTT. Glad to hear you got it working once. Then that means the 5ms delay in booting should not be an issue. I'll try and fiddle around a bit more this evening. I was referring to your code to find out what exactly needs to happen to boot, but sadly I'm quite inexperienced in that field.
That would actually be quite a nice sales argument "Comes out of the box with working pre installed software" if the devs allow selling hardware with pre installed software.
That would actually be quite a nice sales argument "Comes out of the box with working pre installed software" if the devs allow selling hardware with pre installed software.
I don't think I should sell other people's software ;)
I will try to build the latest code from @philippe44 ... if it works I can test as well. I hope that IDF5 is working fine. It took me hours to get this running LOL.
@anabolyc I need more than 3. If esplouder works with the support of @haldi4803 I will definitely order some of them. I have some nice speakers laying around which I would like to use in a much modern way.
@anabolyc I need more than 3. If esplouder works with the support of @haldi4803 I will definitely order some of them. I have some nice speakers laying around which I would like to use in a much modern way.
As soon as it works, let me know, I'll request more from production.
@DerPicknicker - you don't need to rebuild. It's built but it will not appear in the official updates. You need to download from the "actions" artifacts
@philippe44 sorry to bother you. The 5ms Delay does NOT seem to be needed.
Edit: Nope -.- my stupid ass forgot to power off the Amp... he saves the last state as long as its powered on. Will try again tomorrow with the artifacts build.... /edit
current config:
set_GPIO 33=vcc
dac_controlset poweron:[{"reg":3, "val":2}, {"reg":3, "val":3}]
And it works when using via Bluetooth <3
@DerPicknicker It works! https://www.youtube.com/watch?v=lb_xFMpLdQw
P.S Just booting the device, not connected uses about 0.4W (no Web Interface open!) No Playback but connected to Bluetooth is abou 1.4W Droppping bluetooth connection goes down to 1.3W getting AMP into Deep Sleep mode drops it down to 0.3W-0.4W
i tried using the poweroff
command in DAC_Controls, but when exactly is that one triggered?
speakeron
and speakeroff
might be the better choises righ? But when do they trigger?
@haldi4803 ...
WOW! THANK YOU for this great documentation!
I have some Additional questions:
Thank you!
* Does the Amp automatically switch to deepsleep? * 0,4W with with WiFi connected? Could you try to open the webui and measure the voltage again..?
Nope... Still need to configure that correctly. Pretty sure it works somehow :) 0.4W in Idle with WiFI connected! When you have the WebUI open it jumps up to 0.8W-1.4W
0.4W in Idle with WiFI connected! When you have the WebUI open it jumps up to 0.8W-1.4W
If you found this out, this would be epic! 0,4W idle is nothing compared to Sonos and others.
@anabolyc there is this knocking sound of the speakers, happening every now and then. https://www.youtube.com/watch?v=dQGN24mMhbs
any clue where that might be coming from? Audio isn't really my speciality. Buffer issues? Edit: Nope probably not... setting it to 128Kbits Encoding in LMS does the same.... so probably not buffer?
@haldi4803 ... I would check the powersupply and the connection to the speakers first.
@haldi4803 ... I would check the powersupply and the connection to the speakers first.
Switched to a different Power Source still happening. I think it's happening left/right speaker separately so shouldnt be speaker cables?
I’d check if feeding data into i2s buffer is not interrupted by some other tasks. Do you guys use onboard spi ram for buffering?
On Wed, 11 Oct 2023 at 23:07 haldi4803 @.***> wrote:
@haldi4803 https://github.com/haldi4803 ... I would check the powersupply and the connection to the speakers first.
Switched to a different Power Source still happening. I think it's happening left/right speaker separately so shouldnt be speaker cables?
— Reply to this email directly, view it on GitHub https://github.com/sle118/squeezelite-esp32/issues/327#issuecomment-1758543025, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABJU6IZD5A3WLKCHKFUNLLLX64DBXANCNFSM6AAAAAA5WY3T3E . You are receiving this because you were mentioned.Message ID: @.***>
@anabolyc seems to be an issue with the Voltage! Reduce it to 17V absolutly NO issues at all. Increase it to 19V. Here and there some issues. go up to 23V really bad Sound quality. so must be Power Supply related! Sorry :(
@haldi4803 ...
WOW! THANK YOU for this great documentation!
I have some Additional questions:
- Does the Amp automatically switch to deepsleep?
- 0,4W with with WiFi connected? Could you try to open the webui and measure the voltage again..?
Thank you!
Re power and speaker/headset, I've updated the README but basically it's when the dac or amplifier is powered on/off after the idle period (-C) and when you switch between headset and speakers using jack detection. It is not related to deep_sleep mode.
@philippe44 ..
So if i2c controlset is used the amp shutdowns via the command after some time, because no audio was released from the LMS right or did I misunderstood you?
Any signs of overheating?
On Wed, 11 Oct 2023 at 23:47 haldi4803 @.***> wrote:
@anabolyc https://github.com/anabolyc seems to be an issue with the Voltage! Reduce it to 17V absolutly NO issues at all. Increase it to 19V. Here and there some issues. go up to 23V really bad Sound quality. so must be Power Supply related! Sorry :(
— Reply to this email directly, view it on GitHub https://github.com/sle118/squeezelite-esp32/issues/327#issuecomment-1758594113, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABJU6I5BHWXMTHLYD565APDX64HYJANCNFSM6AAAAAA5WY3T3E . You are receiving this because you were mentioned.Message ID: @.***>
@philippe44 ..
So if i2c controlset is used the amp shutdowns via the command after some time, because no audio was released from the LMS right or did I misunderstood you?
There are 4 levels of power down 1- After N (
-C <N>
on squeezelite cmd line) seconds, a GPIO can be toggled and the 'power' json set of the dac_controlset is activated 2- When LMS turns off the player, another IO can be toggled 3- Finally, the esp32 will go to deep_sleep after idle timeout or on button press or gpio and suspend everything. Resume is on special gpio only and with restriction. Resume is reboot 4- and of course you can cut power 😄
@haldi4803 can you or someone else with a working device save the NVS and share it here? I will add it too the list of known devices under hardware/preset options in the web UI so newcomers find it easier to configure
@sle118 ... Is there a way to support the development? Like Paetreon, BuyMeACoffee something in this direction?
@haldi4803 can you or someone else with a working device save the NVS and share it here? I will add it too the list of known devices under hardware/preset options in the web UI so newcomers find it easier to configure
IF I have a fully working configuration. Yes. But right now it's not yet working as I want it to :) Doesn't automatically boot the AMP. Seems like I need to try with the delay.
Hi guys,
I am planing to build a device with this great software. But I am not sure if the software supports that specific i2s dac (TAS5805M)... I am planning to buy one of these: https://www.tindie.com/products/sonocotta/louder-esp32/
Another question: The central unit is the LMS. The multiroom-sync is done on the LMS, right? So if I stream to LMS I can select the device inside the webUI, the esp32 is not involved in that right? How long does it take to start the stream in LMS and the esp32 starts playing?
Best regards