A few days ago, I received a package from a well-known Chinese e-commerce site that contained 4 ESP32-C3 Super Mini development boards at a price that was very hard to resist. I was curious about these because of the compact on-board ceramic antenna which could make these boards easier to deploy than the XIAO ESP32C3 from SeeedStudio. The boards were cheap, but they cannot be qualified as the best available in what has become a crowded field. Before coming to a final judgment about their true value, here are the results of my first encounter with these boards.
Table of content
- Hardware
- Programming in the Arduino IDE
- Programming in PlatformIO
- Testing with Simple Sketches
- Recommendation?
Hardware
According to the seller's product page, the true discounted price of the board is $ 7.70 which means that I did obtain them at a significant discount.
The claimed regular price of $20.84 makes no sense, of course. As is often the case, there are discrepancies in the seller's web page. For example, the board shown above does not match the one shown in the image showing top and bottom views. Here is the bottom view with pin functions provided by the vendor.
The boards received corresponded to none of the images shown by the vendor. They have no silkscreen markings for the two on-board LEDs. The bottom side silkscreen do not contain the open hardware logo and the ESP32-C3 and Super Mini labels are almost unreadable. However the components appear to be very similar to those shown in the above image. In particular, the simplified set of components near the antenna is the same which may be significant as will be seen later. Luckily, the pin numbering is the same. Here is a representation of the top view of the boards received with relatively accurate labels and with pin numbers and serial functions at the sides of the pin.
The red power LED to the left of the USB-C connector indicates that the device is on. The blue LED to the right of the ESP32-C3 chip, just below the reset button is connected to I/O pin 8. This is by no means universal, as many ESP32-C3 development boards have an available LED or RGB LED connected to a different I/O pin while the XIAO ESP32C3 has no on-board LED.
The boot push button is connected between ground and I/O pin 9. All boot buttons on ESP32-C3 dev boards will be connected to that particular I/O pin because it is part of the "strapping" to put the board in bootloader mode.
USB Connection to a Computer
When a Super Mini is connected to a USB port on a Windows machine, the distinctive billy boop sound should be heard as the device is recognized by the operating system. The board will then be assigned a COM port such as COM6
.
In Linux one can listen in on bus messages to see the operating system recognizing the device. Start the dmesg
command line utility with the -w
flag and then plug in the Super Mini.
Use the CtrlC keyboard combination to close that application. One could instead hunt for the device once it is plugged in.
In either case, one sees that the device ID of the board is 303a:1001
and that it shows up as the /dev/ttyACM0
serial device. The exact number after ttyACM
will depend on the system. This information may be useful later on.
Bootloader Mode
To upload new firmware to the non-volatile flash memory of the ESP32-C3, the latter must be in bootloader mode. This is done by keeping the boot button (connected to I/O pin 9) pressed when the reset button is pressed and release or when power is applied to the board. I/O pins 2 and 8 should also be high when pin 9 is low (ref: 2.6 Strapping Pins ESP32-C3 Series Datasheet (Version 1.7). Some ESP32-C3 dev boards do not have a boot button because the DTR and RTS signal of an external USB to serial chip such as the CH340 or CP2912 handle pin 9 and the reset pin.
Once a firmware upload is completed, the board has to be reset by pressing the RST button to return to normal mode which means that it will execute the code in its flash memory.
Power Requirements
The Super Mini board can be powered via the USB-C connector (hence with a 5 V power source) or directly through the 5V/Gnd pins. In that case from 3.3 to 6 DC volts could be used. According to the schematic, there is a blocking diode that would prevent back feeding power to the USB source if power is also supplied to the board via the 5V pin. However, there is no blocking diode to protect a power source connected to the 5V pin, so as the documentation says "Remember that when connecting to an external power supply, USB cannot be connected, and you can only choose between USB and external power supply."
The 3.3 V pin is connected directly to the regulated power output pin of the on board (ME6211) voltage regulator. That regulator is capable of producing a maximum output current of 500 mA in optimal conditions and that is more or less the minimum required current for the ESP32-C3 when using the radio (ref). Clearly, care must be exercised if using this output to power external loads.
Who Makes this board?
I have no idea who makes the boards sent by the vendor. Or more precisely I don't know what to make of the following label on the anti-static bag containing each board.
Luckily, an Arduino forum topic contains links to a Tindie seller claiming that the board was designed by Maker go and a link to ICBbye which seems to be an English language translation of part of the nolog.tech documentation about the board or a similar one. What is the link to Wuming Technology and Guangdong ICP No. 2023016901-1?
Looking at images of other vendors and comments in forums, it is clear that boards made by multiple enterprises are sold under the Super Mini or SuperMini ESP32-C3 name. If one can believe the open hardware logo, that would be legal... I think. However, undocumented changes to the architecture is not a good development as it creates confusion.
Board Schematic
A schematic is available on ICBbuy and nologo. Unfortunately, the image has no legend attributing the design to anyone. I am not even sure that the schematic corresponds to the boards I received. Perhaps it is a straightforward implementation of a reference design by Espressif. Something to investigate?
Programming in the Arduino IDE
Within two weeks of each other, two Super Mini board definitions were committed to the arduino-esp32 core.
-
Add MakerGo C3 SuperMini def (#9050) January 16, 2024.
-
Add board support for Nologo ESP32C3 Super Mini (#9174) January 31, 2024.
They are quite similar, though one would prefer the older MakerGo definition since its variant arduino_pin.h
file is a superset of the newer one. These board definitions and many other for ESP32-C3 based boards are available in the stable version 3.0.1 of the arduino-esp32 core by Espressif available since June 5 2024. To obtain the esp32
core, add the following boards manager configuration file
in the Arduino IDE preferences.
Then install version 3.0.1 (or latest) of esp32
in the BOARDS MANAGER.
Connect the Super Mini board to the computer with an appropriate USB cable. On my Linux machine, the board shows up as the /dev/ttyACM0
serial device.
Now select the desired board definition among the numerous esp32
board definitions. Repeatedly pressing the M key will jump to the next definition starting with the letter "m". However the definitions appear to be in chronological order according to the date they were added, so go to the very end of the list and search backward to quickly find the desired board.
When compiled without an error, the firmware can be uploaded to the board. Of course, the latter has to be put into bootloader mode as explained above in order to upload the firmware and then, once that is done, the board must be reset to resume normal functioning.
Programming in PlatformIO
As far as I can ascertain, the Espressif32 platform (version 6.7.0) is still using an older version 2.0.16 of the arduino-esp32
core for the Arduino framework. Consequently, there are no Super Mini ESP32C3 board definitions. Early adopters of the Super Mini boards, borrowed a close enough board definition and modified it with a custom platformio.ini
configuration file as shown next.
The other Espressif ESP32-C3 development kit esp32-c3-devkitm-1
was also used. These two boards have almost the same I/O pin assignment as the SuperMini but they have on board USB to serial adapters while the Super Mini does not as it uses the built in USB peripheral instead. That's the reason for the addition of the ARDUINO_USB_MODE
and ARDUINO_USB_CDC_ON_BOOT
macros defined with build flags.
Since then, DFRobot has introduced the Beetle ESP32-C3 Mini Size which is almost identical to Super Mini except for an additional GDI connector on the back side. Consequently this is the platformio.ini
configuration that I would use.
There is a minor problem with these borrowed board definitions; they have the wrong value for the BUILTIN_LED
variable and macro. So I decided to create a custom board definition and variant pin configuration file. First here is the board definition file, which I named super_mini_esp32c3.json
.
And here is the variant pin definition header file, pins_arduino.h
.
It's obviously a merge of the two Super Mini variant files found in the newest Arduino ESP32 core. I copied these files to their appropriate location in the .platformio
directory on my desktop machine.
/home/michel/.platformio/platforms/espressif32/boards/super_mini_esp32c3.json
/home/michel/.platformio/packages/framework-arduinoespressif32/variants/super_mini_esp32c3/pins_arduino.h
The two files can be dowloaded from the resources foler in a GitHub repository.
Then I restarted VSCodium and created a new PlaftformIO project with the Project Wizard.
And, as the screen capture shows, the new board definition was available.
The following platformio.ini
configuration file was automatically created.
Again, it will be necessary to manually put the board in bootloader mode before uploading new firmware to it. Once that is done, the board will have to be reset to resume normal functioning.
Testing with Simple Sketches
I have created a few sketches to test the Super Mini board. Actually, two are remixes of sketches in xiao_esp32c3_sketches and three test the Wi-Fi capabilities of the board in different ways. The source code can be found in my Github account in the super_mini_esp32c3_sketches repository (to be made public in the next few days). As before, they are structured in such a way that they can be tested in the Arduino IDE and in PlatformIO.
Hello World
The first sketch is 01_pin_names
which is a sort of long-winded Hello World! example. The sketch does two things.
-
It print out to the console the names and number of all the I/O pins.
-
It checks that the boot button on the board can be activated.
The platformio.ini
configuration file contains two different board definitions: my custom definition as described above and the dfrobot_beetle_esp32c3
definition for those that do not want to add a custom card definition.
The second sketch, 02_blink_pulse_led
is the IoT version of the Hello Worl! example since as the name suggests it blinks the on-board blue LED found on Super Mini. Actually, it alternates, blinking the LED using a heart beat pattern for 10 seconds and then pulsing the LED (slowly fading and then brightening it) for 10 seconds. The latter illustrates the PWM function which is available on all I/O pins of the ESP32-C3.
Wi-Fi Functionality
The next three sketches test the Wi-Fi functionality of the Super Mini board. Comments on forums revealed that there could be Wi-Fi problems related to the antenna. Espressif rates ceramic antennas as used on the Super Mini as the only "low gain" type. The FPC antenna used on the XIAO ESP32C3 is said to have "medium gain". The results when running the third sketch 03_scan_wifi
are consistent with that evaluation. Only two networks were found with a SuperMini ESP32-C3.
The same code on a XIAO ESP32C3 found four networks.
It should be pointed out that 1 and 2 are our home networks and that the test was run with the microcontrollers less than a metre away from the Wi-Fi router. I am assuming that the other two networks are from our nearest neighbour which may be about 80 metres away.
Much more egregious, even after trying for two minutes, the Super Mini running the 4th sketch, wifi_connect.ino
, could not connect to the local Wi-Fi network. A XIAO ESP32C3 usually connects in about half a second. Clearly, it's an impedance problem. Actually, I have no idea what I am talking about and I am just repeating some stuff I read. Nevertheless, it does make a bit of sense since I noticed that the Super Mini would connect rapidly if my hand was touching or very near the board. Besides, it does appear as if some components are missing between the ceramic antenna and the LNA_IN
pin of the ESP32-C3 chip.
Clearly, holding onto the board to get the Wi-Fi working is not a viable solution. Luckily, my search yielded another Arduino Forum message by al1fch which said that "I solved my WiFi connection problems by reducing the transmission power with a [WiFi.setTxPower
] command to put before WiFI.begin()
". I tested that idea and it worked.
If a Super Mini is having problems connecting to a Wi-Fi network, then enable the #define TRY_TX_POWER
macro in the wifi_connect
sketch and you may have success as shown above. To be honest, setting the transmit power to 11 dbm may not work, so it may be necessary to adjust the TX_POWER
macro to another value. Nevertheless, the good news is that it was possible to get the Super Mini connected to the Wi-Fi network.
Picking a random transmit power is not the best way to get reliable Wi-Fi connections. I wrote the wifi_tx_power
project to try to ascertain the best setting for reliable results. The following table shows the time five different ESP32-C3 dev boards needed to establish a connection to the Wi-Fi network (in milliseconds). The SM x boards are the four Super Mini ESP32C3 boards I obtained recently while XIAO is the SeeedStudio XIAO ESP32C3 development board.
Board | XIAO | Super Mini | |||
---|---|---|---|---|---|
SM 1 | SM 2 | SM 3 | SM 4 | ||
WIFI_POWER_default | 1143 | - | - | - | - |
WIFI_POWER_19_5dBm | 443 | - | 1230 | - | - |
WIFI_POWER_19dBm | 430 | 477 | - | - | - |
WIFI_POWER_18_5dBm | 440 | 546 | 961 | - | - |
WIFI_POWER_17dBm | 391 | 443 | 389 | 532 | - |
WIFI_POWER_15dBm | 404 | 410 | 425 | 422 | - |
WIFI_POWER_13dBm | 376 | 729 | 684 | 469 | 1440 |
WIFI_POWER_11dBm | 429 | 423 | 399 | 409 | 484 |
WIFI_POWER_8_5dBm | 729 | 1929 | 414 | 425 | 443 |
WIFI_POWER_7dBm | 1923 | 718 | 413 | 430 | 399 |
WIFI_POWER_5dBm | 904 | 388 | 427 | 546 | 442 |
WIFI_POWER_2dBm | 678 | 507 | 390 | 937 | 408 |
Where there's a dash (-
), the board had not been able to connect in 2 minutes. The good news is that all boards managed to make a connection with our local Wi-Fi network. The bad news it that the transmission power setting is different from board to board, although the XIAO managed to establish a connection no matter what the transmit power was set to. Don't forget, the dev board is about a meter (39 inches) from the Wi-Fi router.
Bluetooth LE Functionality
In an overview of SeeedStudio's XIAO ESP32C3, a brief check of the Bluetooth® Low Energy (BLE) capabilities of the ESP32-C3 microcontroller was carried out. I'm not going to repeat this discussion here. I'll simply say that the microcontroller is configured as a BLE device (server) with an LED service and a switching characteristic. Any central device (client) can obtain the status of the LED, turn it on, or turn it off by sending the appropriate messages. Bluetooth Controlled LED explains how to use LightBlue, an Android application as a client. I also used nRF Connect from Nordic to do the same thing.
I adjusted the program so that it can be used with the Super Mini C3. It is in the 07_ble_led
directory of the supermini_esp32c3_sketches repository on GitHub. The program uses the ArduinoBLE library which does not seem to be the most used option for BLE on ESP32 chips. On the other hand, it seems simpler than the Espressif offer. It's easy to use the ArduinoBLE
library in PlatformIO. In the Arduino IDE, there will be a conflict between this library and the one included in the esp32
kernel (3.0.1) of Espressif. The ble_led.ino
file contains a possible approach to compiling ble_led
with the Arduino IDE. I hope others find something better, because the proposed solution is not practical at all.
In order to better test BLE connectivity with the ESP32-C3, I created a similar project using the BLE library instead of the ArduinoBLE library (see the 08_ble_led2
directory of the supermini_esp32c3_sketches repository on GitHub). Initially, the BLE library was the work of Neil Kolban, but it is now included in the ESP32 core for Arduino. Consequently, it does not present any conflict and can be compiled in the Arduino IDE and in PlatformIO. It has another advantage because it supports setting the BLE power level. Unlike setting Wi-Fi TX (transmit) power, setting the BLE power level did not result in obvious improvements in Bluetooth connectivity. Only BLE power type ESP_BLE_PWR_TYPE_DEFAULT with power levels -21dbm, -15dbm, -9dbm, -3dbm, +3dbm + 9dbm, +15dbm and +21dbm, were tested. BLE power settings are more complex than Wi-Fi transmit power settings, so there may be something to gain in investigating this further.
The important thing here is the performance of the Super Mini C3 cards. It is terrible. Sometimes the connection between the microcontroller and the Android tablet took a considerable. At other times, the tablet had to be very close to, practically touching, the microcontroller for the connection to be made. There were times when a connection could not be established at all, even though LightBlue found the Super Mini when scanning for devices. The XIAO-ESP32C3, on the other hand, was reliable showing that the problem cannot be attributed to the ESP32-C3. It may very well be located at the antenna again. Here the nRF Connect
scan graph illustrates the difference.
The above figure is actually two separate scans which were then superimposed as if both a Super Mini C3 and a Seeed XIAO ESP32C3 were advertising at the same time. Looking at that graph, it is obvious why the Super Minis which I happen to have cannot be used for Bluetooth connections.
Recommendation?
Would I recommend purchasing a Super Mini ESP32C3? In a word: no. I am not the only one with questions about this board. Read mabbaco's comment from about a year ago about dubious boards being offered by some sellers. Do go on and read the comments that follow; it's all a bit confusing.
I should mention that all the boards I received had an ESP32-C3FN4 which is an end of life chip. That is probably not all that important; the current version has a higher environmental temperature range, which would rarely be consequential for hobbyists. The quality control problems, as illustrated by Treza88) are more significant.
Indeed two of four boards I received had damaged crenellated connection in the pin 5 location. While not making the board inoperable, these defects do not inspire confidence.
Also without a metal can, one can guess that these boards do not comply with FCC regulations. In some circumstances a board that is spewing RF interference could be a real problem.
There is no valid reason to purchase these boards from the Aliexpress vendor at the regular discounted price. Would I purchase them at the CDN $2.50 price point again? Perhaps if I had a use for them for an outside project where the RF interference would not be as important and if it did not require Bluetooth. However I will have to test the effective Wi-Fi range before make a final judgment about that.
I will confess to a préjugé favorable (a positively prejudiced opinion) when it comes to XIAO series boards. Their quality and consistent form factor make them a favourite of mine. Shipping costs is often a hurdle with Seeed products, but there are sales with free shipping every now and then. The XIAO may be cheaper that some Super Mini C3s on those occasions.
Who am I to spew forth in this manner? Everyone should make up their own mind. Besides, my sample of only four devices purchased from a single supplier is far too limited. Please note that Bertrand (Électro-Bidouilleur) published a 637th video entitled Découverte - Micro-Contrôleur ESP32-C3 avec WiFi et BLE (in French obviously) where there is never any question of the problems described above. He got his Super Mini card from another seller and, based on the label on the anti-static bag, the manufacturer might be different.
Finally, anyone planning to buy the XIAO ESP32C3 should look at the XIAO ESP32C6 which is the big brother of the XIAO ESP32C3 offered at a marginally higher price. I may have more to say about that latter although there is a post about that board: First Look at the Seeed Studio XIAO ESP32C6.