Wi-Fi 6 on the ESP32-C6 (OLED)
The RISC-V ESP32-C6 boots its real 802.11ax station stack, scans the virtual ether, joins BreadboardNet and leases an address over DHCP, then renders the live link (SSID, IP, channel, RSSI) to an OLED on the C6 pins (SDA G23, SCL G22). Open the 📡 Sniffer to watch every frame, and click the board to inspect all three of its radios: Wi-Fi, Bluetooth LE and the 802.15.4 MAC that Thread and Zigbee share.

How it works
The same MicroPython Wi-Fi API on the newest silicon: the ESP32-C6 boots its own generic MicroPython image and joins BreadboardNet as an 802.11ax (Wi-Fi 6) station. The code is line-for-line the C3 dashboard except one detail worth knowing: the C6's default I²C bus lives on different pins (SCL=G22, SDA=G23), so the OLED driver is retargeted. Same scan, same DHCP, same dashboard: SSID, IP, channel, RSSI.
What's on the bench
- Battery
- ESP32-C6
- OLED 128×64
How it's wired
- Battery · pos→ESP32-C6 · vin
- Battery · neg→ESP32-C6 · gnd
- OLED 128×64 · gnd→ESP32-C6 · gnd2
- OLED 128×64 · vcc→ESP32-C6 · 3v3
- OLED 128×64 · scl→ESP32-C6 · g22
- OLED 128×64 · sda→ESP32-C6 · g23
The code
This MicroPython script runs on the emulated board every boot; edit it in the Code tab.
from machine import I2C, Pin import framebuf, time i = I2C(0, scl=Pin(22), sda=Pin(23)) buf = bytearray(1024) fb = framebuf.FrameBuffer(buf, 128, 64, framebuf.MONO_VLSB) for c in b'\xae\xd5\x80\xa8\x3f\xd3\x00\x40\x8d\x14\x20\x00\xa1\xc8\xda\x12\x81\xcf\xd9\xf1\xdb\x40\xa4\xa6\xaf': i.writeto(0x3c, bytes([0, c])) def show(): i.writeto(0x3c, b'\x00\x21\x00\x7f\x22\x00\x07') i.writeto(0x3c, b'\x40' + buf) import network w = network.WLAN(network.STA_IF) w.active(True) fb.fill(0); fb.text('WiFi 6 scan...', 0, 28); show() rssi = 0; ch = 1 for ss, bssid, c, r, sec, hid in w.scan(): if ss == b'BreadboardNet': rssi = r; ch = c w.connect('BreadboardNet') while not w.isconnected(): time.sleep_ms(100) ip = w.ifconfig()[0] print('connected', ip, 'ch', ch, 'rssi', rssi) while True: fb.fill(0) fb.text('C6 WiFi 6 UP', 0, 0) fb.hline(0, 10, 128, 1) fb.text('BreadboardNet', 0, 16) fb.text('IP ' + ip, 0, 30) fb.text('ch %d %d dBm' % (ch, rssi), 0, 44) show() time.sleep_ms(500)
Try this
- Click the C6: its Inspector has a tab per radio (Wi-Fi, BLE, 802.15.4), each with a live dot.
- Diff this Code tab against the ESP32-C3 Wi-Fi example: the I²C pins are the only real change.
- Open the 📡 Sniffer during the join: the frames are the same 802.11 conversation.
- This is the chip the Zigbee, Thread, and BLE examples build on: three radios, one board.



