Table of Contents
Dual-Band WiFi 6 in the Palm of Your Hand
Today, we will look at the Seeeduino XIAO ESP32-C5, the first XIAO board with 5 GHz Wi-Fi!
Introduction
Today, we’re diving into the world of dual-band WiFi with the Seeeduino XIAO ESP32-C5, a remarkable development board that brings professional-grade wireless connectivity to the tiny XIAO form factor.

The ESP32-C5 represents a significant milestone in Espressif’s ESP32 family. While previous ESP32 chips have been incredibly popular for IoT projects, they were limited to the crowded 2.4 GHz WiFi band. The ESP32-C5 changes everything by introducing true dual-band WiFi 6 support, covering both 2.4 GHz and 5 GHz frequencies.
Why Does Dual-Band Matter?
Think of the 2.4 GHz WiFi band as a busy highway during rush hour. With countless devices—smartphones, laptops, smart home gadgets, Bluetooth devices, and even microwave ovens—all competing for the same limited spectrum, interference and congestion are inevitable. The 2.4 GHz band has only 3 non-overlapping channels, meaning devices are constantly competing for bandwidth.
The 5 GHz band, by contrast, is like a wide-open expressway. It offers over 20 non-overlapping channels, dramatically reducing interference. While it doesn’t travel quite as far through walls, in most IoT applications, the cleaner signal and reduced latency more than compensate for the slightly shorter range.
The XIAO Form Factor Advantage
The XIAO ESP32-C5 packs this powerful dual-band capability into a board measuring just 21 x 17.8 mm—smaller than your thumb! This makes it perfect for:
Wearable devices where size matters, embedded projects with limited space, battery-powered sensors requiring efficient connectivity, and rapid prototyping with the XIAO ecosystem of expansion boards.
Today, we’ll explore the capabilities of this remarkable board, from basic connectivity to advanced power management, culminating in building a practical dual-band WiFi analyzer.
XIAO ESP32-C5 Specifications and Pinouts
Before we dive into experiments, let’s understand what makes the XIAO ESP32-C5 special.
Processor and Memory
The heart of the board is the ESP32-C5 chip, featuring a 32-bit RISC-V single-core processor running at up to 240 MHz. This open-standard instruction set architecture is gaining popularity for its efficiency and flexibility. At 240 MHz, the ESP32-C5 has plenty of processing power for IoT applications, sensor data processing, and even basic image handling.
Memory specifications include 384 KB of on-chip SRAM for fast data operations, 320 KB ROM for boot code and libraries, 8 MB Flash memory for program storage, and 8 MB PSRAM for extended RAM in complex applications. Additionally, there’s 16 KB of real-time clock SRAM that remains powered during deep sleep modes.
Wireless Connectivity
This is where the ESP32-C5 truly shines. The WiFi capabilities include dual-band support for both 2.4 GHz and 5 GHz, WiFi 6 (802.11ax) with backward compatibility to 802.11 a/b/g/n/ac, and multiple operating modes including Station (STA), Access Point (AP), STA+AP, and Promiscuous mode for packet sniffing. Security is comprehensive with WPA/WPA2/WPA3 support.
For Bluetooth, it features Bluetooth 5.0 LE (Low Energy), Bluetooth Mesh support, and coexistence with WiFi through time-division multiplexing. Additionally, the ESP32-C5 supports Matter (the emerging smart home standard), Zigbee via ESP-IDF, and Thread for mesh networking.
GPIO and Interfaces
The XIAO ESP32-C5 exposes a generous array of interfaces: 11 digital I/O pins (D0-D10) all with PWM capability, 5 ADC channels with 12-bit resolution (0-3.3V) on the main pins plus 4 additional ADC channels (A1-A4) on the bottom pads, one I²C interface on pins D4/D5, one SPI interface on pins D8/D9/D10, two UART interfaces (USB Serial plus Hardware UART on D6/D7), and JTAG available on bottom pads for advanced debugging.
Power Management
The board features flexible power options with 5V input via USB-C or 3.7V via battery pads, 3.3V regulated output, direct connection support for 3.7V LiPo batteries with 100mA charging current, onboard SGM40567 charge management IC, battery monitoring via GPIO6 (with GPIO26 enable), and impressively low deep sleep current of approximately 10-100 µA.
Physical Specifications and Pinout
The board maintains the classic XIAO format at just 21 x 17.8 mm. It features castellated pads for surface mounting, a U.FL connector for external antennas, an FPC antenna that can be upgraded to RP-SMA for better range, a user-programmable LED (LED_BUILTIN on GPIO15), and both BOOT and RESET push buttons.

Bottom pads include B+ (battery positive for 3.7V LiPo), B- (battery negative), JTAG connections for diagnostics, and additional analog inputs A1-A4.

Initial Setup and Testing
Now let’s get the board up and running to verify everything works correctly.
Hardware Setup
First, connect the antenna. Open your XIAO ESP32-C5 package and locate the small FPC antenna. Carefully connect it to the U.FL connector on the board. You should hear or feel a small click when properly seated. This antenna is essential for both 2.4 GHz and 5 GHz operation.
IMPORTANT: Never operate the WiFi without an antenna connected, especially on 5 GHz. This can damage the radio circuitry. If you need to increase the range, you can upgrade to an external SMA antenna.

Next, connect a USB-C cable. Use a quality USB-C cable that supports data transfer, not just power. Connect the XIAO to your computer.
Software Setup
Install Arduino IDE: If you haven’t already, download Arduino IDE 2.x from arduino.cc.
Add ESP32 Board Support: Open Arduino IDE and go to File → Preferences. In ‘Additional Boards Manager URLs’, add: “https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json“.
Click OK, then go to Tools → Board → Boards Manager. Search for ‘esp32‘ and install ‘esp32 by Espressif Systems‘ version 3.0.5 or higher. Version 3.0.5+ includes support for the ESP32-C5. Note that you need at least version 3.3.5 for full compatibility.
Verification Sketch – Get Chip ID
Let’s verify everything is working by reading the chip’s information. This simple sketch confirms communication and identifies your specific chip:
You will find the ChipID sketch in the following location: File →Examples →Examples for XIAO ESP32-C5 →ESP32-ChipID →GetChipID
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* The true ESP32 chip ID is essentially its MAC address. This sketch provides an alternate chip ID that matches the output of the ESP.getChipId() function on ESP8266 (i.e. a 32-bit integer matching the last 3 bytes of the MAC address. This is less unique than the MAC address chip ID, but is helpful when you need an identifier that can be no more than a 32-bit integer (like for switch...case). created 2020-06-07 by cweinhofer with help from Cicicok */ uint32_t chipId = 0; void setup() { Serial.begin(115200); } void loop() { for (int i = 0; i < 17; i = i + 8) { chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i; } Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision()); Serial.printf("This chip has %d cores\n", ESP.getChipCores()); Serial.print("Chip ID: "); Serial.println(chipId); delay(3000); } |
Upload this sketch and open the Serial Monitor at 115200 baud. You should see output showing ‘ESP32-C5’, the chip revision, and a unique chip ID based on the MAC address.

XIAO ESP32-C5 Connectivity
One of the most exciting features of the ESP32-C5 is its comprehensive connectivity options. Let’s explore the dual-band WiFi, Bluetooth, and other wireless capabilities.
WiFi 6 Dual-Band Capabilities
The ESP32-C5 supports WiFi 6 (802.11ax) on both 2.4 GHz and 5 GHz bands. This is the first time Espressif has brought 5 GHz capabilities to a mainstream microcontroller. The advantages are significant:
2.4 GHz Band – Channels 1-14, better range and wall penetration, more crowded spectrum with only 3 non-overlapping channels, shared with Bluetooth and many other devices.
5 GHz Band – Channels 36-165 (region dependent), over 20 non-overlapping channels, less interference from other devices, higher potential throughput, slightly reduced range, but cleaner signal.
The board can operate in multiple modes: Station mode (STA) connects to existing WiFi networks, Access Point mode (AP) creates its own WiFi network, STA+AP mode operates as both simultaneously, and Promiscuous mode allows packet sniffing for network analysis.
Experiment: Dual-Band WiFi Scan
Let’s scan both WiFi bands to see what networks are around us. This example sketch comes with the ESP32 board package and demonstrates the dual-band capability. You will find it at File →Examples →Examples for XIAO ESP32-C5 →WiFi→WiFiScan
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/* * This sketch demonstrates how to scan WiFi networks. For chips that support 5GHz band, separate scans are done for all bands. * The API is based on the Arduino WiFi Shield library, but has significant changes as newer WiFi functions are supported. * E.g. the return value of `encryptionType()` different because more modern encryption is supported. */ #include "WiFi.h" void setup() { Serial.begin(115200); // Enable Station Interface WiFi.STA.begin(); Serial.println("Setup done"); } void ScanWiFi() { Serial.println("Scan start"); // WiFi.scanNetworks will return the number of networks found. int n = WiFi.scanNetworks(); Serial.println("Scan done"); if (n == 0) { Serial.println("no networks found"); } else { Serial.print(n); Serial.println(" networks found"); Serial.println("Nr | SSID | RSSI | CH | Encryption"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.printf("%2d", i + 1); Serial.print(" | "); Serial.printf("%-32.32s", WiFi.SSID(i).c_str()); Serial.print(" | "); Serial.printf("%4ld", WiFi.RSSI(i)); Serial.print(" | "); Serial.printf("%2ld", WiFi.channel(i)); Serial.print(" | "); switch (WiFi.encryptionType(i)) { case WIFI_AUTH_OPEN: Serial.print("open"); break; case WIFI_AUTH_WEP: Serial.print("WEP"); break; case WIFI_AUTH_WPA_PSK: Serial.print("WPA"); break; case WIFI_AUTH_WPA2_PSK: Serial.print("WPA2"); break; case WIFI_AUTH_WPA_WPA2_PSK: Serial.print("WPA+WPA2"); break; case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print("WPA2-EAP"); break; case WIFI_AUTH_WPA3_PSK: Serial.print("WPA3"); break; case WIFI_AUTH_WPA2_WPA3_PSK: Serial.print("WPA2+WPA3"); break; case WIFI_AUTH_WAPI_PSK: Serial.print("WAPI"); break; default: Serial.print("unknown"); } Serial.println(); delay(10); } } // Delete the scan result to free memory for code below. WiFi.scanDelete(); Serial.println("-------------------------------------"); } void loop() { Serial.println("-------------------------------------"); Serial.println("Default wifi band mode scan:"); Serial.println("-------------------------------------"); #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 2) WiFi.setBandMode(WIFI_BAND_MODE_AUTO); #endif ScanWiFi(); #if CONFIG_SOC_WIFI_SUPPORT_5G // Wait a bit before scanning again. delay(1000); Serial.println("-------------------------------------"); Serial.println("2.4 Ghz wifi band mode scan:"); Serial.println("-------------------------------------"); WiFi.setBandMode(WIFI_BAND_MODE_2G_ONLY); ScanWiFi(); // Wait a bit before scanning again. delay(1000); Serial.println("-------------------------------------"); Serial.println("5 Ghz wifi band mode scan:"); Serial.println("-------------------------------------"); WiFi.setBandMode(WIFI_BAND_MODE_5G_ONLY); ScanWiFi(); #endif // Wait a bit before scanning again. delay(10000); } |
Upload this sketch and watch the Serial Monitor. You’ll see three scans: first, all networks, then 2.4 GHz only, then 5 GHz only. Notice how the 2.4 GHz band is usually much more crowded, while 5 GHz shows fewer networks but cleaner channels.

The key function here is WiFi.setBandMode(), which lets you specify WIFI_BAND_MODE_2G_ONLY, WIFI_BAND_MODE_5G_ONLY, or leave it unset for both bands. This is useful in your own projects when you want to optimize for a specific band.
Bluetooth Low Energy
The ESP32-C5 includes Bluetooth 5.0 LE, supporting multiple roles: broadcasting mode for beacons, peripheral mode for sensors, central mode for data collection, and mesh mode for networks. Note that this is Bluetooth LE only – it does not support Bluetooth Classic.
The Bluetooth operates in the 2.4 GHz ISM band and can coexist with WiFi through time-division multiplexing, though simultaneous high-bandwidth use of both may impact performance.
Experiment: BLE Scanner
Let’s scan for nearby Bluetooth LE devices. Once again, we will use a demo sketch included with the ESP32 Boards manager. You can find it at File →Examples →Examples for XIAO ESP32-C5 →BLE→Scan
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/* Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp Ported to Arduino ESP32 by Evandro Copercini */ #include <BLEDevice.h> #include <BLEUtils.h> #include <BLEScan.h> #include <BLEAdvertisedDevice.h> int scanTime = 5; //In seconds BLEScan *pBLEScan; class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str()); } }; void setup() { Serial.begin(115200); Serial.println("Scanning..."); BLEDevice::init(""); pBLEScan = BLEDevice::getScan(); //create new scan pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster pBLEScan->setInterval(100); pBLEScan->setWindow(99); // less or equal setInterval value } void loop() { // put your main code here, to run repeatedly: BLEScanResults *foundDevices = pBLEScan->start(scanTime, false); Serial.print("Devices found: "); Serial.println(foundDevices->getCount()); Serial.println("Scan done!"); pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory delay(2000); } |
This sketch scans for BLE devices every few seconds and displays their addresses and signal strengths. You’ll likely find smartwatches, fitness trackers, wireless headphones, and other BLE devices nearby.

Matter, Thread, and Zigbee Support
The ESP32-C5 supports emerging IoT protocols through its IEEE 802.15.4 radio:
- Matter 1.0 – The new smart home standard backed by Apple, Google, and Amazon. The ESP32-C5 can operate as a Matter over WiFi end device, Matter over Thread end device, or Matter bridge. Requires ESP-IDF for programming.
- Thread – A mesh networking protocol for smart home devices operating on 2.4 GHz channels 11-26. Can function as a Thread end device, router, or border router. Requires ESP-IDF.
- Zigbee – The established mesh protocol for home automation. Can operate as a coordinator, router, or end device. Requires ESP-IDF.
These advanced protocols require programming with ESP-IDF rather than Arduino IDE, but open up sophisticated networking capabilities for professional IoT products.
XIAO ESP32-C5 Low Power Modes
For battery-powered IoT projects, the ESP32-C5’s low power capabilities are crucial. The chip can operate in several power modes, each trading functionality for reduced current consumption.
Understanding the Power Modes
The ESP32-C5 is capable of running in four power modes:
- Active Mode – Normal operation with all peripherals available. Current consumption ranges from 30-240 mA depending on whether WiFi/Bluetooth are active and what peripherals are in use. This is your standard operating mode.
- Modem Sleep Mode – The WiFi/Bluetooth modem reduces power between beacon intervals. Current drops to 15-30 mA, though wake-up requires 80 mA briefly. The CPU remains active and can process data. Good for applications that need periodic wireless communication.
- Light Sleep Mode – The CPU is paused and the clock is gated, but RAM is retained. Current consumption drops to 0.8-2 mA. Wake-up is fast since memory is preserved. Excellent for applications that need quick response to external events.
- Deep Sleep Mode – Only the RTC (Real-Time Clock) remains powered. CPU is off, RAM is off, and current drops to an incredible 10-100 µA. Perfect for sensor nodes that wake periodically to send data. Wake-up requires restarting the CPU, so it’s slower, but battery life can extend to months or years.
Battery Life Calculations
Let’s calculate potential battery life with different power modes using a typical 1000 mAh LiPo battery:
- Active Mode (100 mA average) – 1000 mAh / 100 mA = 10 hours
- Light Sleep (2 mA) – 1000 mAh / 2 mA = 500 hours (21 days)
- Deep Sleep (50 µA) – 1000 mAh / 0.05 mA = 20,000 hours (833 days / 2.3 years)
Of course, real applications will mix these modes. For example, a sensor that wakes every hour for 10 seconds to send data, then returns to deep sleep:
- Awake time per day: 24 hours × 10 seconds = 240 seconds = 0.067 hours at 100 mA = 6.7 mAh
- Sleep time per day: 23.93 hours at 0.05 mA = 1.2 mAh
- Total per day: 7.9 mAh, giving 1000 / 7.9 = 127 days on a single charge!
Experiment: Deep Sleep with Timer Wake
Let’s demonstrate deep sleep mode with a timer wake-up:
The key elements here are: RTC_DATA_ATTR which stores variables in RTC memory (survives deep sleep), esp_sleep_enable_timer_wakeup() which sets the wake-up timer, and esp_deep_sleep_start() which puts the board to sleep.
Upload this sketch and open the Serial Monitor quickly. You’ll see: ‘Boot number: 1’ and ‘Wakeup: not deep sleep’ (first boot), then every 5 seconds: ‘Boot number: 2, 3, 4…’ and ‘Wakeup: timer’. The boot counter increments even though the board completely powers down between cycles, proving that RTC memory is retained.
Note: During deep sleep, the USB serial connection is lost. The board effectively disconnects from your computer and the port may disappear. This is normal – the board will reconnect on wake-up.

Build a Dual-Band WiFi Analyzer
Now for the exciting part – let’s build a practical dual-band WiFi analyzer! This device will scan both 2.4 GHz and 5 GHz networks and display them on a color LCD screen, showing signal strength and channel usage at a glance.
This project is based on work by maker Chen Liang and demonstrates the real-world utility of dual-band WiFi. It’s perfect for finding the best WiFi channel for your router, identifying interference sources, or surveying coverage in your home or office.
Required Components
This is a very simple project that essentially requires only the XIAO ESP32-C5 and a display.
- Seeeduino XIAO ESP32-C5 with antenna attached (critical!)
- ILI9341 2.4-inch TFT LCD display (MSP2202 or similar) – available for $5-10
- Jumper wires for connections
- Optional: 3.7V LiPo battery for portable operation
- Optional: Small enclosure for finished device
Required Libraries

Before wiring, install these libraries through Arduino IDE’s Library Manager:
- Search for ‘GFX Library for Arduino’ by moon-on-our-nation – Install it
- Search for ‘U8g2’ by oliver – Install it
The WiFi analyzer code is actually included as an example in the GFX Library, which we’ll modify slightly for the XIAO ESP32-C5.
Wiring Diagram
Connect the ILI9341 display to the XIAO ESP32-C5 as follows:

If your display has an SD card slot, those pins can remain unconnected for this project.
IMPORTANT: Double-check all connections before powering on. Incorrect wiring can damage the display or board.
The Code
The WiFi analyzer code is extensive, so we’ll focus on the key parts and the necessary modification for the XIAO ESP32-C5. Here’s how to access and modify it:
- In Arduino IDE, go to File → Examples → GFX Library for Arduino → WiFiAnalyzer → ESP32C5WiFiAnalyzer
- The example will open in a new window
- We need to make ONE critical change for the XIAO ESP32-C5
Find this line near the top of the sketch (around line 25):
|
1 |
#define TFT_BL DEFAULT_BACKLIGHT_PIN |
Change it to:
|
1 |
#define TFT_BL 1 |
This modification tells the code to use GPIO1 (D0) for the backlight control instead of the default pin, which doesn’t exist on the XIAO form factor.
Understanding the Code
While the full code is lengthy, here are the key concepts:
- Display Initialization: The code sets up the ILI9341 display using SPI communication. It divides the screen into two sections – top half for 2.4 GHz and bottom half for 5 GHz.
- WiFi Scanning: The sketch alternates between scanning 2.4 GHz and 5 GHz bands:
- WiFi.setBandMode(WIFI_BAND_MODE_2G_ONLY);
- int n = WiFi.scanNetworks(false, true, false, 300);
- Channel Mapping: Networks are sorted by channel number. The 2.4 GHz band shows channels 1-14, while 5 GHz shows channels 36-165 (region dependent).
- Signal Strength Visualization: Each network appears as a vertical bar, with height corresponding to signal strength (RSSI). Stronger signals create taller bars.
- Color Coding: Different networks are shown in different colors for easy identification.
Uploading and Testing
- Make sure your XIAO ESP32-C5 board is selected (Tools → Board → XIAO_ESP32C5)
- Select the correct port (Tools → Port)
- Verify that the antenna is connected to the XIAO
- Click Upload
- Wait for the compilation and upload to complete
- Press the RESET button on the XIAO
The display should light up and start showing WiFi networks. You’ll see the 2.4 GHz scan first, then it switches to 5 GHz. The alternating scans continue every few seconds.

Interpreting the Display
Top Half (2.4 GHz): Shows channels 1-14 across the horizontal axis. You’ll likely see a crowded display with many overlapping networks. The three non-overlapping channels (1, 6, 11) are often the most congested in urban areas.
Bottom Half (5 GHz): Shows channels 36-165. This will typically be much cleaner with fewer networks and better separation between channels. If you’re in a residential area, you might see primarily your own 5 GHz networks here, as 5 GHz doesn’t penetrate walls as well.
Signal Strength: Taller bars indicate stronger signals (closer access points). Colors help distinguish between different networks on the same or nearby channels.
Channel Numbers: Along the bottom edge, you can see the channel numbers to identify which channels are most/least crowded.
Using Your WiFi Analyzer
Finding the Best Channel for Your Router:
- Run the analyzer in the location where you plan to place your router
- Watch the 2.4 GHz display and identify gaps between the bars
- For 2.4 GHz, choose channels 1, 6, or 11 (the only non-overlapping channels) that show the least activity
- For 5 GHz, any channel with minimal or no bars works well, as all channels are non-overlapping
- Configure your router to use the clearest channel you identified
Making It Portable: Connect a 3.7V LiPo battery to the B+ and B- pads on the bottom of the XIAO (observe polarity!). The analyzer will run for several hours on a 500-1000 mAh battery, making it perfect for walking around your home, finding dead zones, checking neighbor interference, and optimizing access point placement.
The XIAO’s onboard battery charging circuit means you can recharge by simply connecting USB power while the battery is attached.
Troubleshooting
This project should work right away, but if you have problems, you can check the following troubleshooting suggestions:
- Display stays white or blank: Check all wiring connections, ensure the backlight change was made (TFT_BL = 1), verify the display is an ILI9341 model, try pressing RESET on the XIAO.
- No 5 GHz networks showing: Confirm antenna is properly connected, verify you have 5 GHz networks in range (try placing analyzer next to your 5 GHz router), ensure ESP32 board support is version 3.3.5 or higher, some regions restrict certain 5 GHz channels.
- Upload fails: Check that XIAO_ESP32C5 board is selected, ensure USB cable supports data (not power-only), try pressing BOOT button while uploading, verify port selection is correct.
- Display shows garbled graphics: This usually indicates SPI wiring issues – double-check MOSI, SCK, and CS connections.
Enhancements and Modifications
Once you have the basic analyzer working, consider these improvements:
- Add a button to freeze the display for easier reading.
- Add data logging to SD card to track WiFi environment over time.
- Display SSID names alongside bars when space permits.
- Add a battery voltage indicator.
- Calculate and display optimal channel recommendations. Create a 3D-printed case for portability. Add a buzzer for audio feedback. Implement a web interface to view results remotely.
This project demonstrates the real-world utility of the XIAO ESP32-C5’s dual-band capabilities. It’s a practical tool you’ll reach for whenever you’re setting up or troubleshooting WiFi networks.
Conclusion and Other Applications
Congratulations! You’ve explored the powerful capabilities of the XIAO ESP32-C5, from its dual-band WiFi 6 support to its impressive low-power modes, and built a practical WiFi analyzer that showcases these features.
What Makes the ESP32-C5 Special
The ESP32-C5 stands out in the XIAO family and indeed in most compact development boards for several reasons: it’s the first mainstream microcontroller to bring true dual-band WiFi (2.4 GHz + 5 GHz) to such a tiny form factor; WiFi 6 support provides better efficiency and performance in congested environments; comprehensive protocol support (WiFi, Bluetooth, Matter, Thread, Zigbee) makes it future-proof; ultra-low deep sleep current (10-100 µA) enables years of battery operation; and the XIAO form factor makes it perfect for space-constrained applications.
Perhaps most importantly, all this capability comes at an incredibly affordable price point of less than $7, making it accessible for hobbyists while being powerful enough for commercial products.
Other Applications for the XIAO ESP32-C5
Based on what we’ve learned, here are excellent use cases for this board:
- Smart Home Hub/IoT Gateway: Use 5 GHz backhaul to your router while serving 2.4 GHz devices. Act as a central controller for lights, sensors, and thermostats. The cleaner 5 GHz connection prevents dropouts during heavy network use.
- Wireless Camera/Video Doorbell: Leverage 5 GHz bandwidth for smooth video streaming. Upgrade ESP32-CAM projects with cleaner, higher-bandwidth connectivity. Reduced interference means fewer dropped frames.
- Environmental Monitoring Network: Deploy battery-powered sensors that wake periodically to upload data. Deep sleep mode enables months of operation on small batteries. Use 5 GHz for reliable data transmission in crowded WiFi environments.
- Mesh Network Nodes: Operate as Station+AP simultaneously on different bands. Create WiFi mesh systems or coverage extenders. Use 5 GHz for backhaul to avoid reducing client bandwidth.
- Wireless Audio Devices: Take advantage of 5 GHz for high-quality, low-latency audio streaming. Build internet radios, wireless speakers, or audio receivers. Avoid 2.4 GHz interference for CD-quality streaming.
- Matter-Compatible Smart Devices: Build devices compatible with Apple HomeKit, Google Home, and Alexa simultaneously. Use Thread or WiFi as transport (requires ESP-IDF programming). Position yourself for the future of smart home standards.
- Low-Latency Remote Controllers: Utilize 5 GHz for reduced latency in real-time control. Perfect for robot controllers, drone interfaces, or gaming peripherals. Faster response time on cleaner spectrum.
Key Takeaways
Choose the XIAO ESP32-C5 when you need dual-band WiFi (especially 5 GHz), cleaner wireless spectrum in crowded environments, higher bandwidth for video or audio streaming, lower latency for real-time control, WiFi 6 future-proofing, or tiny form factor with full ESP32 capabilities.
Consider alternatives when 2.4 GHz is sufficient (ESP32-C3, ESP32-C6), you need dual-core processing (ESP32-S3), maximum range is critical (2.4 GHz travels farther), or you need the absolute lowest cost.
Conclusion
The XIAO ESP32-C5 represents a significant leap forward for compact IoT development. By bringing dual-band WiFi 6 to the XIAO form factor, Seeed Studio has created a board that’s truly future-proof, ready for the increasingly congested wireless environments of tomorrow.
Whether you’re building a simple sensor or a complex mesh network, the ESP32-C5 gives you professional-grade connectivity in a hobbyist-friendly package. The dual-band capability isn’t just a nice feature—it’s a game-changer that opens up applications that were previously impractical or impossible with single-band microcontrollers.
Thank you for following along with this tutorial. I hope you found it informative and inspiring. As always, have fun, learn something new, and create something amazing with your XIAO ESP32-C5!
Parts List
Here are some components that you might need to complete the experiments in this article. Please note that some of these links may be affiliate links, and the DroneBot Workshop may receive a commission on your purchases. This does not increase the cost to you and is a method of supporting this ad-free website.
XIAO ESP32-C5 Seeed Studio
TFT LCD SPI Display Amazon
Resources
XIAO ESP32-C5 Wiki – Seeed Studio’s Wiki for the XIAO ESP32
XIAO Pin Multiplexing – Guide with Arduino IDE and PlatformIO
PlatformIO with XIAO ESP32-C5 – Guide for programming the ESP32-C5 using PlatformIO
XIAO ESP32-C5 with MicroPython – Seeed Studio guide for using MicroPython with XIAO ESP32-C5






Very much enjoyed your excellent video on the newest XIAO. Its quality was not surprising given all your previous work. May I suggest a correction? Zigbee can be done in the Arduino IDE using the esp32 arduino core. The arduino-esp32 team, SuGlider, P-R-O-C-H-Y, me-no-dev and others, have done a considerable amount of work on this in the past few months. There are many examples in the 3.3.x version of the Zigbee library. To toot my own horn, I have adapted 3 of these to work with the XIAO ESP32C5 using the onboard boot button and user LED (repo: xiao_esp32c5_sketches). It… Read more »
Commenting on my own comment… that’s not good.
I was wrong about Thread and Matter. They are also well supported in the Arduino IDE.
The File/Examples/OpenThread/CLI/ThreadScan.ino example sketch was able to find another XIAO ESP32-C5 running the File/Examples/OpenThread/CLI/SimpleNode.ino sketch. Just make sure to enable PSRAM in both cases.
It was also possible to compile the File/Examples/Matter/MatterOnOffLight.ino sketch but that was not tested in any way.
So again, a lot of work has been done on the esp32 aduino core.