Romkabouter / ESP32-Rhasspy-Satellite

The repo has implementing an esp32 standalone MQTT audio streamer. Is is desinged to work as a satellite for Rhasspy (https://rhasspy.readthedocs.io/en/latest/). It supports multiple devices
GNU General Public License v3.0
359 stars 64 forks source link

Problem with AudioKit (A1S) - No supported controller #99

Closed AndreasMettlen closed 2 years ago

AndreasMettlen commented 2 years ago

Hi, I'm having problems getting my AudioKit (v2.2 A149) to run (or even to properly boot). From running squeezelite-esp32 on this board I conclude that it uses ES8388 variant 2 (Squeezelite-esp32 runs fine), but when I build and try to run the rhasspy satellite I get "No supported controller" during boot and then I'm hung in the neverending loop.

Maybe it has to do with the 5 DIP-switches - is there a needed combination for them to work ?

Code in AudioKit.hpp shows same config as used in squeezelite (except extra GPIO16 for i2c - compare here https://screenzone.eu/esp32-squeezelite-on-esp32-audio-kit/ the part about "dac_config:"

I'm at a loss here - I bought this A1S to surprise my son with a "home-made" Alexa ;-).

kind regards

Romkabouter commented 2 years ago

Hi @AndreasMettlen, I really cannot help you with this since I do not own such a device. Might be the dip-switches, because that is what is mentioned here https://screenzone.eu/esp32-squeezelite-on-esp32-audio-kit/

The code tries the find the correct variant at setup, so it should be able to detect ES8388_V2 but maybe there is an issue with that. If you are sure you have that variant, open up https://github.com/Romkabouter/ESP32-Rhasspy-Satellite/blob/master/PlatformIO/src/devices/AudioKit.hpp and change the code. Replace lines 184..186 with variant = ES8388_V2; and see what happens

AndreasMettlen commented 2 years ago

Hi @Romkabouter , I was just thinking because the dac_config (see page above) mentions explicitly "sda=33,scl=32,i2c=16" - I thought sda and scl are enough for i2c ?? and I haven't found anything like this (3 GPIO for i2c) in any of the other devices hpp-files... Do you have any means to contact @hogthrob - he seems to have contributed the last major change to the AudioKit .

But I will definitely try to force the ES8388_V2 variant .

hogthrob commented 2 years ago

Hi, the best way to get in touch with me is to mention me in an issue... then I get a notification ;-) .

If you just have the bare board and nothing connected to it, then the 5 dip switches are not really important. Especially if squeeze-lite runs with your settings.

I actually own 3 different variants of the Audiokit (one with A1S, one with ES8388 v1 and one with ES8388 v2) and the code was tried on all of them. But maybe I made a mistake at some point and broke things which were working before.

I will give the current code a look.

hogthrob commented 2 years ago

Ok, the i2c=16 in dac_config is the I2C address of the ES8388 controller (not a pin). Audiokit uses of course the same address:

https://github.com/Romkabouter/ESP32-Rhasspy-Satellite/blob/9be94b266c32d78ee1e4113681321259d2f272ce/PlatformIO/src/devices/ES8388Control.cpp#L5

So we are using exactly the same configuration as squezzelite-esp32 in our detection code.

Not sure why detection could fail. And it is not a good idea to just comment out the lines 184..186 The subsequent code assume that the variant is correctly set. And the main problem is, if we cannot start the initial I2C communication not much is going to work as the ES8388 is in this case not really configured for work.

AndreasMettlen commented 2 years ago

Hi all, I did a clean build and install (pio run -t erase & pio run -t upload) and the monitor shows the following at boot: `Identifying Codec... Checking for ES8388 Pinout Variant 1... Checking for ES8388 Pinout Variant 2...

Checking for AC101...

[ 122][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 125][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 137][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 149][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 162][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 275][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

[ 287][E][Wire.cpp:313] beginTransmission(): Unfinished Repeated Start transaction! Expected requestFrom, not beginTransmission! Clearing...

No supported controller found, stopping operation! ` I haven't changed anything from the config used for squeezelite. I'm not deep into the code or even C programming - maybe this give anybody a hint...

hogthrob commented 2 years ago

Thanks for the log. I have never seen a log containing the above statements regarding beginTransmission BEFORE I updated the PlatformIO environment to the newest version of the libraries etc. With the ESP32 tools 3.5.0 it was working, with 4.2.0 it is not working anymore and my device shows the same error messages. So for what it is worth: The update broke perfectly working application code. Nothing wrong with your hardware or the settings.

I am not be able to look into this right now. Will maybe have time to check its later this week.

hogthrob commented 2 years ago

Ok, had a quick look and found the issue. See pull request #100.

AndreasMettlen commented 2 years ago

Big shoutout !! I works - I got the board up 'n' running - now I just need to fiddle with the different settings on the Server/"Base station"..

MANY THANKS !!!!

@Romkabouter : Test of this fix was successful ;-)

Romkabouter commented 2 years ago

Fixed with #100