For more projects - youtube.com/@ThatProject That Project Github Repository - github.com/0015/ThatProject Join FB Group - facebook.com/groups/138965931539175
Arduino for sure. Anyone who has had the hellish experience of trying to get the ESP-IDF framework to work, will understand the joy of just being able to pick a board from a list and hit a compile button to build. It's a complete mess and the Espressif devs constantly break things and lie about it on the bug tracker.
I can concur with the issue with IDF devs. Just read the bug tracker. It makes a horrible impression for such a great family of chips. "Works for me" is often followed up by some rando dev finding the bug later in the ticket.
I don't know why the results were slower with IDF. I have always gotten faster performance with IDF. I think the reason why is you did not make any changes to the default settings in menuconfig. In menuconfig there are many, many settings to boost performance. On that would greatly help for SPI is the setting to put all SPI functions in IRAM.
Yeah the arduino framework probably has all of the performance boosting settings switched on and if he just used the default sdk config in esp idf then they probably aren’t switched on.
On top of that I know that esp idf defaults to 40 MHz for flash and DIO, not QIO, it also defaults to 160 MHz core clock, if those weren’t changed it would probably explain the difference in performance.
The major issue that I found was compile time when using Arduino IDE 2.0 Release Candidates. Compile time was extremely slow with large projects, such as using LovyanGFX along with LVGL. Compile time changed from 5+ minutes to 30 seconds for me when I moved to ESP-IDF through VS Code.
I just started using ESP32 using Arduino and facing the same issue even for small projects, but later I switched to PlatformIO using Arduino framework and it is Impressingly faster.
5 minute compiles?! Are you running Windows on a potato or something? I have some very large ESP32 projects ("Huge App" partitions required) and the worst takes a minute from cold, and maybe 10 seconds for subsequent compiles.
@@Stabby666 Nope, using a AMD 5950x CPU. At that point my project compiled to less than 1 MB. Also the output window when using verbose output when compile could not keep up. The output continued for minutes after the actual compiling was finished. Again, I was using it before the official 2.0 release. Hopefully Arduino fixed whatever bug this was by now. Like I mentioned, I could compile my entire project from a full clean in 30 seconds using the native ESP-IDF and other libraries with VS Code. This is with my project being 3x in size vs when I used Arduino.
I’m not sure the claim to use ESP-IDF was for performance. At least not in the way you were testing it. Usually simplified coding environments make the user’s code less performant by removing complexity through which greater control can normally be exerted to squeeze out better performance. The libraries of a simplified programming environment can still be highly performant though as they typically are programmed by people comfortable with lower level code. So, testing simple and complex programming environments by testing their libraries isn’t very useful. The typical reasons I’ve always heard why to use IDF over Arduino is for greater control. Yes, Arduino has more libraries, but libraries can be poorly written and have security flaws. For small projects, this likely won’t be an issue. For larger or more security conscious projects though, it will likely be a sticking point.
I now do arduino with some (few) espidf calls... I was afraid of instabilities but it seems wrapping is light enough for it to work, at least for what I do (espidf/freertos tasks (thread) and cpu freq control in espidf, everything else using arduino...). Arduino have a ton of libs but some things are not possible to do. PThreads for example are more limited than freertos tasks
The esp32 only has a single precision floating point unit though doesn’t it? So that would maybe be why doing calculations with doubles takes that much longer.
Yes, that's true. But What I tried in this video is comparing the performance speed of ESP-IDF and Arduino Framework. Many people including me think that ESP-IDF will overwhelm the Arduino Framework, but it is not that fast at least in my benchmarks. I'm preparing for a couple of tests in a different way. Let's see how it goes.
@@ThatProject you should check the sdk config in the esp idf, there is a good chance that the arduino framework has a lot of their performance optimisations on, even things like flash speed or mode may be different, you will probably get a huge difference using DIO for flash compared to QIO, probably especially for things like drawing to screens where to has to load a lot from flash or ram. If you could find what optimisations the arduino framework has on, that may be useful for you. The sdk config is a very complicated thing with loads of performance related settings, it is complicated but if you understand it is probably much better than the arduino framework.
Running into a freertos issue and hoping the arduino framework is the reason. This does not give me a good feeling because i can't find the centralized issue for my ir communication breaking
Good video, and the result was a surprise! When you look into a lot of the ESP-IDF functions there is frequent runtime checking of the passed parameters, so that might be a factor? Also the odd assert() but maybe they are controlled by a compile time directive?
Does the Arduino Framework use a different compiler than IDF? If so, the GodBolt compiler explorer might show why the resulting hex files perform differently! BTW, is using VS Code (PlatformIO or ESP-IDF plugin) produce the same results as using the EsspressIF environment?
ESP-IDF-based builds produce the same result. However, the referenced directory management is slightly different depending on the tool. This may make a very slight difference.
0:05 "we have two options" - what about PlatformIO? I've used only ESP8266 (and other regular AVR) but what I understood from many comments is that PlatformIO is a way to go as it's superior from Arduino IDE. I know nothing about ESP-IDF. As you mention here that there are only two options for ESP32, is PlatformIO not working anymore as a third one? Just asking out of curiosity as I don't have plans to use ESP32 anytime soon - 8266 is way cheaper and covers my needs in 100% (and I still have a bunch of them).
PlatformIO is good too. Just use what is comfortable for you to use. This is simply a difference in development tools. When it comes to developing ESP32, beginners prefer ArduinoIDE. After that, if you get used to it and need the latest features, you will naturally challenge development based on ESP-IDF.
The Arduino default freertos frequency as far as I know is 1000hz while in the IDF the default is 100hz, you have to change it is menuconfig in esp-idf
@@Versette In this test, I only set the CPU frequency to 240MHz for both, but I couldn't configure the FreeRTOS Frequency. I guess I'll have to look into this more.
I have a question please:- I used ESP-32 and programming it with Arduino IDE , the program was very simple it connected to WiFi and turn on and off some led. It is working but the temperature of ESP-32 was increasing, Why ?
It was not easy for me to install and learn Eclipse IDE, but I did it thinking it would be better or fastter than Arduino. This video showed me I was not right...
I believe the point is we can use both of them. If your project can be done with the Arduino IDE, you can use it. On the other hand, if you want to use a specific feature that is only available in ESP-IDF, you must do a project with ESP-IDF.
@@nailtronic5330 It is possible to transmit data continuously via BT. However, for audio/images, it is impossible to provide them in real time without using BT's specific codec. It would be a good idea to first check the GATT service available on ESP32. There are also lots of examples of this in ESP-IDF. Please check this first.
How can i learn esp idf? I mean i can google it but i want to know recommended resources besides the official documentation. Anyway, thanks for your videos. I can get some insight about these 2 platforms with these kind of test
Ciao!I've developed a small project in Arduino, using an Arduino 2 board and a display shield. My intention now is to use a bigger size screen and a most powerfull hardware, i've bought an ILI9488 and a ESP32 S3 DevKit that has all the GPIO i need for my project (about 15 GPIO). I've seen the amazing LVGL library, and i'm thinking to start again my project using that library...what do you suggest to use?Can i use Arduino Framework for LVGL? Thanks in advance!! :D
@@ThatProject I hope so!I'm not skilled in C++, I've done my actual project with arduino Ide , it took 3 months full work...hopefully i will figure out how implemented with LVGL , if you have a beginner guide for Arduino , will be nice to study!In the library there is jud an example with a string printed on screen "Hallo world Arduino, I'm LVGL" or similar 😥
@@ThatProject Thanks a lot!I will try to figure out!For now i've a strange behaviour...the coordinates are flipped on the Y axis ...and the transitions between two screens is super slow ... :(
Arduino uses esp-idf to compile the code under the surface. This doesn't seem right. Maybe you forgot to increase the CPU speed. The default speed on the esp-idf is 160MHZ.
@@noweare1 Yes, but if you look at the arduino esp32 internally, there are some that do not use 100% esp-idf code. Some of them have been rewritten specifically for arduino.
I've been trying to figure out ESP-IDF for weeks now and their documentation is absolute trash. I couldn't even run some of their examples that are there in the docs. Not sure how they expect people to jump on board when they don't even have basic examples.
I couldn't understand them at all when I first tried them. But once you get used to them, they're not so bad. To run the examples, you must first have the ESP-IDF development environment completed. Have you tried this part? docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html
Thanks for this video. The performance hit with IDF was unexpected. I wonder what's going on. Other than that, IDF devs really need to step up their game. They're ruining the development experience for a decent product.
@@ThatProject Zephyr RTOS has transformed my projects. Similar to Linux, Zephyr works on a device tree structure. With the same firmware, I can select my board and run them without any modifications, I currently had a datalogger using nRF series MCUs that I can switch to ESP, or even ST seamlessly. Also as a recent graduate 2 years ago, coding support is essential. The Zephyr Community is fantastic and supportive, with issues being solved very fast. They have a discord as well as the GitHub issues tab
Thanks for sharing the video. Interesting to see the differences of video performance. You are right. The ESP32 family are not good at both 64-bit and 32-bit floating point calculations. The 8266 is the same as well. The NXP's or STM32's MCU with ARM M7 cores have hardware 64-bit floating point unit. They are much faster than ARM M4, M33, and ESP32 in 64-bit floating calculations. But what would be the right 64-bit floating point applications for such MCUs?
Arduino has released two old boards with two new different chips 1) arduino uno r4 wifi has arm cortex m4 $28 and 2) Arduino Nano ESP32 s3 $20. both new products have lots of mcu features, RTC, bluetooth, CAN Bus, op amp, DAC, new extra hardware debugging (not working yet), New, friendly competition between maker companies like StrawberryPi, Adafruit, Arduino and moving up on bigger industrial mcu manufacturers like Renesas and expressif is really good.
For more projects - youtube.com/@ThatProject
That Project Github Repository - github.com/0015/ThatProject
Join FB Group - facebook.com/groups/138965931539175
Arduino for sure. Anyone who has had the hellish experience of trying to get the ESP-IDF framework to work, will understand the joy of just being able to pick a board from a list and hit a compile button to build. It's a complete mess and the Espressif devs constantly break things and lie about it on the bug tracker.
I can concur with the issue with IDF devs. Just read the bug tracker. It makes a horrible impression for such a great family of chips. "Works for me" is often followed up by some rando dev finding the bug later in the ticket.
Open source wins again
Very surprising, but the numbers don't lie. Thank you.
Great comparisson. I was expecting Arduino to be slower as well. Guess Arduino gets optimized quite a bit.
Arduino framework has been optimized to work on slower clock and lower memory boards...
I don't know why the results were slower with IDF. I have always gotten faster performance with IDF. I think the reason why is you did not make any changes to the default settings in menuconfig.
In menuconfig there are many, many settings to boost performance. On that would greatly help for SPI is the setting to put all SPI functions in IRAM.
Yeah the arduino framework probably has all of the performance boosting settings switched on and if he just used the default sdk config in esp idf then they probably aren’t switched on.
On top of that I know that esp idf defaults to 40 MHz for flash and DIO, not QIO, it also defaults to 160 MHz core clock, if those weren’t changed it would probably explain the difference in performance.
Can you show what compiler (optimization) settings you used? I suspect non optimized compiler settings are the culprit.
That's a good point. Could you show me your compiler settings for the best optimization?
@@ThatProject you can select different optimization in menuconfig, like for smaller size, better performance etc
different default FreeRTOS settings ?
The major issue that I found was compile time when using Arduino IDE 2.0 Release Candidates. Compile time was extremely slow with large projects, such as using LovyanGFX along with LVGL. Compile time changed from 5+ minutes to 30 seconds for me when I moved to ESP-IDF through VS Code.
I just started using ESP32 using Arduino and facing the same issue even for small projects, but later I switched to PlatformIO using Arduino framework and it is Impressingly faster.
I used both Arduino and ESP-IDF with a camera library and both compile and upload with the same speed.
@@Dustmadeout how much time it takes on your pc?
5 minute compiles?! Are you running Windows on a potato or something? I have some very large ESP32 projects ("Huge App" partitions required) and the worst takes a minute from cold, and maybe 10 seconds for subsequent compiles.
@@Stabby666 Nope, using a AMD 5950x CPU. At that point my project compiled to less than 1 MB. Also the output window when using verbose output when compile could not keep up. The output continued for minutes after the actual compiling was finished. Again, I was using it before the official 2.0 release. Hopefully Arduino fixed whatever bug this was by now.
Like I mentioned, I could compile my entire project from a full clean in 30 seconds using the native ESP-IDF and other libraries with VS Code. This is with my project being 3x in size vs when I used Arduino.
Super sujet merci pour les test 👍
Je crois par contre qu'on peut faire mieux en adaptant la configuration à nos besoins, différents tests devraient idéalement être faits 👌
I’m not sure the claim to use ESP-IDF was for performance. At least not in the way you were testing it. Usually simplified coding environments make the user’s code less performant by removing complexity through which greater control can normally be exerted to squeeze out better performance. The libraries of a simplified programming environment can still be highly performant though as they typically are programmed by people comfortable with lower level code. So, testing simple and complex programming environments by testing their libraries isn’t very useful.
The typical reasons I’ve always heard why to use IDF over Arduino is for greater control. Yes, Arduino has more libraries, but libraries can be poorly written and have security flaws. For small projects, this likely won’t be an issue. For larger or more security conscious projects though, it will likely be a sticking point.
Please make more videos about the ESP32 S3!!
I now do arduino with some (few) espidf calls... I was afraid of instabilities but it seems wrapping is light enough for it to work, at least for what I do (espidf/freertos tasks (thread) and cpu freq control in espidf, everything else using arduino...).
Arduino have a ton of libs but some things are not possible to do. PThreads for example are more limited than freertos tasks
The esp32 only has a single precision floating point unit though doesn’t it? So that would maybe be why doing calculations with doubles takes that much longer.
Yes, that's true. But What I tried in this video is comparing the performance speed of ESP-IDF and Arduino Framework.
Many people including me think that ESP-IDF will overwhelm the Arduino Framework, but it is not that fast at least in my benchmarks. I'm preparing for a couple of tests in a different way. Let's see how it goes.
@@ThatProject you should check the sdk config in the esp idf, there is a good chance that the arduino framework has a lot of their performance optimisations on, even things like flash speed or mode may be different, you will probably get a huge difference using DIO for flash compared to QIO, probably especially for things like drawing to screens where to has to load a lot from flash or ram. If you could find what optimisations the arduino framework has on, that may be useful for you. The sdk config is a very complicated thing with loads of performance related settings, it is complicated but if you understand it is probably much better than the arduino framework.
Thank you so much for this video
could you explain us in a tutorial how to get started with idf framework? thx.
I'll consider that. Thank you.
Running into a freertos issue and hoping the arduino framework is the reason. This does not give me a good feeling because i can't find the centralized issue for my ir communication breaking
Good video, and the result was a surprise! When you look into a lot of the ESP-IDF functions there is frequent runtime checking of the passed parameters, so that might be a factor? Also the odd assert() but maybe they are controlled by a compile time directive?
Does the Arduino Framework use a different compiler than IDF? If so, the GodBolt compiler explorer might show why the resulting hex files perform differently!
BTW, is using VS Code (PlatformIO or ESP-IDF plugin) produce the same results as using the EsspressIF environment?
ESP-IDF-based builds produce the same result. However, the referenced directory management is slightly different depending on the tool. This may make a very slight difference.
Thanks!!
0:05 "we have two options" - what about PlatformIO? I've used only ESP8266 (and other regular AVR) but what I understood from many comments is that PlatformIO is a way to go as it's superior from Arduino IDE. I know nothing about ESP-IDF. As you mention here that there are only two options for ESP32, is PlatformIO not working anymore as a third one? Just asking out of curiosity as I don't have plans to use ESP32 anytime soon - 8266 is way cheaper and covers my needs in 100% (and I still have a bunch of them).
PlatformIO is good too. Just use what is comfortable for you to use. This is simply a difference in development tools.
When it comes to developing ESP32, beginners prefer ArduinoIDE. After that, if you get used to it and need the latest features, you will naturally challenge development based on ESP-IDF.
Thanks
Must be missing something, but it appears to me that the Arduino time adds up to 1088ms, not the 1095 displayed
You're right. That's very weird. Where does 7ms come from? haha
The Arduino default freertos frequency as far as I know is 1000hz while in the IDF the default is 100hz, you have to change it is menuconfig in esp-idf
Thank you for letting me know. I'll try this way.
@@ThatProjectany results you could share?
@@Versette In this test, I only set the CPU frequency to 240MHz for both, but I couldn't configure the FreeRTOS Frequency. I guess I'll have to look into this more.
you include a RTOS library that cause ESP IDF slower than Arduino, please try it again without RTOS library
I have a question please:-
I used ESP-32 and programming it with Arduino IDE , the program was very simple it connected to WiFi and turn on and off some led. It is working but the temperature of ESP-32 was increasing, Why ?
It is normal that the temperature increases, but how much did it actually rise?
4:40 please add to table perc, not que difference. its more clear
It was not easy for me to install and learn Eclipse IDE, but I did it thinking it would be better or fastter than Arduino. This video showed me I was not right...
I believe the point is we can use both of them.
If your project can be done with the Arduino IDE, you can use it. On the other hand, if you want to use a specific feature that is only available in ESP-IDF, you must do a project with ESP-IDF.
Wow i thought arduino would be slower,
Any chance of doing the same with the raspberry Pico?
It's possible to make a code with the ble audio profile on esp32-s3...or S2? Thnaks
ESP32-S3 BLE does not support audio streaming and S3 doesn't have the classic BT so no A2DP profile.
@@ThatProject it's possible to make this streaming on BLE? for example on a GATT service? Thanks...I love your video
@@nailtronic5330 It is possible to transmit data continuously via BT. However, for audio/images, it is impossible to provide them in real time without using BT's specific codec. It would be a good idea to first check the GATT service available on ESP32. There are also lots of examples of this in ESP-IDF. Please check this first.
What's your go-to for any esp32 project IDF or Arduino
It really depends on. If the project needs to run on IDF, then I should go with it. Some project really needs IDF env.
How can i learn esp idf? I mean i can google it but i want to know recommended resources besides the official documentation. Anyway, thanks for your videos. I can get some insight about these 2 platforms with these kind of test
You should use the official documentation, else you could code like most and it's very bad...
The documentation is pretty good and there are a lot of examples, that is probably the best way to learn.
Thanks both of you. I will take a deep dive to the documentation then. Regards
I use the example codes provided by the officcial focumentation and the official api reference, thats all you need
Ciao!I've developed a small project in Arduino, using an Arduino 2 board and a display shield.
My intention now is to use a bigger size screen and a most powerfull hardware, i've bought an ILI9488 and a ESP32 S3 DevKit that has all the GPIO i need for my project (about 15 GPIO).
I've seen the amazing LVGL library, and i'm thinking to start again my project using that library...what do you suggest to use?Can i use Arduino Framework for LVGL?
Thanks in advance!! :D
Sure, you can use Arduino Framework for LVGL. I hope you do a wonderful project.
@@ThatProject I hope so!I'm not skilled in C++, I've done my actual project with arduino Ide , it took 3 months full work...hopefully i will figure out how implemented with LVGL , if you have a beginner guide for Arduino , will be nice to study!In the library there is jud an example with a string printed on screen "Hallo world Arduino, I'm LVGL" or similar 😥
@@FrankP83 Try this one. You can find the all examples from it. docs.lvgl.io/8.3/examples.html
@@ThatProject Thanks a lot!I will try to figure out!For now i've a strange behaviour...the coordinates are flipped on the Y axis ...and the transitions between two screens is super slow ... :(
@@FrankP83 Which GFX library are you using?
Arduino uses esp-idf to compile the code under the surface. This doesn't seem right. Maybe you forgot to increase the CPU speed. The default speed on the esp-idf is 160MHZ.
I believe I changed it to 240 MHz via sdkconfig before testing. I'll check it again. Thank you.
hello can you make an update of flutter ble app with dht11 and arduino or esp32 as the flutter library is deprecated
How can this be ? Arduino framework just calls esp-idf code.
@@noweare1 Yes, but if you look at the arduino esp32 internally, there are some that do not use 100% esp-idf code. Some of them have been rewritten specifically for arduino.
I've been trying to figure out ESP-IDF for weeks now and their documentation is absolute trash. I couldn't even run some of their examples that are there in the docs. Not sure how they expect people to jump on board when they don't even have basic examples.
I couldn't understand them at all when I first tried them. But once you get used to them, they're not so bad. To run the examples, you must first have the ESP-IDF development environment completed. Have you tried this part? docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html
Thanks for this video. The performance hit with IDF was unexpected. I wonder what's going on. Other than that, IDF devs really need to step up their game. They're ruining the development experience for a decent product.
Surprised no-one mentioned Zephyr RTOS
Good point. What are the advantages of using Zephyr RTOS over ESP-IDF?
@@ThatProject Zephyr RTOS has transformed my projects. Similar to Linux, Zephyr works on a device tree structure. With the same firmware, I can select my board and run them without any modifications, I currently had a datalogger using nRF series MCUs that I can switch to ESP, or even ST seamlessly. Also as a recent graduate 2 years ago, coding support is essential. The Zephyr Community is fantastic and supportive, with issues being solved very fast. They have a discord as well as the GitHub issues tab
cool
Thanks for sharing the video.
Interesting to see the differences of video performance.
You are right. The ESP32 family are not good at both 64-bit and 32-bit floating point calculations. The 8266 is the same as well.
The NXP's or STM32's MCU with ARM M7 cores have hardware 64-bit floating point unit. They are much faster than ARM M4, M33, and ESP32 in 64-bit floating calculations.
But what would be the right 64-bit floating point applications for such MCUs?
*Cries in Micropython
😂
Arduino has released two old boards with two new different chips 1) arduino uno r4 wifi has arm cortex m4 $28 and 2) Arduino Nano ESP32 s3 $20. both new products have lots of mcu features, RTC, bluetooth, CAN Bus, op amp, DAC, new extra hardware debugging (not working yet), New, friendly competition between maker companies like StrawberryPi, Adafruit, Arduino and moving up on bigger industrial mcu manufacturers like Renesas and expressif is really good.
:o