Boosting ESP32-C3 SuperMini WiFi: A Simple and Effective Antenna Mod
The ESP32-C3 SuperMini modules are incredibly affordable, costing around €2, and are equipped with a compact SMD antenna. However, this tiny antenna significantly limits the usable WiFi range due to its design. To address this issue with minimal effort, I implemented a simple antenna modification that drastically improved performance.

The Antenna Modification
This modification involves adding a 31 mm length of 1.0 mm silver-plated wire, configured as a quarter-wavelength (λ/4) antenna.
The bottom section of the wire is bent into a horizontal loop (approximately 16 mm of the wire length, forming a loop with a diameter of about 8 mm), while the remaining 15 mm section is angled vertically upwards.
I wrapped the circular loop around the shaft of a 5 mm drill and then widened the ends of the loop so that they touch the terminals of the SMD antenna. The SMD antenna effectively completes the wire loop—mechanically at a quarter of its circumference, but electrically as a λ/4 element in parallel with a λ/8 wire.
Solder the new antenna directly to both ends of the original SMD antenna on the ESP32 module. Specifically, solder to the 50 Ohm antenna pin (the left end of the original antenna) and to the other “hot” end of the original antenna. This effectively bypasses the original PCB antenna. Ensuring two good solder joints at both ends of the PCB antenna is crucial. Pay close attention to the position of the wire that goes up from the loop. The old aerial has been left in place as it becomes electrically ineffective in this configuration.
EDIT: Meanwhile, some adaptations of my antenna design have been published in blog posts and YouTube videos. However, some of these adaptations struggle with the TOTAL 31mm length of the antenna wire, leading to suggestions to elongate the vertical section to make the complete antenna a 5/8 lambda radiator. This isn’t very wise if you want the antenna to radiate omnidirectionally and preserve the acceptable mechanical dimensions.
Testing with the WiFi Logger Program
To evaluate the effectiveness of this modification, I used my custom WiFi logger program written for ANNEX32 BASIC. The program compares the signal strength (RSSI) of two ESP32 modules: one unmodified and one with the new antenna.

The live signal data was displayed in real-time on a tablet browser.
Both modules were mounted side by side on a portable power bank to ensure identical testing conditions while moving around various locations near an access point (AP).
Results
The signal strength curves recorded with the WiFi Logger program consistently demonstrated a clear superiority of the modified module over the original. Under the testing conditions, where both modules were mounted side-by-side on a power bank and moved around various locations near an access point (AP), the modified antenna consistently provided higher signal levels.
On average, the improvement in signal strength was at least approximately 6dB. In many cases, particularly at the edges of the WiFi signal range or in environments with more interference, the improvement even exceeded 10dB. This difference in signal strength had a significant impact on the stability of the connection. The modified module maintained a stable connection while the unmodified module was more prone to disconnections or performance degradation.
To illustrate the results:
- In close proximity to the Access Point: The improvement was often 6 dB to 8 dB, resulting in a more stable and less fluctuating connection.
- At a greater distance from the Access Point: The improvement often reached 10 dB or more, making the difference between a usable and unusable connection. The modified module could receive and send data, while the unmodified module could not establish a connection or suffered from extremely slow data transfer.
- In environments with obstacles (e.g., walls): The modified antenna showed better penetration and provided a more stable connection compared to the unmodified module, which struggled to maintain the signal.
These improvements led to a significantly extended WiFi range. Theoretically, every 6 dB increase in signal strength corresponds to a doubling of the range. In practice, this means that the modified ESP32-C3 SuperMini module was able to establish a reliable WiFi connection in areas where the unmodified module had no or only a very unstable connection.
Observations
The original SMD antenna CrossAir CA-C03 placed at the ESP32-C3 SuperMini module, due to its small size, high dielectrical ceramic material, and the compact antenna geometry, is inherently less efficient at radiating and receiving RF energy than an in-air-standing antenna wire . Just because it is designed as a very compact quarter-wave antenna, on the other hand this results in a limited bandwidth and a more omnidirectional radiation pattern.
But in particular, the antenna was not positioned at the location on the PCB explicitly recommended by the manufacturer in the datasheet. Instead, the SMD antenna is mounted too close to the ground plane and other components. This positioning shields the RF energy rather than allowing for effective radiation.
I experimented with the new antenna made of a 0.8 mm ordinary switching wire and even removed SMD antenna from the board. But it actually works about 2dB better with the 1 mm silver plated wire and the untouched SMD antenna.
Caveats of a *Very* Compact Antenna Design
The <Datasheet> of the SMD antenna CA-C03 by Cross Air requires:
• PCB edge positioning,
• sufficient clearance around it,
• a 3.8 mm × 0.5 mm stripline,
• a 3 nH inductance “Shunt1”
The actual ESP32-C3 SuperMini‘s PCB design lacks several key features, most notably adequate free space around the antenna and an orthogonally radiating stripline, which also affects the antenna’s resonance frequency. These limitations result in misalignment, partially reflected RF energy and reduced RF efficiency.
An experimental, freer-standing mounting of the SMD antenna, more in line with the datasheet specifications, has already demonstrated an approximate 4 dB improvement in gain.
However, this could not overcome the fundamental limitations of this very compact SMD antenna compared to the simple quarter-wave wire antenna described as a modification here.
The latter angled wire antenna benefits from its electrically non-shortened geometry and a more unobstructed and more effective omnidirectional radiation, achieving sure gains of 6–10 dB compared to the original SMD antenna.

In contrast, the new, non-shortened and freestanding quarter-wave antenna can produce an undampened and more consistent field. This is likely due to the combination of now unshielded horizontal and vertical elements, which helps minimize null points in the omnidirectional radiation pattern and enhances signal coverage. The loop at the bottom of the antenna creates a horizontal radiation pattern without nulls, while the orthogonally angled element optimizes the vertically polarized component of the signal.
All these factors in the unmodified module appear to result in a poor standing wave ratio (SWR) at its RF output. This means that a significant portion of the RF energy is reflected back from the antenna into the ESP32 and thus can’t be radiated. As an additional consequence, the final TX stage heats up, potentially reducing the actual RF output power and thereby again reducing the transmission range. Under unfavorable conditions, the ESP32 may still receive a strong enough Wi-Fi signal, but the access point might receive a weaker or even insufficient signal from the ESP32.
The result is a significantly reduced Wi-Fi operation range of the unmodified module.
Interestingly, removing the actually obsolete original PCB antenna had no obvious effect and was therefore unnecessary. This suggests that the low-impedance lower part of the new antenna completely outperformed the PCB antenna, allowing the new, more prominent wire to take over and radiate the RF signal much more effectively. However, it is important to note that the correct placement and orientation of the angled end of the wire, along with its total length and diameter, are crucial for optimal performance.
Conclusion
The antenna modification presented offers a compelling and cost-effective method for significantly enhancing the WiFi performance of ESP32-C3 SuperMini modules. By combining the stock PCB antenna with a carefully crafted quarter-wavelength wire antenna, users can experience substantial improvements in signal strength, stability, and range. The observed gains of 6dB to over 10dB translate to more reliable connectivity, particularly in environments with weak signals or obstructions. This modification not only extends the usable range of the ESP32-C3 but also unlocks its potential for applications requiring robust and consistent wireless communication. While the modification requires basic soldering skills, the resulting performance boost makes it a worthwhile endeavor for hobbyists, makers, and developers seeking to maximize the capabilities of these inexpensive modules

–
##
###
####
#####
The dilemma of choice

There are many slightly different ESP32-C3 SuperMini boards in the shops on the web. Here are some of these boards arranged for comparison regarding the antenna section.
Most of them still lack a good antenna design and do not adhere to the antenna’s datasheet guidelines.
Boards with an IPEX socket for an external antenna require soldering a jumper to activate the socket—and even then, the SMD antenna must be removed.
A greater distance between the SMD antenna,
the ESP chip, and other components could be an indicator of a better design, but it is not necessarily a guarantee.
All of these boards still exhibit very modest WiFi range,
and the additional 31mm wire antenna continues to make a significant improvement.
–
####
###
##
#
The utilized ANNEX32-BASIC test program:
It has turned out for me that I can program my ESP32 projects most effectively with ANNEX32. This is an extremely versatile BASIC interpreter and an integrated development environment that runs completely in the ESP32 after a one-time firmware installation. Fast browser-based program development and adaptations are thus extremely simplified.
Forget all what you think to know about ancient BASIC dialects … It’s worth taking a look at the ANNEX32 Firmware for the ESP32 at CiccioCB.com !!!
The web-based Annex32 Firmware Installation is here
'######## WIFI-GRAPH-LOGGER ####################################
' This program compares the WiFi signal strengths (RSSI) of two ESP32 modules.
' It aims to graphically display the impact of different antennas on signal quality.
'
' - Module 1 (local): Displays its own signal strength to the Access Point (AP).
' - Module 2 (remote): Sends its signal strength to Module 1.
' Operation modes:
' RX = 1: This module (local) regularly sends HTTP requests to the remote module.
' TX = 1: This module (remote) responds to HTTP requests with its signal strength.
' Author: Peter Neufeld (peter.neufeld@gmx.de, 03/2025)
' Configuration for the local module (ESP32 Module 1):
RX = 1 ' This module sends requests to the remote module.
TX = 0 ' This module does not respond to requests.
' Configuration for the remote module (ESP32 Module 2):
'RX = 0 ' This module does not send requests.
'TX = 1 ' This module responds to requests.
REMOTE_IP$ = "192.168.0.134" ' IP address of the remote module (Module 2)
X_Num = 100 ' Number of measurements to display in the graph.
WIFI_REMOTE$ = "" ' Stores the received RSSI values from the remote module.
'onhtmlreload: Triggered when the webpage is reloaded.
onhtmlreload WEBPAGE
gosub WEBPAGE
' Enables URL handler for TX mode:
IF TX = 1 onurlmessage RETURN_WIFI_STRING
' Enables asynchronous HTTP requests in RX mode:
IF RX = 1 onwgetasync RECEIVE_REMOTE_STRING
' Timer to regularly measure local signal strength:
timer0 500, LOG_MY_WIFI_CONNECTION
' Timer to regularly query remote signal strength:
IF RX = 1 timer1 1000, GET_REMOTE_WIFI_LOG_STRING
WAIT
'###############################################################
LOG_MY_WIFI_CONNECTION:
' Measures local WiFi signal strength and stores it in WIFI_LOCAL$.
w=0
for i = 1 to 50
w = wifi.rssi + w ' Accumulates RSSI values for averaging.
next i
w = W / (i-1) ' Calculates the average RSSI value.
WIFI_LOCAL$ = trim$(WIFI_LOCAL$ + " " + str$(wifi.rssi,"%2.1f"))
c = word.count(WIFI_LOCAL$, " ") ' Counts stored values.
p = instr(1, WIFI_LOCAL$, " ") ' Finds the first value in the string.
p = len(WIFI_LOCAL$) - p ' Calculates the length of remaining values.
If c > X_Num then WIFI_LOCAL$ = right$(WIFI_LOCAL$, p) ' Limits the number of values.
' Updates the graph with local values:
jscall |traceme(0,"| + WIFI_LOCAL$ + |");|
' Updates the graph with remote values if available:
if WIFI_REMOTE$ <> "" jscall |traceme(1,"| + WIFI_REMOTE$ + |");|
return
'###############################################################
RETURN_WIFI_STRING:
' Returns local RSSI values as a response to an HTTP request.
URLMSGRETURN WIFI_LOCAL$
R=PING(“ “) ‘workaround for memory leak issue in 1.70.3 to .5
return
'###############################################################
GET_REMOTE_WIFI_LOG_STRING:
' Sends an HTTP request to the remote module to query its RSSI values.
wgetasync ("http://" + REMOTE_IP$ + "/msg?x=1")
return
'###############################################################
RECEIVE_REMOTE_STRING:
' Receives and stores the RSSI values from the remote module.
WIFI_REMOTE$ = WGETRESULT$
R=PING(“ “) ‘workaround for memory leak issue in 1.70.3 to .5
return
'###############################################################
WEBPAGE:
' Creates and loads the HTML page with the graph to display RSSI values.
cls
jsexternal "/xy.min.js" ' Loads external JavaScript library for graphs.
cnt = 0
a$ = ""
a$ = a$ + |WiFi Graph for two ESP32 modules:|
a$ = a$ + |GREEN: With additional antenna|
a$ = a$ + |RED: With standard antenna|
a$ = a$ + | |
html a$
pause 500
A$ = ""
A$ = A$ + |var datasets = [|
A$ = A$ + | {|
A$ = A$ + | lineColor : 'rgba(20,100,100,1)',|
A$ = A$ + | pointColor : 'rgba(20,20,20,1)',|
A$ = A$ + | pointStrokeColor : '#fff',|
A$ = A$ + | data : []|
A$ = A$ + | },|
A$ = A$ + | {|
A$ = A$ + | lineColor : 'rgba(151,30,0,1)',|
A$ = A$ + | pointColor : 'rgba(151,80,0,1)',|
A$ = A$ + | pointStrokeColor : '#fff',|
A$ = A$ + | data : []|
A$ = A$ + | }|
A$ = A$ + |];|
A$ = A$ + |var ctx2 = document.getElementById('canvas1').getContext('2d');|
A$ = A$ + ||
A$ = A$ + |var xy = new Xy(ctx2, {rangeX:[0,|+ STR$(X_Num)+ |], rangeY:[-80,-35]|
A$ = A$ + |, smooth:0.05, pointCircleRadius:2, pointStrokeWidth:1 });|
A$ = A$ + ||
A$ = A$ + |function traceme(set, data){|
A$ = A$ + | var s = data.split(" ");|
A$ = A$ + | for (var i=0; i<s.length; i++) {|
A$ = A$ + | datasets[set].data[i] = [i, s[i]];|
A$ = A$ + | }|
A$ = A$ + | xy.draw(datasets);|
A$ = A$ + |}|
jscript A$
A$ = "" ' Frees memory.
return
………………………………………………………………..
Useful links:
https://www.ti.com/lit/an/swra117d/swra117d.pdf
https://fcc.report/FCC-ID/2A7IN-PM016/6344297.pdf
https://www.johansontechnology.com/docs/2/jti-antenna-mounting.pdf
https://espressif.github.io/esp32-c3-book-en/chapter_5/5.2/5.2.5.html
https://fcc.report/FCC-ID/2ASYE-T-ECHO/6227962.pdf
https://www.nxp.com/docs/en/user-guide/UM10992.pdf
……………………………………………….
…………………………………
……………………..
…………..
…….




