A tiny off-grid payment node for Meshtastic, running a lightweight ledger for balances and transfers on low-power hardware.
Meshtbank is an experimental payment system built on top of Meshtastic.
It maintains a central ledger containing users, balances, and transaction histories while using a LoRa mesh network instead of Internet connectivity.
Users interact with the system by sending direct Meshtastic messages such as:
balance
pay !27e52039 50
history
The central node runs on a DFRobot FireBeetle 2 ESP32-C6, connected to a Seeed Studio XIAO nRF52840 + SX1262 Meshtastic radio.
A 2-inch TFT display provides a local activity log, while account data is stored persistently in the ESP32's LittleFS filesystem.
β οΈ Meshtbank is an experimental maker project and proof of concept.It is not a banking product, cryptocurrency, secure payment processor, or financial service. Do not use it to store or transfer real monetary value.
- π‘ Works over a Meshtastic LoRa mesh
- π No Internet connection required
- π Low-power hardware
- βοΈ Can potentially operate from battery + solar power
- πΈ Peer-to-peer balance transfers
- π€ Accounts identified by Meshtastic node ID
- π Persistent balances
- π Per-user transaction history
- π System event log
- π Password-protected administrator commands
- π¬ User interaction through Meshtastic direct messages
- π’ Startup broadcast announcing the node
- π₯οΈ 2-inch TFT activity display
- πΎ LittleFS persistent storage
- π‘οΈ Input sanitization and transaction validation
- π MIT licensed
Meshtastic is normally used for low-power, long-range text communication without cellular networks or Internet access.
Meshtbank asks a different question:
If the communication infrastructure disappears, could the same mesh network support simple local applications such as a community ledger?
Traditional digital payment infrastructure depends on systems such as:
Internet
β
Bank servers
β
Clearing networks
β
Payment processors
β
ATMs / POS terminals
Meshtbank replaces that infrastructure with something deliberately much smaller:
Meshtastic nodes
β
LoRa mesh
β
Meshtbank node
β
Local ledger
It is intentionally a centralized ledger running over a decentralized communication network.
Meshtastic LoRa Mesh
β
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββ βββββββββββ βββββββββββ
β User A β β User B β β User C β
β !nodeID β β !nodeID β β !nodeID β
ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ
β β β
βββββββββββββββ΄ββββββββββββββ
β
Direct Messages
β
βΌ
ββββββββββββββββββββββββ
β XIAO nRF52840 β
β + SX1262 LoRa β
β β
β Meshtastic firmware β
ββββββββββββ¬ββββββββββββ
β
β Serial / Proto
βΌ
ββββββββββββββββββββββββ
β FireBeetle 2 ESP32-C6β
β β
β Meshtbank firmware β
β β
β β’ Accounts β
β β’ Balances β
β β’ Transfers β
β β’ History β
β β’ Admin commands β
β β’ LittleFS ledger β
ββββββββββββ¬ββββββββββββ
β
βΌ
ββββββββββββββββββ
β 2" TFT display β
β Activity log β
ββββββββββββββββββ
The XIAO + SX1262 handles Meshtastic communication.
The FireBeetle ESP32-C6 runs the banking logic.
The two boards communicate through the Meshtastic Arduino serial interface.
The current firmware defines:
#define SERIAL_RX_PIN 17
#define SERIAL_TX_PIN 16
#define BAUD_RATE 115200The XIAO Meshtastic node is configured with:
Serial module: Enabled
Mode: Proto
TX: Pin 7
RX: Pin 6
This creates the bridge:
Meshtastic radio
β
βΌ
XIAO nRF52840
β
β Serial Proto
βΌ
ESP32-C6
β
βΌ
Meshtbank
| Component | Purpose |
|---|---|
| Seeed Studio XIAO nRF52840 | Meshtastic node |
| Wio-SX1262 LoRa shield | Long-range radio |
| DFRobot FireBeetle 2 ESP32-C6 | Ledger and application logic |
| DFRobot 2-inch 320Γ240 TFT | Local status and activity display |
| 3.7 V battery | Portable power |
| Jumper wires | Serial and power connections |
| Optional solar panel | Off-grid charging |
Seeed Studio XIAO nRF52840 + Wio-SX1262 Kit
Mount the SX1262 shield on the XIAO nRF52840.
Then connect the XIAO and FireBeetle.
| FireBeetle ESP32-C6 | XIAO |
|---|---|
| 3.3 V | 3.3 V |
| GND | GND |
| GPIO 17 / RX | Pin 7 |
| GPIO 16 / TX | Pin 6 |
The TFT display connects to the FireBeetle using the DFRobot GDI interface.
The original build therefore requires very little external wiring.
The firmware uses:
DFRobot_ST7789_240x320_HW_SPIthrough the DFRobot_GDL graphics library.
The display shows recent incoming commands and system activity.
A scrolling buffer stores up to:
const int MAX_LOGS = 6;recent entries.
Messages are visually distinguished using different colors for commands and system events.
The display is optional: disconnecting it reduces power consumption.
Meshtbank stores its ledger using the ESP32's LittleFS filesystem.
Each account has a balance file:
/!27e52039.txt
and a separate history file:
/!27e52039_hist.txt
A system-wide event log is stored as:
/sys.log
Conceptually:
LittleFS
β
βββ !27e52039.txt
βββ !27e52039_hist.txt
β
βββ !12ab34cd.txt
βββ !12ab34cd_hist.txt
β
βββ sys.log
The user ID corresponds to the Meshtastic node ID.
Accounts are created by an administrator.
Example:
setup 7777 !27e52039 100
This creates or overwrites:
User:
!27e52039
Balance:
100
The firmware then records an initial history entry.
π
7777is the default password shown in the current source. Change it before uploading the firmware.
Commands must be sent to the Meshtbank node using a private Meshtastic direct message.
Broadcast commands are intentionally ignored.
Show the available user commands:
help
Response:
CMDS: balance, history <#>, pay <ID> <$>
Check your current account balance:
balance
Example response:
[$] Balance: $100.00
Accounts are tied to the Meshtastic node ID of the sender.
Transfer funds:
pay <TargetID> <Amount>
Example:
pay !27e52039 50
Before processing a payment, Meshtbank verifies:
- sender account exists
- destination account exists
- sender and receiver are different
- amount is greater than zero
- sender has enough balance
The system then updates the destination account, checks that the write succeeded, updates the sender account, and creates history records for both users.
The receiver also gets a Meshtastic notification.
Example:
[$] Received $50.00 from !12ab34cd
Display transaction history:
history
Example:
HIST:
1. Admin Setup: Initial $100.00
2. TX1234: Sent $20.00 to !27e52039
3. TX1801: Recv $10.00 from !55dd8800
Retrieve a specific transaction record:
history 2
Example response:
Rec #2: TX1234: Sent $20.00 to !27e52039
This is useful because Meshtastic messages have limited practical payload sizes.
Administrative operations require the configured password.
The password is defined in:
const String ADMIN_PASS = "7777";Change this before deploying the node.
setup <Pass> <User_ID> <Amount>
Example:
setup 7777 !27e52039 100
delete <Pass> <User_ID>
Example:
delete 7777 !27e52039
The associated balance and transaction-history files are removed.
listusers <Pass>
Example:
listusers 7777
checkbal <Pass> <User_ID>
Example:
checkbal 7777 !27e52039
checkhist <Pass> <User_ID>
reset <Pass>
This deletes all ledger files.
β οΈ This operation is destructive.
Normal banking commands are only accepted through direct messages.
If someone sends a command as a public channel message, Meshtbank ignores it and announces that commands must use private DMs.
After connecting successfully to the Meshtastic node, the system also broadcasts a startup message containing the current number of registered users.
Incoming messages are sanitized before processing.
The firmware limits commands to:
#define MAX_MSG_LEN 100and removes non-printable characters.
Payments also reject:
self-payments
negative amounts
zero amounts
missing users
insufficient funds
These checks improve robustness but should not be interpreted as financial-grade security.
git clone https://github.com/ronibandini/Meshtbank.git
cd MeshtbankRepository structure:
Meshtbank/
βββ libraries/
β βββ DFRobot_GDL-master.zip
β βββ Meshtastic-arduino-master.zip
β βββ readme.txt
βββ LICENSE
βββ Meshtbank.stl
βββ README.md
βββ meshtbank1.ino
Install Meshtastic firmware using:
If necessary, put the XIAO into bootloader mode before flashing.
After flashing, connect it to:
Configure:
Region: your local region
Primary channel: Meshtbank
Then configure the Serial module:
Mode: Proto
TX: 7
RX: 6
During initial testing, if using default channel settings, consider:
Hop limit: 1
MQTT: Disabled
This reduces unnecessary propagation while testing.
π‘ Always configure Meshtastic according to the radio regulations applicable to your region.
The required Arduino libraries are included under:
libraries/
Install:
DFRobot_GDL-master.zip
Meshtastic-arduino-master.zip
through the Arduino IDE.
Open:
meshtbank1.ino
Find:
const String ADMIN_PASS = "7777";and replace it:
const String ADMIN_PASS = "YOUR_PASSWORD";Compile and upload the sketch to the FireBeetle 2 ESP32-C6.
The serial console runs at:
115200 baud
On startup the system:
- initializes the TFT
- mounts LittleFS
- writes a system boot event
- initializes Meshtastic serial communication
- requests the Meshtastic node report
- registers the text-message callback
The display should show:
Meshtbank v1.0
followed by:
Initializing...
Meshtbank is designed around low-power hardware.
The original build uses a:
3.7 V battery
and the FireBeetle can also be combined with a small solar panel.
For reduced consumption, the TFT can be disconnected.
This makes configurations possible where the payment node operates independently from:
Internet
cellular infrastructure
mains electricity
provided the Meshtastic mesh itself remains operational.
The repository includes:
Meshtbank.stl
A downloadable version is also available on Cults3D:
Meshtbank experimental Meshtastic Banking Node β Cults3D
The original stand is intentionally simple and designed primarily to hold the prototype components.
-
π Signed transactions β add cryptographic signatures or another stronger identity mechanism instead of relying primarily on Meshtastic node IDs.
-
π Reliable timestamps β add real transaction timestamps using RTC, GPS time, or another time source instead of deriving transaction IDs from ESP32 uptime.
-
π Distributed ledger experiments β explore replication between several Meshtbank nodes instead of depending on one central ledger.
Meshtbank has received independent editorial coverage as well as documentation on several maker platforms.
Off-Grid, Small-Scale Payment System
Hackaday writer Bryan Cockfield featured Meshtbank on December 5, 2025.
The article describes the project as a small-scale off-grid digital payment system built around Meshtastic and discusses potential applications such as:
- community credits
- festival credits
- local exchange systems
- infrastructure-independent experiments
The article also highlights two important limitations of the prototype: the Meshtastic transport is not designed to provide banking-grade security, and the centralized ledger requires users to trust the administrator.
A Meshtastic Banking System for the Apocalypse
Hackster News writer Cameron Coward independently featured Meshtbank as an experimental payment system designed to operate without Internet access or reliable grid power.
The article covers:
- Meshtastic as the communication backbone
- the central ledger
- account balances
- transfers
- the XIAO nRF52840 + SX1262
- FireBeetle ESP32-C6
- TFT display
- battery-powered operation
The complete project page includes:
- concept
- hardware
- wiring
- Meshtastic configuration
- Arduino setup
- command reference
- off-grid operation
- source-code link
- 3D-model link
Meshtastic payment ledger with FireBeetle 2: Meshtbank
DFRobot Maker Community hosts the hardware tutorial for the project.
It documents:
- FireBeetle 2 ESP32-C6
- XIAO Meshtastic node
- 2-inch TFT
- battery operation
- Meshtastic configuration
- user commands
- administrator commands
The article explicitly links to this GitHub repository.
Meshtbank, un sistema de pagos sobre Meshtastic
Spanish-language article by Roni Bandini explaining the motivation, architecture, hardware, setup, and operation of Meshtbank.
The article also links directly to:
- this repository
- Hackaday.io tutorial
- Cults3D model
- Hackaday coverage
- Hackster coverage
Meshtbank experimental Meshtastic Banking Node
Downloadable STL for the original prototype stand.
The STL is also included directly in this repository as:
Meshtbank.stl
- Meshtastic
- Meshtastic Web Flasher
- Meshtastic Web Client
- Meshtastic GitHub
- Meshtastic Arduino
- DFRobot GDL
Other projects by Roni Bandini exploring off-grid systems, wireless communication, and unconventional embedded applications.
Decentralized decision-making over Meshtastic for scenarios without conventional communications infrastructure.
Meshtvote is the closest companion project to Meshtbank: instead of moving balances over Meshtastic, it uses the same network concept to coordinate voting and collective decisions.
github.com/ronibandini/Meshtvote
An ESP8266 game that transforms nearby Wi-Fi networks into physical game targets.
Another experiment that repurposes wireless-network metadata as the foundation of an unconventional embedded application.
github.com/ronibandini/routerattack
Human-presence detection using mmWave radar, ESP32, and remote notifications.
Another compact embedded project exploring radio-frequency technologies outside their usual applications.
github.com/ronibandini/mmWaveAlarm
Meshtbank should be treated as an experimental protocol demonstrator, not as a secure financial platform.
The current design has several intentional simplifications.
One Meshtbank node owns the complete ledger.
The administrator can:
create accounts
overwrite balances
delete accounts
inspect balances
inspect histories
wipe the ledger
Users therefore need to trust the operator of that node.
The administrator password is embedded directly in the firmware:
const String ADMIN_PASS = "7777";It is sent as part of administrator commands and is not a substitute for modern authentication.
Accounts are associated with Meshtastic node IDs.
The project does not implement independent cryptographic user identities or transaction signatures.
Meshtbank is released under the MIT License.
See LICENSE for details.
Roni Bandini
Maker, AI developer, electronic artist and writer.
- π GitHub: @ronibandini
- πΈ Instagram: @ronibandini
- π¦ X: @RoniBandini
- βοΈ Medium: bandini.medium.com
- π οΈ Hackaday.io: Roni Bandini
Contributions, forks, alternative ledger models, Meshtastic experiments, and improved enclosures are welcome.
