Skip to main content

A Python MeshCore library with SPI LoRa radio support

Project description

pyMC_Core

Documentation PyPI License

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

Quick Start

Installation

Important: On modern Python installations (Ubuntu 22.04+, Debian 12+), you may encounter externally-managed-environment errors 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

pymc_core-1.0.7.tar.gz (129.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pymc_core-1.0.7-py3-none-any.whl (131.7 kB view details)

Uploaded Python 3

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

Hashes for pymc_core-1.0.7.tar.gz
Algorithm Hash digest
SHA256 96eb511c2a8b7d739dfb73275dc737836414c97bc6fbc603ec1bf12fade2c90d
MD5 48e9302d9307543461488fec5a97c6e4
BLAKE2b-256 05d8182eb232d3d1ecaeacb2f2901ffd3dcb21893cfd7cf6b290ec0ab7c8bbb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymc_core-1.0.7.tar.gz:

Publisher: publish-pypi.yml on rightup/pyMC_core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for pymc_core-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d8ca56ecb0b0da4cca15df1b5e53a6843d031b2ce08eda03166935407298634f
MD5 6625e17abfab3e95191eb5752992be6c
BLAKE2b-256 ef8cac0a82f9b5662e033dd77fdd607f950a2ca839822930d0e39bc13bf8f206

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page