Hardware v1.0. This is the board inside every MeshCam leaf camera, and the board sold as the bare-board SKU.
It is an ESP32-S3 module-direct design: no carrier, no dev board underneath. The GPIO map below is the whole pin budget. Read it before planning custom firmware, because there are fewer spare pins than a raw ESP32-S3 dev board suggests.
Connector numbering skips J4, J5 and J7. Those existed on earlier prototype revisions (a socketed radio bay, an external battery harness) and were removed before production. Nothing is missing on your board.
| Ref | Connector | Location | Function |
|---|---|---|---|
| J1 | USB-C receptacle | left edge | Charge input (5 V) plus native USB serial console and firmware flashing. Does not power the board — see the power tree below. |
| J2 | 24-pin 0.5 mm FFC | top edge | Camera module (DVP interface). |
| J3 | JST-PH, 3-pin | top edge | PIR sensor input (AM312). |
| J6 | JST-XH, 2-pin | top edge | Solar panel input, nominal 6 V. |
| J8 | microSD (push-push) | left edge | Storage, SDMMC 1-bit mode. |
| J9 | u.FL | radio corner | LoRa antenna, 915 MHz (US915). |
| J10 | 2.54 mm socket, 4-pin | left side | BME280 environmental sensor (I2C). |
| J11 | JST-PH, 3-pin | top edge | IR illuminator output, PIR-gated. Feeds an external 12 V boost and 850 nm array for night captures. |
J6, J3 and J11 sit next to each other along the top edge, in that order. Their housings use two different JST families, XH on J6 and PH on J3/J11, specifically so the solar plug cannot be mis-seated into the PIR or IR sockets.
Bottom-contact ribbon: contacts face down, toward the board.
| Pin | Signal | Pin | Signal | Pin | Signal | Pin | Signal |
|---|---|---|---|---|---|---|---|
| 1 | NC | 7 | VSYNC | 13 | XCLK | 19 | Y2 |
| 2 | AGND | 8 | PWDN | 14 | Y8 | 20 | Y5 |
| 3 | SDA | 9 | HREF | 15 | DGND | 21 | Y3 |
| 4 | AVDD (2.8 V) | 10 | DVDD (1.5 V) | 16 | Y7 | 22 | Y4 |
| 5 | SCL | 11 | DOVDD (2.8 V) | 17 | PCLK | 23 | NC |
| 6 | RESET | 12 | Y9 | 18 | Y6 | 24 | NC |
| Pin | Signal |
|---|---|
| 1 | 3V3 |
| 2 | PIR_OUT — digital, wakes the board from deep sleep |
| 3 | GND |
| Pin | Signal |
|---|---|
| 1 | BAT+ — raw battery voltage, about 2.5–3.65 V |
| 2 | PIR_OUT — same wake/gate signal as J3, enables the external boost |
| 3 | GND |
J3 and J11 use the same pin order on purpose. Plugging one into the other's socket is harmless: the IR boost just sees 3.3 V, and the PIR sees a wider input range than it needs.
| Pin | Signal |
|---|---|
| 1 | SOLAR_IN (+) |
| 2 | GND |
| Pin | Signal |
|---|---|
| 1 | VIN (3V3) |
| 2 | GND |
| 3 | SCL |
| 4 | SDA |
This matches the pinout printed on common GY-BME280 breakout modules. I2C address 0x76.
Single-ended 50 Ω RF, straight to the RAK3172's antenna pad. Read the compliance section below before substituting an antenna.
The module's pins are almost entirely committed by the board design. This is the complete pin budget. There is no larger pool of free GPIO hiding elsewhere.
| GPIO | Function |
|---|---|
| IO0 | BOOT button |
| IO1 | LoRa module reset (active low) |
| IO2 | UART RX from LoRa module |
| IO3 | Battery voltage sense (ADC, resistor-divided) |
| IO4 | Camera SDA (sensor I2C) |
| IO5 | Camera SCL (sensor I2C) |
| IO6 | Camera VSYNC |
| IO7 | Camera HREF |
| IO8 | Camera Y4 |
| IO9 | Camera Y3 |
| IO10 | Camera Y5 |
| IO11 | Camera Y2 |
| IO12 | Camera Y6 |
| IO13 | Camera PCLK |
| IO14 | UART TX to LoRa module |
| IO15 | Camera XCLK |
| IO16 | Camera Y9 |
| IO17 | Camera Y8 |
| IO18 | Camera Y7 |
| IO19 | USB D− (native USB: console + flashing) |
| IO20 | USB D+ |
| IO21 | PIR wake input (deep-sleep wake source) |
| IO35–37 | Not usable (internal octal PSRAM) |
| IO38 | microSD DAT0 |
| IO39 | Camera power switch (active low, off by default) |
| IO40 | BME280 SDA |
| IO41 | BME280 SCL |
| IO42 | LoRa module BOOT0 (module firmware-update mode select) |
| IO43 | Free — the one clean spare digital GPIO on this board |
| IO44 | Radio + microSD power switch (active low, off by default) |
| IO45 | Not usable (module boot strap, flash voltage select) |
| IO46 | Input only, with a caveat: it is a boot-mode strap and must read low during a BOOT-button flash. Fine for anything that reads low at reset. |
| IO47 | microSD CLK |
| IO48 | microSD CMD |
Non-GPIO module pins: EN (reset) and 3V3/GND are broken out to the usual places, but not to a header.
The camera and LoRa-UART pins are fixed by the board. Reassigning them means routing a change nobody has validated. IO43 is the only pin free for a new purpose with no caveats, and IO46 works too if your use can tolerate reading low at reset.
The board runs from a single 26650 LiFePO4 cell (3.2 V nominal), fitted in an on-board holder. There is no cell-swap connector.
A Li-ion 26650 is 3.7 V nominal. The charge circuit on this board is built for LiFePO4's lower voltage and charging profile. A Li-ion cell in a LiFePO4 charger is a safety hazard, not just a spec mismatch.
From the battery, three rails exist:
Three LEDs, grouped at one board edge, give a charge readout without opening the enclosure. Four combinations are meaningful.
| Input LED | CHG (red) | DONE (green) | Meaning |
|---|---|---|---|
| dark | dark | dark | No input reaching the board. Check the cable or charger. |
| lit | lit | dark | Charging normally. |
| lit | dark | lit | Full. |
| lit | dark | dark | The charger has declined to charge: out-of-window temperature, or a cell fault. |
The RAK3172's FCC grant covers full power (22 dBm) only with an antenna at or under 2.3 dBi gain on J9. The antenna MeshCam ships (Linx ANT-916-CW-HW, 1.2 dBi) is inside that limit. Swapping to a higher-gain antenna takes the board outside its certified operating conditions.
The LoRa module's own firmware cannot be modified by anyone but RAK. That is an FCC modular-certification rule, not a MeshCam restriction. The ESP32 side is fully open to custom firmware. The ESP32 to RAK3172 link is AT commands over UART (RAK's RUI3 firmware), which already exposes everything the product needs: frequency, bandwidth, spreading factor and TX power.
86 × 95 mm, four M4 mounting holes. If your enclosure has a conductive back panel, use nylon screws. The on-board cell holder's negative terminal runs close to two of the mounting holes, and nylon keeps that isolated.
Questions about the board, or something here that does not match the one in your hand? hello@getmeshcam.com.