Raksa 🛡️
Raksa (derived from Sanskrit/Indonesian word for Protector or Guardian) is a high-persistence, self-contained MicroPython library built for the Noc Lab TinyML ecosystem as part of the 'Tiny Chip, Big Brain' workshop. It serves as an end-to-end In-situ Analytics gateway, securing stable asynchronous telemetry data stream from edge devices (ESP32/RP2040) to a FastAPI cloud backend.
Leveraging native compiler execution (@micropython.native) for fast on-device inference and memory consolidations (gc.collect()), Raksa protects MicroPython devices from heap fragmentation during high-velocity TinyML operations.
Key Features
- 🔄 Persistent WebSockets: Pure python RFC 6455 client implementation utilizing raw asynchronous
uasynciostreams without external footprint overhead. - ⚡ High-Speed In-situ Analytics: Edge inference calculations optimized directly via
@micropython.nativedecorators to ensure minimal loop latency. - 🧹 Heap Consolidation: Garbage collection executed dynamically inside data sync cycles to prevent RAM fragmentation on constrained hardware.
- 🇮🇩 Nusantara Resiliency: Promotes self-reliance, stability, and secure data guardianship for resource-constrained edge-to-cloud architectures.
Installation
Via pip (CPython / Desktop Testing)
pip install raksa
Via mip (MicroPython on Device)
1. Using mpremote (Recommended)
Connect your microcontroller board to your pc via USB/Serial and run:
mpremote mip install github:Muhammad-Ikhwan-Fathulloh/Raksa
2. Directly in MicroPython REPL
Ensure your microcontroller board has an active Wi-Fi connection, then run:
import mip
mip.install("github:Muhammad-Ikhwan-Fathulloh/Raksa")
Minimalist Code Example (ESP32 / RP2040)
Below is an end-to-end usage code highlighting edge inference and data synchronization under 10 lines of functional code:
import uasyncio as asyncio
from raksa import RaksaClient
async def main():
client = RaksaClient("ws://192.168.1.100:8000/ws/telemetry")
model = ([[0.5, -0.2], [0.1, 0.9]], [0.1, 0.0]) # TinyML weights & biases
inputs = [0.8, 1.5] # Raw sensor variables
pred = client.infer(model, inputs)
await client.sync({"model": "NocML_V1", "features": inputs, "prediction": pred})
asyncio.run(main())
Complete Examples & Machine Learning Features
Full production-ready examples are available under the examples/ folder, covering both hardware-specific scenarios and internal, Scikit-Learn-compatible Machine Learning algorithms:
Hardware-Connected Scenarios
| File | Scenario | Sensors |
|---|---|---|
main_edge.py |
Quick-start minimalist (< 10 lines) | — |
esp32_wifi_sensor.py |
ADC analog sensor + 3-class classification | LDR / MQ-x / Potentiometer |
esp32_dht_monitor.py |
Temperature & humidity anomaly detection | DHT11 / DHT22 |
On-Device Machine Learning & TinyML
| File | Algorithms Covered | API Classes |
|---|---|---|
ml_preprocessing.py |
Custom Data Scaling & Extensions | MinMaxScaler, StandardScaler, PolynomialFeatures |
ml_classification.py |
Optimized Classifiers | KNN, NaiveBayes, LogisticRegression, DecisionTreeClassifier |
ml_clustering.py |
Unsupervised Grouping / Fit | KMeans |
ml_forecasting.py |
Simple Time Series forecasting | LinearForecaster |
ml_neural.py |
Perceptron & Feedforward NN | Perceptron, TinyNeuralNetwork, Activation |
ml_evaluation.py |
Evaluation & Split Metrics | LabelEncoder, TrainTestSplit, ConfusionMatrix |
ml_anomaly.py |
Anomaly Detection & PCA | AnomalyDetector, PCA |
Machine Learning Reference
Raksa bundles a highly optimized port of the NocML C++ library along with original advanced TinyML tools, utilizing @micropython.native compiled mathematical loops to secure lightning-fast predictions directly on MicroPython edge boards without external dependencies.
Preprocessing & Decomposition
MinMaxScaler(dims, min_vals, max_vals): Rescales variables to a range[0.0 - 1.0].StandardScaler(dims, means, stddevs): Standardizes features using population mean and variance.PolynomialFeatures(degree): Expands input dimension using combinations with replacement.PCA(n_components): Principal Component Analysis for dimensionality reduction withfit(X, n_samples, dims)andtransform(x).LabelEncoder(): Standard encoder for string labels to integer classes withfit(),encode(), anddecode().
Neural Networks
Activation: Collection of activation functions:sigmoid(x),relu(x),tanh(x), andsoftmax(x).Perceptron(dims, lr=0.01): Single-layer perceptron for binary classification withtrain(X, y)andpredict(x).TinyNeuralNetwork(layer_sizes, lr=0.1): Feedforward neural network supporting arbitrary hidden layers and backpropagationtrain(X, y, epochs).
Classification, Clustering & Forecasting
KNN(training_data, labels, num_samples, dims, k=3): Traditional classification using Euclidean distances.NaiveBayes(num_classes, dims, means, vars, priors): Gaussian probabilistic classification.LogisticRegression(dims, weights, bias): Fast binary classification withpredict()andpredict_proba().DecisionTreeClassifier(nodes, num_nodes): Node list traverse trees supporting dictionary, tuple, or custom node structures.KMeans(k, dims, centroids): Clusters features into centroids. Supportsrun(data, num_samples)for on-device fitting.LinearForecaster(): Computes simple linear regressive trends ($y=mx+c$) natively viafit(x, y)andforecastNext().
Validation & Evaluation
AnomalyDetector(threshold=2.5): Z-score outlier detector withfit(X, n_samples, dims)anddetect(x).TrainTestSplit.split(X, y, dims, test_ratio): Shuffles and splits tabular data into train/test sets using LCG.ConfusionMatrix.report(y_true, y_pred): Compares predictions and outputs accuracy, precision, recall, and F1 metrics.
Acknowledgments & Credits
The machine learning capabilities contained in Raksa are ported from the NocML C++ Library for Arduino, developed by Muhammad Ikhwan Fathulloh. Special credits go to the original creators for providing the foundation of these resource-constrained edge execution algorithms.
Licenses & Copyrights
Developed by Noc Lab for nurturing TinyML literacy on hardware developers. Licensed under the MIT License.
Metadata
Release files for raksa 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| raksa-0.2.1.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| raksa-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.6 kB
Release files / raksa-0.2.1.tar.gz
| Download URL | raksa-0.2.1.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2766f6ef58dc2094607ed82a49b57dff0d9814015cf0f9d4e25a27ae2fd7d030
|
|
BLAKE2b-256 checksum How to use checksums |
e07406d20cde8506c7677a4230c39a6f744b6929f441994f1211a47e24ea6f87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|
Release files / raksa-0.2.1-py3-none-any.whl
| Download URL | raksa-0.2.1-py3-none-any.whl |
|---|---|
| Size | 16.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2914d2d98bd48fec18d756ace6debd597424b74001cc7676d4b19f88793c5e4d
|
|
BLAKE2b-256 checksum How to use checksums |
503e732539b18dd7875c541481395b20fb094a70f00e1cb0c8b3af7ed46d6b4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|