Skip to the content
6 layers71.1 × 168.4 mmMeshtonic h4m v2, the printed circuit board in 3D

Meshtonic h4m v2

Josephrp/meshtonic11

Meshtonic H4M Companion — ESP32-S3 carrier for PortaPack H4M / Mayhem with multi-slot LoRa and standalone Meshtastic

Size
71.1 × 168.4 mm
Copper layers
6
Thickness
1.6 mm
Parts
118
Nets
136
Pads
516
Tracks, vias
1,519, 372
Pours
3
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
27 May 2026
Updated
4 Aug 2026

Overview

Meshtonic h4m v2 is an open-source printed circuit board by Josephrp, from the Josephrp/meshtonic repository on GitHub. It is a 6-layer board of 71.1 × 168.4 mm with 118 parts on 136 nets, routed with 1,519 tracks and 372 vias.

It is built around the TPS63020DSJR, CN3170 and CC0805KRX7R9BB104, with the 19-217-R6C-AL1M2VY-3T among its other parts. Its parts include 44 resistors, 18 capacitors, 15 connectors, 8 diodes and 5 ICs. It belongs with the radio and wireless boards and the ESP32 boards of this library.

Main components

4

README

README.md

Meshtonic

Meshtonic H4M Companion v2 is a custom carrier board and firmware stack for a Seeed XIAO ESP32-S3 Plus that docks to a HackRF + PortaPack H4M (Mayhem) and can also run as a standalone Meshtastic mesh node.

Repository: github.com/Josephrp/meshtonic (formerly Meteor-On-Mesh)

Meshtonic H4M Companion assembled

ModeRole
Docked (Mayhem MDK)ESP32 is an I2C slave at 0x51 on the PortaPack MDK connector. Exposes GPS, sensors, web UI, and 1–4 LoRa radios to Mayhem; runs the on-device LoRa decoder EPApp.
Standalone (Meshtastic)Flash the Meshtastic image instead. Board becomes a LoRa mesh node with GPS, TFT, and muxed sensors.

The two ESP32 firmwares are mutually exclusive — flash one or the other depending on whether you are using the board docked or as a mesh node.


Hardware overview

BlockParts
MCUSeeed XIAO ESP32-S3 Plus (ESP32-S3, 16 MB flash, OPI PSRAM)
LoRaUp to 4× Wio-SX1262 shields — shared SPI, per-radio CS on native GPIO, BUSY/DIO1/RST via MCP23017 @ 0x20
SensorsTCA9548A @ 0x70 mux: BMM150, BMP280, SHT3x, BMI160; AS5600 on the main I2C bus
GPSNEO-6M (UART1)
Display / storageILI9341 240×320 SPI TFT, microSD
Host linkPortaPack H4M / MDK-compatible connector (I2C slave + power)
PowerUSB / solar → CN3170 LiPo charge → TPS63020 3.3 V buck-boost

Canonical pin map (silicon GPIO numbers for the XIAO Plus — Dn ≠ GPIOn above D5):

  • Shared SPI: MOSI / MISO / SCK = GPIO 38 / 39 / 40
  • I2C: SDA / SCL = GPIO 5 / 6
  • WIO1–4 CS: GPIO 3 / 4 / 10 / 13
  • MCP INTA: GPIO 44 · WIO1 DIO1: GPIO 12
  • Full table: firmwares/pin_mapping.cpp and the variant PIN_AUDIT.md

System architecture
I2C address map H4M pinout

Architecture notes for the docked LoRa path (MCP ISR → radio manager → decoder → web / PortaPack) live in static/diagrams.md.

Enclosure

3D-printable case STLs (65 × 140 mm footprint):


Software stack

TreeUpstreamMeshtonic role
firmwares/meshtastic/Meshtastic firmware (GPL-3.0)Custom board env meshtonic-h4m-wio1 — WIO1-first standalone mesh
firmwares/mayhem-mdk/ESP32-Portapack / Mayhem MDK (HTL)Docked companion: HW_VARIANT_MESHTONIC_H4M, MCP + TCA drivers, multi-slot SX1262 manager, LoRa decoder EPApp, optional host LWD bridge
firmwares/mayhem-firmware/PortaPack Mayhem (GPL-3.0)Vendored Mayhem tree + PortaPack UI app under firmware/standalone/meshtonic_lora/

Shared first-party pin constants: firmwares/pin_mapping.cpp.

Docked LoRa decoder (MDK)

When Mayhem MDK is flashed with the Meshtonic H4M profile:

  1. ESP32 auto-runs the LoRa Decoder EPApp.
  2. Up to four Wio-SX1262 modules listen in parallel (narrowband).
  3. Optional HackRF wideband path: PortaPack sends short IQ bursts over I2C (0xA012); ESP DSP + decode run on-device.
  4. Status and packets paint on the PortaPack LCD (Apps over I2C) and/or the ESP web UI.

Protocol and backend IDs: firmwares/mayhem-mdk/docs/PORTAPACK_LORADEC.md.

mermaid
flowchart TD
  Board["Meshtonic H4M (1-4 Wio SX1262)"] -->|MCP23017 + shared SPI| Radios["LoraRadio slots"]
  Radios --> EPApp["EPAppLoraDecoder"]
  EPApp --> Decode["Decode layer"]
  Decode --> Packets["LoraPacket"]
  Packets --> Web["Web / WS"]
  Packets --> PP["PortaPack I2C @ 0x51"]
  HostLWD["Host LWD optional"] -.-> Packets

Repository map

text
meshtonic/
├── pcb/                 # KiCad project meshtonic_h4m_v2 (schematics, PCB, BOM, DFM)
├── firmwares/
│   ├── meshtastic/      # Meshtastic + meshtonic_h4m_wio1 variant
│   ├── mayhem-mdk/      # ESP32 Mayhem MDK + Meshtonic H4M profile
│   ├── mayhem-firmware/ # PortaPack Mayhem (+ meshtonic_lora PP app)
│   └── pin_mapping.cpp  # Canonical H4M v2 GPIO / MCP map
├── case/                # Enclosure STLs
├── static/              # Photos, pinout / architecture diagrams, demos
└── README.md

Local-only (gitignored) folders such as refs/ and backups/ may hold design plans and PCB snapshots on a developer machine; they are not part of the tracked tree.


Getting started

Prerequisites

FirmwareToolchain
MeshtasticPlatformIO (CLI or IDE)
Mayhem MDKESP-IDF targeting esp32s3, or the Docker builders under firmwares/mayhem-mdk/docker/
PortaPack appMayhem firmware build environment (see upstream Mayhem docs)

Hardware bring-up checklist (I2C scan + radio):

  • MCP23017 @ 0x20, TCA9548A @ 0x70, AS5600 @ 0x36
  • SX1262 init on populated WIO slot(s)
  • GPS NMEA on UART1
  • ILI9341 bring-up (standalone Meshtastic)
  • LoRa TX/RX with a second Meshtastic node (standalone)

Flash Meshtastic (standalone)

bash
cd firmwares/meshtastic
pio run -e meshtonic-h4m-wio1
pio run -e meshtonic-h4m-wio1 -t upload
pio device monitor -b 115200

Flash Mayhem MDK (docked companion)

bash
cd firmwares/mayhem-mdk/Source
idf.py set-target esp32s3
# Select Meshtonic H4M pins: HW_VARIANT_MESHTONIC_H4M in code,
# and/or choose "Meshtonic H4M" in the web pin-config UI after first boot
idf.py build
idf.py -p <PORT> flash monitor

Docker alternative:

bash
cd firmwares/mayhem-mdk/docker
# see build.ps1 / build-in-container.sh / docker-compose.yml

Pin preset for Meshtonic H4M: GPS RX = GPIO 7, shared I2C master+slave on GPIO 5/6 (HW_VARIANT_MESHTONIC_H4M in pinconfig.h).

Optional host-side LoRa wideband decoder / bridge tooling: firmwares/mayhem-mdk/lora-wideband-decoder/.

PortaPack “Meshtonic LoRa” app

PortaPack-side UI that talks to the ESP over Apps-over-I2C lives in:

Build and install that app with your usual Mayhem standalone-app workflow, then launch it from the PortaPack App Manager (or rely on Meshtonic H4M auto-start of the ESP decoder).


PCB and manufacturing

KiCad 8 project: pcb/meshtonic_h4m_v2

SheetContents
meshtonic_h4m_v2.kicad_schRoot
PowerCN3170 charge, TPS63020 3.3 V, battery / solar
Xiao_CoreXIAO ESP32-S3 Plus
LoRaWIO1–4 sockets, MCP23017 radio GPIO
SensorsTCA9548A + environmental / IMU / mag
PeriferalsTFT, microSD, GPS, Grove, misc
H4M_Connector / MDK_InterfacePortaPack dock
Breakout_GPIOExpansion

Also: meshtonic_i2c-hub.kicad_* for the I2C hub side project.

BOM / fab

ArtifactPurpose
pcb/meshtonic_h4m_v2.csvSeeed Fusion–oriented PCBA BOM
pcb/meshtonic_h4m_v2_excluded_from_pcba.csvHand-fit / DNP (WIO sockets, display, test points, …)
pcb/_gen_seeed_bom.pyRegenerates the Seeed BOM + exclusion list
pcb/dfm/Gerbers, drills, fab zip

Hand-fit after PCBA: Wio-SX1262 modules (and their hybrid SMD+TH landings), display module, and any DNP connectors listed in the exclusion CSV.

Regenerate the Fusion BOM:

bash
python pcb/_gen_seeed_bom.py

Status

This is an active hardware + firmware bring-up project.

  • PCB: Meshtonic H4M Companion v2 (iterating layout / DFM)
  • Meshtastic: custom meshtonic-h4m-wio1 env — single-radio focus
  • Mayhem MDK: Meshtonic H4M board profile, multi-radio LoRa decoder path in development
  • PortaPack UI app and host LWD bridge: present; expect ongoing protocol/UI work

Demo media: static/ (photos + short videos).


Licenses

This is a multi-license monorepo. The root LICENSE is the index; full texts live under LICENSES/.

ComponentLicense
pcb/, case/, firmwares/pin_mapping.cppCERN-OHL-P-2.0
README.md, static/CC-BY-4.0
firmwares/meshtastic/GPL-3.0
firmwares/mayhem-firmware/GPL-3.0 (see tree)
firmwares/mayhem-mdk/Custom HTL — attribution, contribute improvements back, no commercial use (LICENSE)
firmwares/mayhem-mdk/lora-wideband-decoder/See that subtree’s LICENSE
pcb/libs/Upstream library licenses (unchanged)

Meshtonic board support added inside a firmware tree follows that tree’s license unless a file says otherwise. Upstream copyrights remain with their respective authors.


Links

Parts

118
QtyValueFootprintReferences
3210kPCM_SparkFun-Resistor:R_0603_1608MetricR10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25 +16
7CERAMIC-100NF-50V-10%-X7R_0805_Capacitor_SMD:C_0805_2012MetricC6, C7, C9, C11, C13, C15, C18
610uFPCM_SparkFun-Capacitor:C_0603_1608Metric_PolarC1, C2, C8, C10, C12, C14
6GROVE-CONNECTOR-DIP_4P-2.0_seeed:GROVE-HW4-2.0J1, J3, J4, J5, J6, J7
40.5mmPCM_SparkFun-Connector:TestPoint-0.5mmTP_H4M_3V1, TP_H4M_SCL1, TP_H4M_SDA1, TP_VBAT_H4M1
4WioSX1262_Shield_SocketNew_XIAO_Series_Footprints:XIAO-ESP32-S3-DIPJ_WIO1, J_WIO2, J_WIO3, J_WIO4
322uFPCM_SparkFun-Capacitor:C_0603_1608MetricC3, C4, C5
333PCM_SparkFun-Resistor:R_0402_1005MetricR_H4M_SCL1, R_H4M_SDA1, R1
3330PCM_SparkFun-Resistor:R_0603_1608MetricR42, R43, R44
3Conn_01x02PCM_SparkFun-Connector:1x02_P2.54mmJ9, J10, J11
3LED-SMD-RED-DIFFUSED_0603_LED_SMD:LED_0603_1608MetricD6, D7, D8
3StandoffPCM_SparkFun-Hardware:Standoff_Reflow-M3.0ST1, ST2, ST3
2100nFCapacitor_SMD:C_0603_1608MetricC16, C17
21N5819Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD2, D3
21kPCM_SparkFun-Resistor:R_0603_1608MetricR3, R7
2GreenPCM_SparkFun-LED:LED_1206_3216Metric_GreenD4, D5
10PCM_SparkFun-Resistor:R_0603_1608MetricR8
10PCM_Resistor_SMD_AKL:R_0603_1608MetricR34
11.5uHPCM_SparkFun-Coil:0805L1
1100kPCM_SparkFun-Resistor:R_0603_1608MetricR6
110kPCM_Resistor_SMD_AKL:R_0603_1608MetricR35
11kPCM_SparkFun-Resistor:R_0402_1005MetricR2
12.0kPCM_SparkFun-Resistor:R_0402_1005MetricR5
13V3_ISOPCM_SparkFun-Connector:1x02_P2.54mmJP_H4M_3V1
1560kPCM_SparkFun-Resistor:R_0402_1005MetricR4
1AS5600_LANDINGConnector:GROVE-HW4-SMD-2.0J_AS1
1BMI160_LANDINGConnector:GROVE-HW4-SMD-2.0J_BMI1
1BMM150_LANDINGConnector:GROVE-HW4-SMD-2.0J_BMM1
1BMP280_LANDINGConnector:GROVE-HW4-SMD-2.0J_BMP1
1CN3170Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.3mm_ThermalViasU2
1DISP_SPI_9PConnector_PinHeader_2.54mm:PinHeader_1x09_P2.54mm_VerticalJ_DISP1
1GROVE-CONNECTOR-DIP-90D_4P-2.0_seeed:GROVE-HW4-2.0-90DJ2
1GROVE-CONNECTOR-SMD_4+2P-2.0_Connector:GROVE-HW4-SMD-2.0J8
1H4M_2x6_MDKConnector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_HorizontalJ15
1JST_2mm_LiPoPCM_SparkFun-Connector:JST_1x02_P2.0mm_Horizontal_SMDJ12
1LOGOMisc:notforsaleG***
1LOGOGraphics:astronaut_smallG***
1LOGOGraphics:seed_logo_smallG***
1MCP23017x-x-SSPackage_SO:SSOP-28_5.3x10.2mm_P0.65mmU5
1Micro_SD_Card_passive_clkseeed:MICRO-SD9+4P-SMD-16.1X14.5X1.85MMJ14
1RedPCM_SparkFun-LED:LED_0402_1005Metric_RedD1
1SHT31_LANDINGConnector:GROVE-HW4-SMD-2.0J_SHT1
1Screw_Terminal_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ13
1Solar_CellsConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalSC1
1TCA9548APWRPackage_SO:TSSOP-24_4.4x7.8mm_P0.65mmU4
1TPS63020DSJRTPS63020:DSJ14_2P85X1P58U1
1TestPointPCM_SparkFun-Connector:TestPoint-0.5mmTP1
1VBAT_ISOPCM_SparkFun-Connector:1x02_P2.54mmJP_VBAT_H4M1
1XIAO-S3-PlusSeeed_Xiao:XIAO-ESP32-S3-Plus-SMDU3

More from Josephrp/meshtonic

1
  • 6 layers17.8 × 21.1 mmXIAO ESP32S3 Plus V1.1 250724, the printed circuit board in 3D

    XIAO ESP32S3 Plus V1.1 250724

    Josephrp/meshtonic

    Meshtonic H4M Companion — ESP32-S3 carrier for PortaPack H4M / Mayhem with multi-slot LoRa and standalone Meshtastic

    71 parts11

Similar boards

  • 4 layers65 × 30 mmH7PI, the printed circuit board in 3D

    H7PI

    HTCTEK/H7PI

    37 parts19BSD-3-Clause
  • 2 layers61 × 35 mmEsp32-1pcb, the printed circuit board in 3D

    Esp32-1pcb

    shubhisgonnastealyourcode/FT-32-esp32-s3-dev-board-

    Custom ESP32-S3 Development Board with Header Pins for Display and RGB LED

    44 parts1
  • 2 layers100.3 × 69.9 mmHDD Synth Prototype MK5, the printed circuit board in 3D

    HDD Synth Prototype MK5

    MaverickUK/HDDSynth

    Recreate the sound of mechanical spinning HDDs on retro PCs that use a solid state drive

    112 parts16
  • 2 layers35.1 × 28.9 mmBms buck boost, the printed circuit board in 3D

    Bms buck boost

    tor1kk/bms-buck-boost

    Battery Management System (BMS) with Buck-Boost Converter

    38 parts10GPL-3.0
  • 2 layers114.2 × 36.8 mmAirbox, the printed circuit board in 3D

    Airbox

    Alacrity-Education/AirBoxV2

    The AirBox V2 Station is an open source air quality monitoring station based on the Sensirion SEN66 sensor. It measures particulate matter, CO2, VOC and NOx, runs on a solar charged lithium cell, and reports over Wi-Fi.

    68 parts6GPL-3.0
  • 4 layers85.9 × 50 mmLogic, the printed circuit board in 3D

    Logic

    FallenBuillder/rfid-nfc-manager

    This repository consists of schematics, PCB layouts, code and 3D models for a rfid,nfc manager.

    136 parts3MIT
  • 4 layers61 × 88.9 mmStm32-battery, the printed circuit board in 3D

    Stm32-battery

    agrif/bluegrass

    an STM32 board with on-board battery charging

    117 parts2
  • 4 layers85 × 55 mmDevice, the printed circuit board in 3D

    Device

    jayis1/hacker-devices

    Full-cycle hardware designs for security research devices — each device is a subfolder with its own README, schematics, PCB layout, and software stack

    29 parts2

Questions

How big is the Meshtonic h4m v2 PCB?

It measures 71.1 × 168.4 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Meshtonic h4m v2 use?

118 parts, built around the TPS63020DSJR, CN3170, CC0805KRX7R9BB104 and 19-217-R6C-AL1M2VY-3T. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Meshtonic h4m v2 KiCad files?

From the Josephrp/meshtonic repository on GitHub, at the commit this page was made from: the board is pcb/meshtonic_h4m_v2.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Meshtonic h4m v2 design in my own project?

Its repository states no licence, so its author keeps all rights: ask Josephrp before reusing the design.