DEV Community

Daniel Ioni
Daniel Ioni

Posted on

💳 Cardputer Zero + XMR: Contactless Monero Payments with MyZubster"

💳 Cardputer Zero + XMR: Contactless Monero Payments with MyZubster

UHF · XMR · IoT · Bluetooth · QR Payments · Open Source

The MyZubster ecosystem is moving another step closer to physical payments.

We've been integrating Cardputer Zero with the MyZubster Gateway to create a compact payment terminal capable of reading contactless UHF tags and initiating a Monero payment workflow.

The idea is simple:

Tap → Identify → Create Payment → Show QR → Verify → Confirm

Instead of building a completely new payment terminal, we're connecting inexpensive hardware, an Android interface and the existing MyZubster Gateway.


📷 What Is Cardputer Zero?

Cardputer Zero is a compact hardware device that can be used as part of an IoT interface.

In this project, the device acts as the physical entry point for a contactless payment workflow.

Its responsibilities are intentionally simple:

  • 📡 read a UHF tag;
  • 📱 communicate with the Android application;
  • 🖥️ provide local feedback through the display;
  • 🔗 pass the tag identifier to the payment system.

The Cardputer does not need to manage the entire payment process.

It becomes a hardware interface for the Gateway.


🔄 The Architecture

The current concept separates the system into three main layers.

┌──────────────────────────────────────────┐
│            CARDPUTER ZERO                │
│                                          │
│  UHF Tag Reader                          │
│  Bluetooth                               │
│  Display                                 │
└───────────────────┬──────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────┐
│              ANDROID APP                 │
│                                          │
│  Receives Tag ID                         │
│  Creates Payment Request                 │
│  Displays XMR QR Code                    │
│  Checks Payment Status                   │
└───────────────────┬──────────────────────┘
                    │
                    ▼
┌──────────────────────────────────────────┐
│           MYZUBSTER GATEWAY              │
│                                          │
│  Payment Creation                        │
│  Payment Record                          │
│  XMR Address                             │
│  Payment Verification                    │
│  Status Management                       │
└──────────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

This separation is important.

The hardware doesn't need to know how the blockchain payment infrastructure works.

The Android application doesn't need to implement the entire Monero backend.

The Gateway remains responsible for payment logic.


📡 Step 1 — Read a UHF Tag

The user brings a UHF tag close to the Cardputer.

The device reads the tag identifier.

For example:

User
 ↓
UHF Tag
 ↓
Cardputer Zero
 ↓
TAG-TEST-002
Enter fullscreen mode Exit fullscreen mode

The identifier can then be transmitted to the Android application over Bluetooth.

The tag acts as a convenient physical trigger for the workflow.

It does not itself represent a Monero transaction.


📱 Step 2 — Android Receives the Tag

The Android application receives the identifier from the Cardputer.

For example:

TAG-TEST-002
Enter fullscreen mode Exit fullscreen mode

The application can then associate the tag with a payment request.

A simplified request looks like:

const response = await fetch(
  "https://api.myzubster.io/cardputer/payment/create",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      tag_id: "TAG-TEST-002",
      amount: 0.01
    })
  }
);
Enter fullscreen mode Exit fullscreen mode

The exact production endpoint and authentication model should be configured according to the deployed Gateway environment.


🪙 Step 3 — The Gateway Creates the Payment

The MyZubster Gateway handles the backend side.

The workflow can include:

  1. creating a payment record;
  2. generating or assigning the payment destination;
  3. recording the requested amount;
  4. generating the information needed by the wallet;
  5. monitoring the payment;
  6. updating the payment status.

Conceptually:

Android
   ↓
POST /payment/create
   ↓
Gateway
   ↓
Payment Record
   ↓
XMR Payment Information
   ↓
Android
Enter fullscreen mode Exit fullscreen mode

The important architectural decision is that payment logic remains on the Gateway rather than inside the Cardputer.


🔲 Step 4 — Display an XMR QR Code

Once the payment request is created, the Android application can display a Monero payment QR code.

The user scans it with a compatible Monero wallet.

The flow becomes:

UHF Tag
   ↓
Cardputer
   ↓
Android
   ↓
MyZubster Gateway
   ↓
XMR Payment Request
   ↓
QR Code
   ↓
Monero Wallet
Enter fullscreen mode Exit fullscreen mode

This keeps the hardware simple while still allowing a physical device to initiate a privacy-focused payment workflow.


✅ Step 5 — Payment Verification

After the user sends the payment, the Gateway can monitor the transaction and update the payment record.

For example:

created
   ↓
pending
   ↓
detected
   ↓
confirming
   ↓
paid
Enter fullscreen mode Exit fullscreen mode

The Android application can query the payment status.

Example:

const status = await fetch(
  `/api/cardputer/payment/status/${payment_id}`
);
Enter fullscreen mode Exit fullscreen mode

This means the terminal doesn't need to understand the details of Monero transaction processing.

It only needs to know:

Has the payment reached the required state?


🛠️ API Design

The Cardputer integration introduces a dedicated API surface.

Method Endpoint Purpose
POST /api/cardputer/payment/create Create a payment
GET /api/cardputer/payment/status/:id Retrieve payment status
PUT /api/cardputer/payment/status/:id Update payment state
GET /api/cardputer/payments List payment records
GET /health Gateway health check

For a production deployment, these endpoints should also be protected with appropriate authentication, authorization, rate limiting and transport security.


🔧 Cardputer Firmware

The Cardputer can communicate with the Android application over Bluetooth.

A simplified Arduino-style implementation looks like:

#include <M5Cardputer.h>
#include <BluetoothSerial.h>

BluetoothSerial SerialBT;

void setup() {
    M5Cardputer.begin();

    SerialBT.begin("Cardputer-Zero");

    M5Cardputer.Display.println(
        "Cardputer Zero"
    );
}

void loop() {
    if (SerialBT.available()) {

        String command =
            SerialBT.readString();

        if (command == "SCAN") {

            String tag = readTag();

            SerialBT.println(tag);

            M5Cardputer.Display.println(
                "TAG: " + tag
            );
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

The important principle is modularity.

The firmware handles hardware.

The Android application handles the user interface.

The Gateway handles payment infrastructure.


💰 Complete Payment Flow

Putting everything together:

1. User taps UHF tag
          ↓
2. Cardputer reads tag
          ↓
3. Cardputer → Bluetooth → Android
          ↓
4. Android → Gateway API
          ↓
5. Gateway creates XMR payment
          ↓
6. Android displays QR code
          ↓
7. User pays with Monero wallet
          ↓
8. Gateway detects transaction
          ↓
9. Payment reaches required state
          ↓
10. Android displays confirmation
Enter fullscreen mode Exit fullscreen mode

This is the core experiment.

A small physical device becomes the entry point to a complete decentralized payment workflow.


🧪 Test Mode vs Production

One important distinction needs to be made.

A successful integration test demonstrates that the components can communicate.

It does not automatically mean that the system is ready for unrestricted production payments.

A production deployment would still need testing for:

  • authentication;
  • secure Bluetooth communication;
  • API authorization;
  • network failures;
  • duplicate payment requests;
  • replay attacks;
  • payment confirmation rules;
  • transaction monitoring;
  • device recovery;
  • key management;
  • logging;
  • privacy;
  • hardware reliability.

The goal of the current implementation is to establish the integration and validate the architecture.


🌍 Why This Matters for MyZubster

This project connects several parts of the ecosystem:

                    MYZUBSTER
                        │
             ┌──────────┼──────────┐
             ↓          ↓          ↓
            IoT       Gateway    Monero
             │          │          │
             └────┬─────┴─────┬────┘
                  ↓           ↓
              Cardputer    Payment
                  │
                  ↓
                User
Enter fullscreen mode Exit fullscreen mode

This is particularly interesting for the robotics ecosystem.

A future robot could contain a similar payment interface.

For example:

Robot
  ↓
User selects service
  ↓
UHF / NFC / QR
  ↓
Gateway
  ↓
XMR Payment
  ↓
Verification
  ↓
Robot performs service
Enter fullscreen mode Exit fullscreen mode

The payment layer therefore becomes part of the robot's service workflow.


🤖 From Payment Terminal to Robot Economy

Imagine a robot bartender.

The user approaches the robot.

The system identifies the service.

The user initiates payment.

The Gateway verifies the payment.

The robot receives authorization.

Then the robot performs the task.

User
 ↓
Robot
 ↓
Payment Request
 ↓
XMR
 ↓
Gateway
 ↓
Verification
 ↓
Authorization
 ↓
Physical Service
Enter fullscreen mode Exit fullscreen mode

This is the larger MyZubster vision:

connecting digital payments to physical autonomous services.


📅 TAZ DAY #1 — Riccione

The next step is bringing these experiments into a physical environment.

TAZ DAY #1 is planned for Riccione, Italy, in September 2026.

The event is intended to demonstrate different parts of the MyZubster ecosystem, including robotics, IoT and Monero payment workflows.

The Cardputer integration adds another possible interaction point:

contactless hardware → XMR payment → physical service.

That is where the software architecture meets the real world.


🔓 Open Source Development

The project is being developed through open-source repositories and issue-driven development.

The development loop is:

Idea
 ↓
GitHub Issue
 ↓
Implementation
 ↓
Pull Request
 ↓
Testing
 ↓
Merge
 ↓
Integration
 ↓
Physical Test
Enter fullscreen mode Exit fullscreen mode

This approach makes it possible for developers to work on individual components without needing to understand the entire ecosystem.

One contributor can work on firmware.

Another can work on Android.

Another can improve the Gateway.

Another can work on Monero integration.

Together, they form one system.


🚀 What's Next?

The Cardputer integration opens several possible directions:

📡 More contactless interfaces

Additional tag and device integrations could be explored.

🤖 Robot payments

The same Gateway could support payments for robotic services.

🌱 IoT services

Sensors and physical infrastructure could initiate service workflows.

🧠 AI agents

EVA and other AI components could eventually coordinate payment-related events.

💳 Physical decentralized terminals

Small devices could become interfaces between users and the MyZubster ecosystem.


Final Thoughts

The Cardputer Zero integration may look like a small hardware experiment.

But architecturally, it represents something bigger.

We now have a path connecting:

UHF → Bluetooth → Android → Gateway → Monero → Payment Verification

And that same architecture can potentially be reused for:

🤖 robots

🌱 smart gardens

📡 IoT devices

🏪 physical services

🧠 AI agents

The goal isn't to create another payment terminal.

The goal is to build open infrastructure that lets physical devices interact with decentralized services.

The next step is testing it outside the development environment.

Tap.

Pay.

Verify.

Act.

That's the direction we're exploring with MyZubster.

💳📡🪙🤖🌱

MyZubster #Monero #XMR #IoT #Cardputer #OpenSource #Robotics #Payments #AI #TAZ #Riccione

Top comments (0)