Loading 3D model… large boards can take a moment.
[!CAUTION] AI in use, use at own risk.
A small carrier board that turns an ESP32-C3 SuperMini and a cheap 433 MHz radio board into one 29 x 38 mm unit. It takes any of three common 2x4-header radios in the same socket:
Same ESP32 pins for every radio, one firmware pin map per board, and every track on one copper layer so it can even be etched at home.
| With the E07-M1101D (CC1101) | With the Ra-02 breakout (SX1278) |
|---|---|
The KiCad 9 project is hardware/esp32c3-radio-adapter. Ready-to-upload
Gerber packages are attached to the
latest release.
Contents:
Everything is a stock AliExpress / eBay / Amazon part costing a few dollars. The "Buy" links are AliExpress searches for the listing names; the "Details" links go to that board's page in this repository, with its dimensions, pinout and sources.
| Board |
|---|
| Buy |
|---|
| How to recognise it |
|---|
| Details |
|---|
| ESP32-C3 SuperMini | ESP32-C3 SuperMini | 18 x 22.5 mm, USB-C, 8 castellated pins per side, ceramic antenna at the far end from the USB-C. Usually ships with two 1x8 pin headers. | dimensions and pinout |
| One radio board, any of: | |||
| Ebyte E07-M1101D-SMA (CC1101) | E07-M1101D, also sold as "TENSTAR CC1101 433MHz wireless module" | Blue, 15 x 30 mm, 2x4 header at one end, SMA jack at the other, PCB marked "E07-M1101D V2.0". Take the -SMA, not the -TH spring-antenna variant that search leads with. Needs a 433 MHz SMA antenna (often included). | Ebyte product page, part page |
| D-Sun CC1101 (green) | CC1101 433MHz module, pick the green one | Green, 14.4 x 30 mm, silk "433MHz D-Sun CC1101", 2x4 header, SMA jack. Needs a 433 MHz SMA antenna. | part page |
| SX1278 Ra-02 breakout | SX1278 LoRa 433MHz Ra-02 | Blue 17.5 x 22.5 mm carrier with the Ai-Thinker Ra-02 can on top, 2x4 header underneath, silk "SX1278 LoRa 433MHz v4.0". Needs a U.FL (IPEX) to SMA pigtail plus a 433 MHz SMA antenna. | Ai-Thinker Ra-02 page, part page |
Get a 433 MHz SMA antenna, not the 868/915 MHz one many listings bundle with the same radio.
| Ref | Part | Qty | Notes |
|---|---|---|---|
| J1, J2 | 1x8 male pin header, 2.54 mm | 2 | For the SuperMini; usually in the bag with it. Or solder the SuperMini flat by its castellations and skip these. |
| J3 | 2x4 male pin header, 2.54 mm | 1 | The radio board's own header solders straight into the adapter. Fit a 2x4 female header instead if you want the radio removable. |
| J4 | 1x7 male pin header, 2.54 mm | 1 | Expansion header: 3V3 and the spare GPIOs. Optional. |
| J5 | 1x2 male pin header, 2.54 mm | 1 | DIO2 fly-wire header. Only needed for raw OOK on the SX1278. |
| JP1 | 1x2 male pin header + jumper cap, 2.54 mm | 1 | Radio-type strap. Jumper fitted for the Ra-02, open for a CC1101. |
| R1 | 0805 0 ohm resistor | 0 or 1 | Permanent alternative to the JP1 jumper (Ra-02 only). |
| R2, R3, R4 | 0805 4.7 kOhm resistors | 0 | Do-not-populate pull-ups on the boot straps: GPIO8 and GPIO2 (on J4) and GPIO9 (unused). Only if something you add holds one of them low at boot. |
| M2 screws or standoffs | 4 | The corner holes are 2.2 mm. | |
| Thin insulated wire, 30 to 50 mm | 1 | The DIO2 fly wire (Ra-02 only): a strand of wire-wrap or enamelled wire. |
A strip of 40-pin "breakaway" male header covers J1, J2, J4, J5 and JP1.
esp32c3-radio-adapter-<version>-jlcpcb.zip or
...-nextpcb.zip from the
latest release.
Each zip is a complete Gerber + drill package for that fab, with a
README.txt of the ordering options.| Option | Value |
|---|---|
| Size | 29.0 x 38.0 mm |
| Layers | 2 |
| Thickness | 1.6 mm FR-4 |
| Copper | 1 oz |
| Finish | ENIG preferred, HASL fine |
| Solder mask / silk | any colour, silkscreen both sides |
| Castellated holes | not needed |
The packages are rebuilt by CI on every push to main and carry the
git describe version in their name; the same string is printed in the
board's title block.
Etching it yourself. Every track is on the bottom copper; the top has
only pads and a ground pour. So the bottom layer alone works as a
single-sided board, with two limits: the SuperMini must go on with pin
headers (laid flat it would sit on the copper side, where its pin rows
come out mirrored), and R1 sits on the copper side. Use the .GBL,
.GBO and .DRL files from the package.
| Top | Bottom (all the tracks) |
|---|---|
The silkscreen outlines the two mechanical keep-outs, the footprints of the SuperMini and of the plugged-in radio board. J5 sits in the band between them and is the only thing that fits there.
The socket's eight positions go to fixed GPIOs. Which signal each carries depends on the radio, so firmware needs one pin map per board:
| Socket position | ESP32-C3 GPIO | E07-M1101D (blue CC1101) | D-Sun (green CC1101) | Ra-02 breakout (SX1278) |
|---|---|---|---|---|
| 1 | GND | GND | GND | GND |
| 2 | 3V3 | VCC | VCC | 3V3 |
| 3 | GPIO10 | GDO0 (radio out) | MOSI | RST (radio in) |
| 4 | GPIO1 | CSN | SCK | NSS |
| 5 | GPIO3 | SCK | MISO (radio out) | SCK |
| 6 | GPIO4 | MOSI | GDO2 (radio out) | MOSI |
| 7 | GPIO7 | MISO (radio out) | GDO0 (radio out) | MISO (radio out) |
| 8 | GPIO6 | GDO2 (radio out) | CSN | DIO0 (radio out) |
| J5 pin 2 | GPIO20 | DIO2/DATA (fly wire) | ||
| JP1 / R1 | GPIO5 | open | open | strapped to GND |
The same maps, signal first:
| Signal | E07-M1101D | D-Sun | Ra-02 |
|---|---|---|---|
| MOSI | GPIO4 | GPIO10 | GPIO4 |
| MISO | GPIO7 | GPIO3 | GPIO7 |
| SCK | GPIO3 | GPIO1 | GPIO3 |
| CSN / NSS | GPIO1 | GPIO6 | GPIO1 |
| GDO0 / DIO0 | GPIO10 | GPIO7 | GPIO6 |
| GDO2 | GPIO6 | GPIO4 | |
| RST | GPIO10 | ||
| DIO2/DATA | GPIO20 |
Telling the boards apart. GPIO5 is the radio-type strap. Read it with the internal pull-up enabled: low means the Ra-02 (jumper fitted), high means a CC1101 board. The three-state read that also covers the SX1278 module adapter is in the design notes. The two CC1101 boards are told apart without driving anything: an unconfigured CC1101 clocks about 135 kHz out of GDO0, so whichever of GPIO10 (blue board) and GPIO7 (green board) is toggling at power-up names the board. In the jumper-wire build the strap goes to GPIO0 instead of GND, so drive GPIO0 low as an output before reading GPIO5.
Why DIO2 matters on the SX1278. In its continuous mode the raw demodulated bitstream is available only on the DIO2/DATA pin. Packet mode carries only what the packet handler can frame, which suits Fineoffset weather stations but not the OOK remotes this node exists to hear and key. The Ra-02 breakout leaves DIO2 unconnected, hence the fly wire to GPIO20.
Never put a radio pin on GPIO2, GPIO8 or GPIO9. They are ESP32-C3 boot straps; a radio pin's capacitance makes the strap rise too slowly at reset and the chip drops into USB download mode instead of running. This was measured on the bench and later confirmed over JTAG -- on an affected board the GPIO_STRAP_REG latch reads the download pattern even though the live GPIO9 reads high -- and is not fixable in software, which is why the socket uses GPIO1 rather than GPIO9.
The same hook-up with Dupont jumper wires, so the firmware pin map is identical and you can test everything before ordering boards. Plug the female-to-female wires onto the SuperMini's headers and the radio board's 2x4 header. Both boards are drawn from the back, pins towards you.
| Wire | SuperMini pin | E07-M1101D | D-Sun | Ra-02 |
|---|---|---|---|---|
| brown | G | GND | GND | GND |
| red | 3V3 | VCC | VCC | 3V3 |
| grey | GPIO10 | GDO0 | MOSI | RST |
| purple | GPIO1 | CSN | SCK | NSS |
| blue | GPIO3 | SCK | MISO | SCK |
| white | GPIO4 | MOSI | GDO2 | MOSI |
| green | GPIO7 | MISO | GDO0 | MISO |
| yellow | GPIO6 | GDO2 | CSN | DIO0 |
| orange | GPIO5 | not fitted | not fitted | to the SuperMini's GPIO0 (radio-type strap) |
| black | GPIO20 | DIO2, soldered to the module's pin-7 land |
The Ra-02's orange strap wire goes to GPIO0 rather than GND because the SuperMini's only GND pin is taken by the brown wire; the firmware drives GPIO0 low while it reads the strap. The black DIO2 wire has no header pin at the radio end: solder it to the module's pin-7 castellation or the land just outside it, on the face away from the header pins. The header pinouts, with the DIO2 land marked on both faces:
A two-part case that fits the adapter with either radio is in
hardware/case/ as STL files. Every
release
carries it as esp32c3-radio-adapter-case-<version>.zip, plus the two
.stl files loose for dropping straight into a slicer. The zip holds the
STL files in print orientation, the case's STEP models, and a README.txt
with the parts' sizes, home FDM print settings and how to order them from
JLCPCB's 3D-printing service.
In the pictures and the notes below, the front is the antenna end,
the back the SuperMini end with the pry notch on the seam, and the
left wall the one with the USB-C window. The top half is the darker
shade.
Closed, with the E07-M1101D inside (its SMA jack through the front wall):
Open, the adapter pressed onto the pegs in the bottom half, with the Ra-02 breakout and its U.FL-to-SMA pigtail in the socket (the drawn pigtail runs straight to the bulkhead; a real one is longer, with the excess lying beside the breakout):
The halves on their own, and the slotted top:
| Bottom half: pegs, lip and the four snap tabs | Top half from below: bosses, grooved skirt, USB-C window, antenna hole | The slotted top half closed over the E07 |
|---|---|---|
The same views with the other radio (the Ra-02 closed, the E07-M1101D open) and the exploded views are in 3D models and case design.
esp32c3-radio-adapter-case-bottom.stl
and esp32c3-radio-adapter-case-top.stl, each printed open side up. No
supports, no screws; 2.2 mm walls; 36.2 x 66.7 x 16.7 mm
outside. Trim every pin under the board to about 1 mm first: the floor
counts on it.esp32c3-radio-adapter-case-top-slot.stl is the same top half with a
slot over the spare-GPIO header J4, for jumper wires out of the closed
case; print it instead of the plain top if you want that.The case is generated from the same dimensions as the boards by
scripts/build_case.py; see 3D models and case design.
Dimensioned drawings of both halves, with a checklist of caliper
measurements for a printed part, are in Case drawings.
hardware/esp32c3-sx1278-adapter.Not part of this repository, but worth a look before writing firmware from scratch: OpenMQTTGateway's RF gateway is ESP32 firmware that bridges 433 MHz to MQTT and already supports both radio families this adapter takes: CC1101 boards and SX127x modules. It offers four receiver flavours -- RCSwitch, Pilight and RF2 receive and transmit, RTL_433 receives only but knows the most devices. Its documented ESP32 + CC1101 builds are named as whole boards (Heltec WiFi LoRa 32, LilyGo LoRa 32, ESP32 DOIT DevKit, Ai-Thinker R01) rather than as a pin map, so this adapter's GPIOs would have to be mapped onto it, and the SX1278's DIO2 fly wire has no obvious counterpart there. Nothing here has been tried against it yet -- this is a lead to follow, not a tested route.
Apache License 2.0, see LICENSE.
No comments yet. Be the first to ask about this board.