A Python MeshCore library with SPI LoRa radio support
Project description
pyMC_Core
pyMC_Core is a Python reimplementation of MeshCore — a lightweight, portable C++ library for multi-hop packet routing using LoRa radios. Designed for Raspberry Pi and similar hardware, pyMC_Core communicates with LoRa modules over SPI.
pyMC_Core is under active development. It's compatible with the original MeshCore protocol, but not yet as optimized or elegant as its C++ counterpart.
Documentation
**Complete documentation is available at https://rightup.github.io/pyMC_core/
Quick Links
- Node Usage Guide - Guide for using MeshNode
- Examples - Working code examples
- API Reference - Detailed API documentation
Quick Start
Installation
Important: On modern Python installations (Ubuntu 22.04+, Debian 12+), you may encounter
externally-managed-environmenterrors when installing packages system-wide. Create a virtual environment first:# Create virtual environment python3 -m venv pymc_env # Activate virtual environment # On Linux/Mac: source pymc_env/bin/activate # On Windows: pymc_env\Scripts\activate
# Install from PyPI
pip install pymc-core
# For hardware support (SX1262 radios)
pip install pymc-core[hardware]
# Install all dependencies
pip install pymc-core[all]
Basic Usage
import asyncio
from pymc_core import MeshNode, LocalIdentity
from pymc_core.hardware.sx1262_wrapper import SX1262Radio
async def main():
# Create radio (Waveshare HAT example)
radio = SX1262Radio(
bus_id=0, cs_pin=21, reset_pin=18,
busy_pin=20, irq_pin=16, txen_pin=6,
frequency=869525000, tx_power=22
)
radio.begin()
# Create mesh node
identity = LocalIdentity()
node = MeshNode(radio=radio, local_identity=identity)
await node.start()
print("Mesh node started!")
asyncio.run(main())
For examples, see the documentation.
Hardware Support
Supported Radios
- Waveshare SX1262 LoRaWAN/GNSS HAT - Popular Raspberry Pi LoRa module
- HackerGadgets uConsole - All-in-one extension board with LoRa support
- FrequencyLabs meshadv-mini - Raspberry Pi hat with E22-900M22S LoRa module
Requirements
- Raspberry Pi (or compatible SBC)
- SX1262 LoRa module
- SPI interface enabled
- Python 3.8+
What is MeshCore?
MeshCore enables long-range, decentralized communication using multi-hop packet routing. Devices (nodes) forward packets through neighboring nodes to reach distant ones — no central infrastructure required.
It occupies a middle ground between:
| Project | Focus |
|---|---|
| Meshtastic | Casual LoRa messaging |
| Reticulum | Full encrypted networking stack |
Use Cases
- Off-grid and emergency communication
- Tactical or field mesh deployments
- IoT mesh networks
- Remote monitoring systems
Architecture
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Application │ │ MeshNode │ │ Hardware │
│ │ │ │ │ │
│ • Text Messages │◄──►│ • Packet Routing│◄──►│ • SX1262 Radio │
│ • Advertisements│ │ • Identity Mgmt │ │ • SPI Interface │
│ • Telemetry │ │ • Event Service │ │ • GPIO Control │
│ • Group Channels│ │ • Repeater Mgmt │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Security
- Ed25519/X25519 cryptographic identities
- End-to-end encryption for messages
- CRC validation for data integrity
- Secure key exchange protocols
Project Structure
pyMC_Core/
├── src/pymc_core/ # Main package
│ ├── hardware/ # Radio hardware interfaces
│ ├── node/ # MeshNode implementation
│ ├── protocol/ # Packet protocols
│ └── events/ # Event handling
├── examples/ # Working examples
│ ├── common.py # Shared utilities
│ ├── send_flood_advert.py
│ ├── send_direct_advert.py
│ └── ...
├── docs/ # MkDocs documentation
│ ├── docs/ # Documentation source files
│ ├── mkdocs.yml # MkDocs configuration
│ ├── requirements.txt # Documentation dependencies
│ └── serve-docs.sh # Local development script
├── .github/workflows/ # GitHub Actions
│ └── deploy-docs.yml # Documentation deployment pipeline
└── tests/ # Unit tests
Contributing
Contributions are welcome! Please see our contributing guide for details.
Development Setup
# Clone the repository
git clone https://github.com/rightup/pyMC_Core.git
cd pyMC_Core
# Install development dependencies
pip install -e .[dev]
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Original MeshCore C++ implementation
- Waveshare and HackerGadgets for hardware support
Support
Built with ❤️ for mesh networking enthusiasts
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pymc_core-1.0.7.tar.gz.
File metadata
- Download URL: pymc_core-1.0.7.tar.gz
- Upload date:
- Size: 129.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96eb511c2a8b7d739dfb73275dc737836414c97bc6fbc603ec1bf12fade2c90d
|
|
| MD5 |
48e9302d9307543461488fec5a97c6e4
|
|
| BLAKE2b-256 |
05d8182eb232d3d1ecaeacb2f2901ffd3dcb21893cfd7cf6b290ec0ab7c8bbb9
|
Provenance
The following attestation bundles were made for pymc_core-1.0.7.tar.gz:
Publisher:
publish-pypi.yml on rightup/pyMC_core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pymc_core-1.0.7.tar.gz -
Subject digest:
96eb511c2a8b7d739dfb73275dc737836414c97bc6fbc603ec1bf12fade2c90d - Sigstore transparency entry: 815140710
- Sigstore integration time:
-
Permalink:
rightup/pyMC_core@ba3ff4c26b9fadda1995c1ef6e21c7f143768c8d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/rightup
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@ba3ff4c26b9fadda1995c1ef6e21c7f143768c8d -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pymc_core-1.0.7-py3-none-any.whl.
File metadata
- Download URL: pymc_core-1.0.7-py3-none-any.whl
- Upload date:
- Size: 131.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8ca56ecb0b0da4cca15df1b5e53a6843d031b2ce08eda03166935407298634f
|
|
| MD5 |
6625e17abfab3e95191eb5752992be6c
|
|
| BLAKE2b-256 |
ef8cac0a82f9b5662e033dd77fdd607f950a2ca839822930d0e39bc13bf8f206
|
Provenance
The following attestation bundles were made for pymc_core-1.0.7-py3-none-any.whl:
Publisher:
publish-pypi.yml on rightup/pyMC_core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pymc_core-1.0.7-py3-none-any.whl -
Subject digest:
d8ca56ecb0b0da4cca15df1b5e53a6843d031b2ce08eda03166935407298634f - Sigstore transparency entry: 815140733
- Sigstore integration time:
-
Permalink:
rightup/pyMC_core@ba3ff4c26b9fadda1995c1ef6e21c7f143768c8d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/rightup
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@ba3ff4c26b9fadda1995c1ef6e21c7f143768c8d -
Trigger Event:
workflow_dispatch
-
Statement type: