[PROJECT_ID: 0x01][STATUS: FUNCTIONAL][CATEGORY: HARDWARE • CARDANO]

Cardano Doorbell

A Raspberry Pi Pico W that watches a Cardano wallet and lights an LED when a transaction tagged "PIJAM" arrives on-chain. No server. No middleman that can revoke access. Just hardware reading public chain state.

the_idea

Most blockchain demos happen on screens — a wallet balance updates, an explorer page refreshes. Nothing about that feels real. The Cardano Doorbell was built to make decentralization physical: someone sends a transaction from anywhere in the world, and a light turns on in a room in Uyo.

The trigger isn't a webhook or a company's push notification service. The Pico W reads public chain state directly. If Blockfrost disappeared tomorrow, the same script could point at any other Cardano API — or eventually a local node — because the data itself lives on-chain, owned by no one.

It was built as the centerpiece demo for Pi Jam Uyo Vol. 2 — Hardware Corner (July 31, 2026): a live demonstration where attendees send a tagged transaction and watch the LED respond seconds later.

how_it_works

[Eternl wallet, anywhere]
        |
        |  tx with metadata "PIJAM"
        v
[Cardano preprod chain]
        |
        |  polled every 10s via Blockfrost
        |  /addresses/{address}/transactions
        v
[Raspberry Pi Pico W]
        |
        |  metadata parsed, tag matched
        v
[Onboard LED — 3 seconds]

The script polls one specific known address — it is address-scoped, not scanning the whole chain. When a new transaction appears, it fetches the transaction's metadata and checks for the "PIJAM" tag.

Metadata detection is wallet-agnostic. It handles three formats:

  • Plain string (Eternl's free "Add on-chain Message" feature)
  • List of strings
  • Proper CIP-20 {"msg": [...]} dict format
  • Plus a raw-string fallback across the entire metadata response

A METADATA_FILTER toggle switches behavior: True = only trigger on "PIJAM"-tagged transactions, False = trigger on any new transaction (plain tip-jar mode).

There are two versions of the firmware:

  • cardano_doorbell.py — the core: poll, match, blink
  • cardano_doorbell_with_status.py — additionally serves a local status webpage on the same WiFi network, auto-refreshing every 5 seconds, showing: status, watched address, last poll time, last tx hash, tag match result, LED state, poll/trigger counts, and uptime

build_it_yourself

Hardware

ComponentNotes
Raspberry Pi Pico WOnboard LED is the output — nothing else needed
USB cablePower + flashing

That's the whole BOM. The point is minimalism — chain state to physical output with the least hardware possible.

Setup

  1. Create a free Blockfrost account and a PREPROD project — the project_id is passed as a request header
  2. Install Eternl wallet, switch it to the Preprod network, fund it via the official Cardano testnet faucet
  3. Flash MicroPython onto the Pico W
  4. Copy cardano_doorbell.py across, set your WiFi credentials, Blockfrost project ID, and the watched address
  5. Run it. Send a transaction to the watched address with "PIJAM" in the metadata (Eternl: "Add on-chain Message"). Watch the LED.

Config values

  • METADATA_FILTER — tag-gated vs any-transaction mode
  • Poll interval — default 10 seconds
  • LED duration — default 3 seconds

what_i_learned

  • On-chain metadata is messier than the CIP suggests — every wallet writes it slightly differently, which is why the parser handles three formats plus a fallback. Robustness against wallet variance mattered more than elegance.
  • MicroPython's TCP stack gets fragile when the Pico W is simultaneously polling Blockfrost and serving HTTP. The _with_status version needs bench-testing under concurrent load before live event use — flagged as the main open risk.
  • The demo lands harder than dashboards ever do. "The blockchain turned on a light" is instantly legible to a non-technical audience in a way that explorer screenshots are not.

what_comes_next

  • [ ] Bench-test cardano_doorbell_with_status.py under concurrent load (WiFi polling + HTTP serving + Blockfrost calls)
  • [ ] blink.py starter script for the event's hands-on session
  • [ ] README.md and SETUP.md for the repo
  • [ ] Live deployment: Pi Jam Uyo Vol. 2 — July 31, 2026
  • [ ] Long-term: point at a local Cardano node instead of Blockfrost for full decentralization
related_build ADAClock — the doorbell's stack, grown into a desk object. [read →]