Hello Ian, good to see you're back. I found that AI Thinker has a Github repository for the Ai-Thinker ESP32-Audio-Kit board with info on setting up the Espressif Idf/adf. They also mention that they halted production with the AC101 and that the es8388 is its replacement. The driver for the AC101 can be found there. The Ai-Thinker ESP32-Audio-Kit board has micro USB, headphone jacks, etc and of course the ESP32-A1S module. It's priced around $15. I like the simpler ESP32-A1S myself. Thanks for the good video Jerry, AC9NM
Hi Jerry - thank you for the comment. I did wonder about the AC101 and whether that was an earlier or later generation of the board. I did see the audio kit board but only *after* I purchased the modules ;) . I am glad I did do the modules though as it gave me a chance to set up a circuit for a bare bones module, which I hadn't done before. Hope to get around to doing a followup video soon - there's so much non-fun related things to do in the new place though! I have to now learn how to use a chainsaw for one!
@@na5y According to the AI Thinker spec sheet, the first version 2.2 was Nov 2019 and the current version 2.3 was June 2021. There may have been a out earlier module by someone else in 2017. How did you find out about the ESP32-A1S module?
@@jeroldponko7168 Andreas Speiss told me about the module. Is the documentation you are referring to above on their github repo? I could only find a few incorrect and incomplete docs.
A tip for the hookup wire is ti strip a little bit of insulation off, tin the wires and let the insulation shrink back. Now cut the tinned wire shorter, now when you solder it the insulation should not shrink back much more.
I have some audiokit boards that are a little earlier. One of them is with the AC101 and the rest are with the ES8388. The 8388 batch has a pinout that differs from yours. They are BCLK GPIO05 and SDA, SCL 18 and 23 -which unfortunately renders a lot of the available pins on the board un-usable. It's a shame, that AI Thinker opted to change the AC101 to the ES8388 - The WM8978 would have been a better match since it should be pin-compatible with the AC101.
I agree - its strange some of the decisions made by the module makers on which pins to expose (or not expose). I wish they had this module with a header pin layout. Thank you for the comment!
Interesting work, thanks. What do you think the top frequency would be? I'm also wondering if you could sample audio on an input to amplitude modulate a carrier, for a basic AM signal generator. Just a thought.
Hi Paul. You mean the top sampling frequency? I believe for that codec its 96KHz. You start to run out of uController horsepower at that sampling frequency for any DSP though. I am not sure I understand your second question. Do you mean could this setup output an amplitude modulated signal? If so then no - unless the carrier was < 96KHz
@@na5y Yes to both, I was wondering how well it would generate an AM signal using a line audio drive, modulating the generated carrier. Maybe a concept to be tried, not very useful though.
A question. I looked at your video several times and I tried to program the ESP32-A1S (2974) like you do. I use the streams-generator to check the output but no signal on the oscilloscoop. , Not on HP and not on SP. The I2S is the same as your setting and the datasheet of the ESP32A1S (WS 25; bck 27; data 26; data_rx 35 mclk 0). Are there known problems with the ESP32-A1S?
Ruud, I have had a few people ping me on problems replicating this on ESP-32 A1S modules and I am not really sure what is going on. I have a few theories though: 1) There are a number of different versions of the ESP32 A1S - some which use the AC101 codec. The AC101 is completely incompatible with the ES8388. Unfortunately there's no easy way to tell which version you have 2) There are others which use different internal pins for the I2C connection to the ES8388 module. Have a look at the schematic in the doc you'll see that Upshot is some have had troubles getting it to work and I am a bit stumped
@@na5y Hi Paul. Thanks for your answer. I am sure it is a ES8388, I took the can of like you did in your video. I checked the generatorstream and it works good with the output to Serial but it can not be send tot the ES8388. I use Arduino IDE and core: AI Thinker ESP32-CAM. I am afraid that the internal connection is different from the schematic in the documentation so I ordered new ESP32-A1S by a different supplier. I let you know if I have found a solution but I am not sure I am gonna find it.
One thing to check Ruud is what I2C pins you are using to talk to ES8388. This document on page 15 docs.ai-thinker.com/_media/esp32-a1s_v2.3_specification.pdf Has two different versions one with SCL, SDA on 23 and 18 (over to the left) The other has SCL and SDA being 32K_XP, 32K_XN (which resolves to pins 32 and 33) I used 32 and 33 for SCL, SDA which worked - I think someone mentioned he had a version which worked on 23, 18 Let me know how you go
@@na5y Hi Paul, Thanks for your answer. Unfortunately the change of the GPIO for I2C didn't change the output. When I have success I let you know but I am afraid that it is a difficult problem. 73 Ruud
@@RuudJongeling That's a shame - let me know if you crack the problem. Like I said there's a few people with this problem. Oh and its Ian BTW not Paul ;)
Another great overview. Curious if you have been able to change the line in input gain. Using the AudioKit board I’m only able to use 100mV input signal before clipping the input stage.
Thank you Nicholas. I have definitely been able to change the line in gain. I assume the AudioKit has this right but I know I had problems on linein without a decoupling cap on input.
@@na5y Thank you! Are you able to share how you were able to adjust this parameter? I'm new to the A1s module and unsure how to alter the register, driver, etc...
@@NicholasRadina Sorry - I should have added that shouldn't I ;) Look at page 17 of this document datasheet.lcsc.com/szlcsc/1901241705_Everest-Semiconductor-ES8388_C365736.pdf 6.2.1 Register 9 - ADC Control 1, Default 0000 0000 MicAmpL 7:4 Left channel PGA gain 0000 - 0 dB (default) 0001 - +3 dB 0010 - +6 dB 0011 - +9 dB 0100 - +12 dB 0101 - +15 dB 0110 - +18 dB 0111 - +21 dB 1000 - +24 dB MicAmpR 3:0 Right channel PGA gain 0000 - 0dB (default) 0001 - +3 dB 0010 - +6 dB 0011 - +9 dB 0100 - +12 dB 0101 - +15 dB 0110 - +18 dB 0111 - +21 dB 1000 - +24 dB That register sets the gain for left and right input channel. In my code github.com/thaaraak/es8388/blob/master/src/es8388.cpp on line 107 I set this to 0x11 which (if my understanding is correct) is +3dB left/right. Perhaps the code you are using has this set higher? I hope this helps.
@@na5y Thank you! I'll give this a try! Do you know if the "audio kit" board is compatible with your code? I know there are many "challenges" with these boards and types.
@@NicholasRadina The audio kit you are referring to is it this one: www.aliexpress.us/item/3256801551918625.html?spm=a2g0o.productlist.0.0.16c73b80CBztxB&algo_pvid=e8f7f906-c92e-4b08-99be-fdc37b3e7b8f&algo_exp_id=e8f7f906-c92e-4b08-99be-fdc37b3e7b8f-1&pdp_ext_f=%7B%22sku_id%22%3A%2212000017401423541%22%7D&pdp_npi=2%40dis%21USD%2120.2%2120.2%21%21%21%21%21%402101e9ce16710440935511388e9310%2112000017401423541%21sea&curPageLogUid=qhg94DMf4KMq I haven't played around with it myself. Do you know for sure it is using an ES8388 codec? If so then it should run fine with my code. Some earlier ESP32-A1S varieties use the AC101 codec which is definitely not compatible with my code.
Not that I am aware. I haven't even seen a good programmer's guide for the AC101. If all you can get is the AC101 I would recommend buying a standard ESP32 and using something like the PCBArtists board: pcbartists.com/es8388/
Hi Pradeep, no video that I am aware of. I just followed the instructions on the Espressif site here: github.com/espressif/idf-eclipse-plugin Is there something in particular you are having a problem with during setup? It is a bit fiddly
@@na5y I went through above link, its for adding esp-idf libraries but for esp32-A1s we need esp-adf. There is no tutorial for it. And I am facing compilation issues while adding esp-adf.
@@pradeepwagre2394 A few things to check. Does an ADF example project compile from the command line? If not use version 4.4 of the **IDF** - last I looked the latest version of the IDF didn't work with the ADF (I am using 4.4 of the IDF) If it compiles from the command line then check out my CMakelists.txt github.com/thaaraak/ESP32-IQ/blob/main/CMakeLists.txt The ADF_PATH doesn't seem to work also - you have to just use a relative path. Also shoot over your compile log to me at my email address in the channel "About" - I'll take a look and see if there's anything obvious.
My first experience with the ESP-IDF was just playing around with the examples that come with the toolkit (led blink, simple I2C, etc). I would strongly recommend if you want to learn to install eclipse and the ESP-IDF plugin. Makes things a whole lot easier IMO. Check out this link to get yourself started docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html
@@na5y thx i am already doing that but i thought u knew something better BTW when it comes to different ICs how do you write the driver files? or rather is there some template?
@@sanjikaneki6226 Typically for core peripherals the manufacturer provides software tooling for that. STM has HAL, ESP32 has ESP-IDF. If you *really* want to write your own driver for, say, I2C you'd read the the reference manual www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf look at page 278 - that specifies how you control the registers on the device to perform I2C. Like I said though - unless there is some compelling reason just use the I2C driver provided in ESP-IDF
Hello Ian, good to see you're back. I found that AI Thinker has a Github repository for the Ai-Thinker ESP32-Audio-Kit board with info on setting up the Espressif Idf/adf. They also mention that they halted production with the AC101 and that the es8388 is its replacement. The driver for the AC101 can be found there. The Ai-Thinker ESP32-Audio-Kit board has micro USB, headphone jacks, etc and of course the ESP32-A1S module. It's priced around $15. I like the simpler ESP32-A1S myself.
Thanks for the good video
Jerry, AC9NM
Hi Jerry - thank you for the comment. I did wonder about the AC101 and whether that was an earlier or later generation of the board. I did see the audio kit board but only *after* I purchased the modules ;) . I am glad I did do the modules though as it gave me a chance to set up a circuit for a bare bones module, which I hadn't done before.
Hope to get around to doing a followup video soon - there's so much non-fun related things to do in the new place though! I have to now learn how to use a chainsaw for one!
@@na5y According to the AI Thinker spec sheet, the first version 2.2 was Nov 2019 and the current version 2.3 was June 2021. There may have been a out earlier module by someone else in 2017. How did you find out about the ESP32-A1S module?
@@jeroldponko7168 Andreas Speiss told me about the module. Is the documentation you are referring to above on their github repo? I could only find a few incorrect and incomplete docs.
Hi, welcome back. Very interesting video. Thanks for introducing the ES32-A1S. Looking forward to watch and learn from you.
Thank you very much - glad you enjoyed!
A tip for the hookup wire is ti strip a little bit of insulation off, tin the wires and let the insulation shrink back. Now cut the tinned wire shorter, now when you solder it the insulation should not shrink back much more.
Ah cool tip TEH - thank you
11:15 that cheeky spider run by :D
Hey, Good to see you. Hope your move went well!
Thank you Curt. Move went pretty well although there's still boxes everywhere ;)
Great work and great explanation, thank you for this!
Glad you enjoyed. Thank you for the comment
Can you give us an example of implementing the Equalizer feature on registers 30 to 37 on the ES8388, thank you, best regards
I'll have a look at that Noor. Not a lot of documentation in the manual on the shelving filters as they are referred to. Stay tuned
@@na5y roger that sir ..thank you
I have some audiokit boards that are a little earlier. One of them is with the AC101 and the rest are with the ES8388. The 8388 batch has a pinout that differs from yours. They are BCLK GPIO05 and SDA, SCL 18 and 23 -which unfortunately renders a lot of the available pins on the board un-usable. It's a shame, that AI Thinker opted to change the AC101 to the ES8388 - The WM8978 would have been a better match since it should be pin-compatible with the AC101.
I agree - its strange some of the decisions made by the module makers on which pins to expose (or not expose). I wish they had this module with a header pin layout. Thank you for the comment!
Us too, from the outside they look the same, under the can the layout differs around the es8388
Interesting work, thanks. What do you think the top frequency would be? I'm also wondering if you could sample audio on an input to amplitude modulate a carrier, for a basic AM signal generator. Just a thought.
Hi Paul. You mean the top sampling frequency? I believe for that codec its 96KHz. You start to run out of uController horsepower at that sampling frequency for any DSP though. I am not sure I understand your second question. Do you mean could this setup output an amplitude modulated signal? If so then no - unless the carrier was < 96KHz
@@na5y Yes to both, I was wondering how well it would generate an AM signal using a line audio drive, modulating the generated carrier. Maybe a concept to be tried, not very useful though.
A question. I looked at your video several times and I tried to program the ESP32-A1S (2974) like you do. I use the streams-generator to check the output but no signal on the oscilloscoop. , Not on HP and not on SP. The I2S is the same as your setting and the datasheet of the ESP32A1S (WS 25; bck 27; data 26; data_rx 35 mclk 0). Are there known problems with the ESP32-A1S?
Ruud, I have had a few people ping me on problems replicating this on ESP-32 A1S modules and I am not really sure what is going on. I have a few theories though:
1) There are a number of different versions of the ESP32 A1S - some which use the AC101 codec. The AC101 is completely incompatible with the ES8388. Unfortunately there's no easy way to tell which version you have
2) There are others which use different internal pins for the I2C connection to the ES8388 module. Have a look at the schematic in the doc you'll see that
Upshot is some have had troubles getting it to work and I am a bit stumped
@@na5y Hi Paul. Thanks for your answer. I am sure it is a ES8388, I took the can of like you did in your video. I checked the generatorstream and it works good with the output to Serial but it can not be send tot the ES8388. I use Arduino IDE and core: AI Thinker ESP32-CAM. I am afraid that the internal connection is different from the schematic in the documentation so I ordered new ESP32-A1S by a different supplier. I let you know if I have found a solution but I am not sure I am gonna find it.
One thing to check Ruud is what I2C pins you are using to talk to ES8388. This document on page 15
docs.ai-thinker.com/_media/esp32-a1s_v2.3_specification.pdf
Has two different versions one with SCL, SDA on 23 and 18 (over to the left)
The other has SCL and SDA being 32K_XP, 32K_XN (which resolves to pins 32 and 33)
I used 32 and 33 for SCL, SDA which worked - I think someone mentioned he had a version which worked on 23, 18
Let me know how you go
@@na5y Hi Paul, Thanks for your answer. Unfortunately the change of the GPIO for I2C didn't change the output. When I have success I let you know but I am afraid that it is a difficult problem.
73 Ruud
@@RuudJongeling That's a shame - let me know if you crack the problem. Like I said there's a few people with this problem. Oh and its Ian BTW not Paul ;)
Another great overview. Curious if you have been able to change the line in input gain. Using the AudioKit board I’m only able to use 100mV input signal before clipping the input stage.
Thank you Nicholas. I have definitely been able to change the line in gain. I assume the AudioKit has this right but I know I had problems on linein without a decoupling cap on input.
@@na5y Thank you! Are you able to share how you were able to adjust this parameter? I'm new to the A1s module and unsure how to alter the register, driver, etc...
@@NicholasRadina Sorry - I should have added that shouldn't I ;)
Look at page 17 of this document
datasheet.lcsc.com/szlcsc/1901241705_Everest-Semiconductor-ES8388_C365736.pdf
6.2.1 Register 9 - ADC Control 1, Default 0000 0000
MicAmpL 7:4 Left channel PGA gain
0000 - 0 dB (default)
0001 - +3 dB
0010 - +6 dB
0011 - +9 dB
0100 - +12 dB
0101 - +15 dB
0110 - +18 dB
0111 - +21 dB
1000 - +24 dB
MicAmpR 3:0 Right channel PGA gain
0000 - 0dB (default)
0001 - +3 dB
0010 - +6 dB
0011 - +9 dB
0100 - +12 dB
0101 - +15 dB
0110 - +18 dB
0111 - +21 dB
1000 - +24 dB
That register sets the gain for left and right input channel. In my code
github.com/thaaraak/es8388/blob/master/src/es8388.cpp
on line 107 I set this to 0x11 which (if my understanding is correct) is +3dB left/right. Perhaps the code you are using has this set higher? I hope this helps.
@@na5y Thank you! I'll give this a try! Do you know if the "audio kit" board is compatible with your code? I know there are many "challenges" with these boards and types.
@@NicholasRadina The audio kit you are referring to is it this one:
www.aliexpress.us/item/3256801551918625.html?spm=a2g0o.productlist.0.0.16c73b80CBztxB&algo_pvid=e8f7f906-c92e-4b08-99be-fdc37b3e7b8f&algo_exp_id=e8f7f906-c92e-4b08-99be-fdc37b3e7b8f-1&pdp_ext_f=%7B%22sku_id%22%3A%2212000017401423541%22%7D&pdp_npi=2%40dis%21USD%2120.2%2120.2%21%21%21%21%21%402101e9ce16710440935511388e9310%2112000017401423541%21sea&curPageLogUid=qhg94DMf4KMq
I haven't played around with it myself. Do you know for sure it is using an ES8388 codec? If so then it should run fine with my code. Some earlier ESP32-A1S varieties use the AC101 codec which is definitely not compatible with my code.
the litle spider on the green jack 🤣🤣🤣🤣🤣🤣🤣
Indeed - he was a quick mover too!
All i get here is ac101...is there any code for ac101 audio chup. Thanks
Not that I am aware. I haven't even seen a good programmer's guide for the AC101. If all you can get is the AC101 I would recommend buying a standard ESP32 and using something like the PCBArtists board: pcbartists.com/es8388/
That looks like the same module in the *Jessinie ESP32-Audio-Kit*
Because it is the same
A spider learns to program 10:59
Indeed - he helped my correct some of my wiring mistakes too ;)
The spider programed it for the world wide web as webdesigner
Is there any video tutorial to set up eclipse for esp32-A1S,I am using esp32 audio kit v2.2
Hi Pradeep, no video that I am aware of. I just followed the instructions on the Espressif site here:
github.com/espressif/idf-eclipse-plugin
Is there something in particular you are having a problem with during setup? It is a bit fiddly
@@na5y I went through above link, its for adding esp-idf libraries but for esp32-A1s we need esp-adf. There is no tutorial for it. And I am facing compilation issues while adding esp-adf.
@@pradeepwagre2394 A few things to check.
Does an ADF example project compile from the command line? If not use version 4.4 of the **IDF** - last I looked the latest version of the IDF didn't work with the ADF (I am using 4.4 of the IDF)
If it compiles from the command line then check out my CMakelists.txt
github.com/thaaraak/ESP32-IQ/blob/main/CMakeLists.txt
The ADF_PATH doesn't seem to work also - you have to just use a relative path.
Also shoot over your compile log to me at my email address in the channel "About" - I'll take a look and see if there's anything obvious.
is the ESP32 radio series where u use the IDF for the first time?
also whom where did u learn how to use it? trial and error?
My first experience with the ESP-IDF was just playing around with the examples that come with the toolkit (led blink, simple I2C, etc). I would strongly recommend if you want to learn to install eclipse and the ESP-IDF plugin. Makes things a whole lot easier IMO. Check out this link to get yourself started
docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html
@@na5y thx i am already doing that but i thought u knew something better BTW when it comes to different ICs how do you write the driver files? or rather is there some template?
@@sanjikaneki6226 You mean for example a driver for I2C or are you referring to, say, a driver file for an OLED display?
@@na5y yes as in an I2C/S driver for a chip in my case both since i have a audio ADC
@@sanjikaneki6226 Typically for core peripherals the manufacturer provides software tooling for that. STM has HAL, ESP32 has ESP-IDF. If you *really* want to write your own driver for, say, I2C you'd read the the reference manual
www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
look at page 278 - that specifies how you control the registers on the device to perform I2C.
Like I said though - unless there is some compelling reason just use the I2C driver provided in ESP-IDF
Your link to alieexpress is for the WRONG version of the ESP32-A1S (wrong codec)
I just checked and that is the version that I purchased and the one I am using (the ES8388 version). What do you mean by wrong?
@@na5y The photo in the alieexpress page is that of the one shown for the other codec. (antenna and coax jack)
I actually just ordered some more from that link the other day. I'll certainly post a correction if I get the older AC101 codec