Source code that accompanies First Look at the Super Mini ESP32-C3.
Code source qui accompagne Coup d'oeil sur la carte de développement Super Mini ESP32-C3.
Table of Content
-
Hello world! sketches:
Wi-Fi connectivity sketches:
Bluetooth connectivity sketches
Working example:
The Super Mini ESP32C3 boards are small simplified versions of the original Espressif development boards for the ESP32-C3 microcontroller. Unlike older Espressif microcontrollers, the C3 has a RISC-V core.
It seems that there is more than one manufacturer of these boards that differ in more or less subtle ways. The pin diagram above shows the markings on four boards purchased from a Chinese vendor in late April 2024. There are no labels identifying the red power LED to the left of the USB connector and the blue LED under the reset (RST) button. There are no other components near the single component between the ESP32-C3 chip and the red ceramic antenna labelled C3. Other boards and the schematic have other components which may explain the problems encountered with Wi-Fi connectivity.
It should be possible to compile these projects in the Arduino IDE or in PlatformIO, although there are difficulties in a couple of cases if using the Arduino IDE.
Arduino sketches must have an .ino
file name extension and must be contained in a directory that has the same name as the Arduino sketch (excluding the extension). Consequently the 01_pin_names
project contains a directory named pin_names
that in turn contains the Arduino sketch pin_names.ino
. That file is only a long comment. This is not a problem because the Arduino IDE will import all source files found in the sketch directory. The actual code is in main.cpp
which is the default name of a PlatformIO project.
To compile and then upload the sketch in the Arduino IDE, click on the File top menu, click on Open..., then navigate to the pin_names.ino
file and open it with the system file manager.
Following the instructions in Installing using Arduino IDE the latest release of the Arduino-ESP32 framework was installed by entering the following URL
https://espressif.github.io/arduino-esp32/package_esp32_index.json
into the Additional Board Manager URLs
field of the Arduino Preferences. Using the board manager install the Espressif Arduino core esp32 version 3.0.1
or newer. It should then be possible to select MakerGO ESP32 C3 SuperMini
as the board.
Because of the Arduino sketch naming constraints, the main.cpp
file of a project is not stored in the default src
directory. A src_dir
entry in the platformio.ini
configuration file provides the name of the directory in which main.cpp
is found. That will be the name of the Arduino sketch as shown below for the 01_pin_names
project.
[platformio]
; Make the Arduino IDE happysupermini_esp32c3_sketches (github)% (.INO file must be in a directory of the same name)
src_dir = pin_names
PlatformIO will "convert" the sketch .ino
file, but that is of no consequence since it contains only comments.
The projects can be grouped in three categories.
Lists the I/O pin names and numbers of the Super Mini ESP32-C3 board.
Alternately blinks (heartbeat) and pulses the on-board LED of the Super Mini board.
Prints a list of available Wi-Fi networks every five seconds. The Super Mini does not manage to find as many networks as the XIAO ESP32C3. Edit secrets.h.template
and save as secrets.h
before compiling.
Wi-Fi connection example. The Super Mini may very well fail to connect. Define the TRY_TX_POWER macro to see if that solves the problem. It may be necessary to change the value of the TX_POWER macro. Edit secrets.h.template
and save as secrets.h
before compiling.
Tests each predefined value for the Wi-Fi TX (transmit) power and records the time required to connect to the Wi-Fi network. Edit secrets.h.template
and save as secrets.h
before compiling.
The table shows times needed to connect to a Wi-Fi network in milliseconds as a function of the radio TX power setting. The tests were run only once on a XIAO ESP32C3 and once on each of four different Super Mini boards. The -
signifies that a connection was not made within two minutes.
XIAO | 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 |
Three conclusions can be drawn.
-
The XIAO connected with the Wi-Fi router no matter the TX power setting. That may not be all that significant since the router was 1 metre away.
-
Not one of the four Super Mini boards was able to connect to the Wi-Fi network with the default TX power setting.
-
There is significant variation between the Super Mini boards.
When deploying a board, it may be necessary to test it multiple times in the position it will be used to find the proper TX power setting.
A rudimentary example of the Bluetooth® Low Energy (BLE) capabilities of the ESP32-C3. The microcontroller is set up as a BLE peripheral with a LED service and as switch characteristic. Any central (client) device can turn the LED on or off by sending a proper message. Bluetooth Controlled LED explains how to use LightBlue, an Android and presumably IOS application, to do that.
The Super Mini C3 boards that were tested did not do well. Sometimes the connection between the microcontroller and the Android tablet would require a considerable amount of time. At other times, the tablet had to be almost touching the microcontroller for the connection to be made. It happened that a connection could not be established at all even if LightBlue had found the Super Mini when it scanned for devices. By contrast, the XIAO-ESP32C3 was dependable.
This project is basically the same as 06_ble_led in xiao_esp32c3_sketches. Contrary what is stated in the documentation for that previous version, the project can be compiled in the Arduino IDE. It's definitely not properly set up for that. The ble_led.ino
file has details on how to do it.
This project is similar to the previous one except for the use of the BLE library instead of the ArduinoBLE library. The BLE library included in the ESP32 core for Arduino was the creation of Neil Kolban. This makes it possible to set 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.
Perhaps this test was done incorrectly. Any help on this subject would be appreciated.
Toggles the built-in LED on and off with a Web interface. It may be necessary to specify a valid Wi-Fi tx power as determined with the previous sketch. Edit secrets.h.template
and save as secrets.h
before compiling.
Aside from setting the radio TX power and handling the fact that the built-in LED is active LOW, this project is the same as 05_async_web_led in xiao_esp32c3_sketches.
This project cannot easily be compiled in the Arduino IDE:
The project uses the
esphome/ESPAsyncWebServer-esphome@^3.2.0
library which in turns depends on theAsyncTCP
library. The latter depends onIPv6Address.h
which is no longer included in the esp32 v3.0.1 core used in Arduino. So theesphome
libraries cannot be copied to a private library directory for use in Arduino unless esp32 v2.0.17 were used (see ptillisch). If the older esp32 core were used, theMakerGO ESP32 C3 SuperMini board
would not be defined. If we use v3.0.1, it seems that theESPAsyncWebServer
library loaded by the Arduino library manager which presumably does not requireIPv6Address.h
does not seem to support the ESP32-C3.
Copyright 2024, Michel Deslierres. No rights reserved.
While the copyright pertaining to included libraries must be respected, all the code by Michel Deslierres in this repository is in the public domain. In those jurisdictions where this may be a problem, the BSD Zero Clause License applies.