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.10.tar.gz (263.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.10-py3-none-any.whl (233.5 kB view details)

Uploaded Python 3

File details

Details for the file pymc_core-1.0.10.tar.gz.

File metadata

  • Download URL: pymc_core-1.0.10.tar.gz
  • Upload date:
  • Size: 263.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymc_core-1.0.10.tar.gz
Algorithm Hash digest
SHA256 e135fe7d6d918ae83a30ae1a915ebd5a270dd87a053a9dc8e9df8c670a31d1a5
MD5 23d80204e5c677f1286fe92a83620322
BLAKE2b-256 7872d4747766cd6f3858382f838da47c51f27dc22c7fa879c6be4b105fd79782

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymc_core-1.0.10.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.10-py3-none-any.whl.

File metadata

  • Download URL: pymc_core-1.0.10-py3-none-any.whl
  • Upload date:
  • Size: 233.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymc_core-1.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 6a50670d8e37ab13927c19d406d212fe0e2ecf1c3187f0555591b2fd245b9003
MD5 0cbd80fe9a60e90ed301a9ecfa29c142
BLAKE2b-256 ed5f7b99f0266ea38b92c327070ad07a71ce0acaead243976dec7ee6c0c6d9ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymc_core-1.0.10-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