Cheng Liang's project has been published on Instructables.
At the end of 2025, I stumbled upon Maker Cheng Liang's ESP32-C5 Dual Band WiFi Analyzer project on Insturctables. This sparked my great interest. Coincidentally, I had been keeping an eye on Espressif's ESP32-C5 chip, as I felt that a chip supporting 2.4G & 5G WiFi 6 would bring me a lot of fun and expand application possibilities.
Fortuitously, I had also been following the teaser announcements for the Seeed Studio XIAO ESP32-C5. I managed to get my hands on one through some channels, and using Cheng Liang's project as a foundation, I began to explore the dual-band WiFi capabilities of the ESP32-C5. It was truly cool!!!
The biggest difference between the ESP32-C5 and the vast majority of previous Espressif ESP chips (such as the classic ESP32, ESP32-S3, ESP32-C3, ESP32-C6, etc.) is that it is Espressif's first MCU to truly support Dual-band Wi-Fi 6 (2.4GHz + 5GHz). Previous ESP series chips mostly supported only the 2.4GHz band, while the ESP32-C5 has made a breakthrough by adding 5GHz support.
Compared to 2.4GHz, the biggest advantage of the 5GHz band is minimal interference and cleaner channels (typically there are more than 20 non-overlapping channels, compared to only 3 in the 2.4GHz band). This means that in dense wireless environments with many neighbors, the connection is more stable and latency is lower.
Although limited by the 20MHz bandwidth configuration, the theoretical peak speeds of the ESP32-C5 in 2.4GHz and 5GHz are close. However, in practical applications, the 5GHz band can effectively avoid congestion, thereby achieving actual throughput closer to the theoretical limit (usually a net throughput of over 30~50Mbps). This is particularly suitable for real-time image transmission, low-latency IoT control (such as smart switches, game controllers), and OTA firmware upgrades—applications that demand high connection reliability and low latency.
Simply put, the ESP32-C5 allows low-power IoT devices to get on the "expressway" for the first time: when the 2.4GHz band is congested, it can automatically or manually switch to 5GHz to avoid "Wi-Fi traffic jams." It is an ideal choice for smart home gateways, smart cameras, and scenarios with concurrent multi-device connections.
Next, using the XIAO ESP32-C5 and Cheng Liang's project, I will demonstrate the function of the WiFi Analyzer and showcase the dual-band WiFi capabilities of the XIAO ESP32-C5.
Software1. Update ESP32 Support
You need to open the Boards Manager in the Arduino IDE and update the esp32 package to version 3.3.5 or later to ensure that you can find the XIAO ESP32-C5.
2. Download the Arduino_GFX Library and U8g2 library
2.1 Open the LIBRARY MANAGER, search for "GFX for various displays" and download it.
2.2 Open the Library Manager, search for U8g2, and download it.
Next, we will connect the ILI9341 display to the XIAO ESP32-C5. The ILI9341 can be purchased on Amazon, and the XIAO ESP32-C5 is available in the Seeed Studio Store.
The pins I used here are not exactly the same as those used by Chen Liang. I have modified them based on the specifications of the XIAO ESP32-C5. Please use jumper wires to make the connections according to the following list:
XAIO ESP32-C5 ILI9341
======== =======
3v3 -> VCC
GND -> GND
D4(GPIO23) -> CS
D2(GPIO25) -> Reset
D5(GPIO24) -> DC/RS
D10(GPIO10) -> SDI/MOSI
D8(GPIO8) -> SCK
D0(GPIO1) -> LEDPlease ensure the wiring is correct before powering on ! ! !
Upload pogram1. Connect the XIAO ESP32-C5
2. Open ESP32C5WiFiAnalyzer Example
path : File -> Examples -> GFX Library for Arduino -> WiFiAnalyzer -> ESP32C5WiFiAnalyzer
3. Modify the Program
Since I have modified some pins according to the actual specifications of the XIAO ESP32-C5, the program needs to be updated accordingly.
Locate the following section of the program, namely the part from Start of Arduino_GFX setting to End of Arduino_GFX setting.
/*******************************************************************************
* Start of Arduino_GFX setting
*
* Arduino_GFX try to find the settings depends on selected board in Arduino IDE
* Or you can define the display dev kit not in the board list
* Defalult pin list for non display dev kit:
* ESP32-C5 various dev board : CS: 23, DC: 24, RST: 25, BL: 26, SCK: 10, MOSI: 8, MISO: nil
******************************************************************************/
...................
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/Change it to:
/*******************************************************************************
* Start of Arduino_GFX setting
******************************************************************************/
#include <U8g2lib.h>
#include <Arduino_GFX_Library.h>
// 1. Modify the backlight pin
#define GFX_BL D0
#if defined(DISPLAY_DEV_KIT)
Arduino_GFX *gfx = create_default_Arduino_GFX();
#else /* !defined(DISPLAY_DEV_KIT) */
/* 2. Modify data pins (SCK, MOSI, CS, DC, RST) */
// Define your pins
#define MY_DC D5
#define MY_CS D4
#define MY_SCK D8
#define MY_MOSI D10
#define MY_MISO -1
#define MY_RST D2
// Manually create the bus using Arduino_ESP32SPI
Arduino_DataBus *bus = new Arduino_ESP32SPI(MY_DC, MY_CS, MY_SCK, MY_MOSI, MY_MISO);
// Create a screen object
Arduino_GFX *gfx = new Arduino_ILI9341(bus, MY_RST, 1 /* rotation */, false /* IPS */);
#endif /* !defined(DISPLAY_DEV_KIT) */
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/4. Upload
Upload the program to the XIAO ESP32-C5 development board, then press the reset button. Wait a moment to check the result. As you can see, it scans and displays the signal strength distribution of the surrounding 2.4G and 5G networks.
The only thing to note is that you should preferably add an antenna to gain better WiFi reception.
It can be used as a portable device that you can carry around with you. You can prepare a lightweight USB-C power supply for it~
Adapted for the Round Display for Seeed Studio XIAOThe Round Display for Seeed Studio XIAO uses the GC9A01 screen, which has a resolution of 240x240. It can be used as a WiFi analyzer, but it has one drawback: it cannot display the information completely.
Similarly, you need to modify the section from Start of Arduino_GFX setting to End of Arduino_GFX setting.
/*******************************************************************************
* Start of Arduino_GFX setting
******************************************************************************/
#include <U8g2lib.h>
#include <Arduino_GFX_Library.h>
// 1. Modify the backlight pin
#define GFX_BL D0
#if defined(DISPLAY_DEV_KIT)
Arduino_GFX *gfx = create_default_Arduino_GFX();
#else /* !defined(DISPLAY_DEV_KIT) */
/* 2. Modify data pins (SCK, MOSI, CS, DC, RST) */
// Define your pins
#define MY_DC D3
#define MY_CS D1
#define MY_SCK D8
#define MY_MOSI D10
#define MY_MISO -1
#define MY_RST D2
//Manually create the bus using Arduino_ESP32SPI
Arduino_DataBus *bus = new Arduino_ESP32SPI(MY_DC, MY_CS, MY_SCK, MY_MOSI, MY_MISO);
// Create a screen object
// Arduino_GFX *gfx = new Arduino_ILI9341(bus, MY_RST, 0 /* rotation */, false /* IPS */);
Arduino_GFX *gfx = new Arduino_GC9A01(bus, MY_RST, 0 /* rotation */, true /* IPS */);
// Arduino_GFX *gfx = new Arduino_ST7789(
// bus,
// DF_GFX_RST,
// 0 /* rotation */,
// true /* IPS */,
// 240 /* width */,
// 240 /* height */
// );
#endif /* !defined(DISPLAY_DEV_KIT) */
/*******************************************************************************
* End of Arduino_GFX setting
******************************************************************************/Effect:
Video Demonstration:
ConclusionI am extremely grateful to Chen Liang, the creator, for this project. It is very interesting and I hope you will like it.







Comments