RadioÐoge

Bridging the Gap to Financial Inclusion.

Such Learn! Complete guide to installing, using, and developing with RadioDoge. Much education for developers of all ages!

RadioDoge on Mobile Phone

rocket_launch Getting Started

What is RadioDoge?

RadioDoge is a decentralized communication and data transmission network that enables Dogecoin transactions over radio waves, bypassing the need for traditional internet access. It uses long-distance RF protocols such as LoRa and VaraHF to provide reliable and resilient secure data transmission to reach the Dogecoin blockchain.

RadioDoge empowers the unbanked and those in remote areas to access blockchain-based financial services, engage in transactions with neighbors and the world at large, and maintain self-control and self-governance over their finances.

people RadioDoge Bridging the Gap to Financial Inclusion

The RadioDoge project is committed to advancing financial inclusion for the 1.7 billion unbanked people in the world, offering decentralized and resilient communication even in remote regions.

The system utilizes long distance RF protocols such as LoRa and VaraHF to provide reliable and resilient secure data transmission, bypassing the need for traditional internet access in order to reach the Dogecoin blockchain.

RadioDoge has been built to empower the unbanked, some of the most isolated and vulnerable to exploitation, to access blockchain-based financial services, engage in transactions with both neighbors and the world at large, and allows for self control and self governance over their finances without having to depend on middle-men who often abuse their vulnerability.

RadioDoge's adaptable network topology ensures inclusivity for individuals in diverse locations, with minimal infrastructure cost. Notably, being low-power (both compute and bandwidth), it is easily enabled with renewable energy sources like solar panels, small wind turbines, and batteries, making it suitable for places were hardwired electrical and communications infrastructure are scarce. This combination of financial inclusion and eco-friendliness makes Radio Doge a powerful tool for improving the lives of people everywhere. Dogecoin, for all humanity.

RadioDoge Device

build Installation Guide

Firmware Versions

RadioDoge has two firmware versions available:

  • Firmware V1: Original firmware with basic LoRa mesh networking capabilities
  • Firmware V3: Advanced firmware with web interface, wallet management, and enhanced features

Choose the version that best fits your needs. V3 is recommended for most users as it includes a built-in web interface and more features.

radio Firmware V1 Installation

Firmware V1 is the original RadioDoge firmware with basic LoRa mesh networking capabilities. It's simpler and lighter than V3, suitable for basic node operations.

Hardware Requirements for V1

Component Description Where to Buy
Heltec LoRa32 v2 or v3 ESP32 + LoRa development board with OLED display Heltec Official, Amazon, AliExpress
LoRa Antenna 915MHz (US) or 868MHz (EU) LoRa antenna with SMA connector Amazon, DigiKey
USB Cable USB-A to Micro-USB cable Included with most boards

How V1 Works

Firmware V1 provides basic LoRa mesh networking functionality:

  • LoRa Communication: Sends and receives data over LoRa radio waves
  • Mesh Networking: Forms a mesh network with other RadioDoge nodes
  • OLED Display: Shows node status and basic information on the built-in OLED screen
  • Serial Interface: Configuration and monitoring via serial connection
  • Basic Transaction Relay: Relays Dogecoin transactions through the mesh network

V1 Installation Steps

Follow these steps to install Firmware V1 on your Heltec device:

Step 1: Prerequisites

Install Arduino IDE and ESP32 board support (see V3 installation guide for detailed steps).

Step 2: Clone Repository
Clone RadioDoge Repository - V1
git clone https://github.com/dogecoinfoundation/radiodoge.git
cd radiodoge
git checkout 0.0.1-Beta-1
cd heltec-firmware
Step 3: Install Required Libraries

In Arduino IDE, install these libraries via Tools > Manage Libraries:

  • RadioHead by Mike McCauley
  • U8g2 by olikraus (for OLED display)
Step 4: Configure and Upload
  1. Open the firmware sketch from heltec-firmware folder
  2. Select board: Tools > Board > ESP32 Arduino > Heltec WiFi LoRa 32
  3. Select your COM port
  4. Configure node address and hub address in the code
  5. Upload the firmware
Step 5: Using V1

After installation, V1 firmware operates via:

  • OLED Display: Shows node status, address, and connection info
  • Serial Monitor: Connect at 115200 baud to view logs and send commands
  • LoRa Radio: Automatically connects to nearby hubs and relays transactions

radio Firmware V3 Installation

Firmware V3 is the advanced version with a built-in web interface, wallet management, and enhanced features. It's recommended for most users.

Hardware Requirements for V3

Component Description Where to Buy
Heltec LoRa32 v3 ESP32 + LoRa development board with OLED display (V3 recommended) Heltec Official, Amazon, AliExpress
LoRa Antenna 915MHz (US) or 868MHz (EU) LoRa antenna with SMA connector Amazon, DigiKey, Mouser
USB Cable USB-A to Micro-USB or USB-C cable (depending on board version) Any electronics store, Amazon, included with most boards
Power Supply (Optional) 5V USB power adapter or battery pack for portable use Amazon, electronics stores
Enclosure (Optional) Weatherproof enclosure for outdoor deployment Amazon, electronics stores

Recommended Hardware Models

  • Heltec WiFi LoRa 32 (V3): Model HTIT-WB32LA - Most common and well-supported
  • Heltec WiFi LoRa 32 (V2): Older version, still compatible

Antenna Specifications

  • Frequency: 915MHz (North America, South America, Australia) or 868MHz (Europe)
  • Connector: SMA or IPEX connector (check your board model)
  • Gain: 2-3 dBi recommended for most applications
  • Type: Whip antenna or external directional antenna for longer range
Note: Make sure to purchase the correct frequency antenna for your region. Using the wrong frequency may violate local regulations and won't work properly.

How V3 Works

Firmware V3 is the advanced version with a comprehensive feature set including blockchain-like mesh networking, secure cold storage, and internet connectivity. Here are the key features:

hub Blockchain-Like Mesh Network

RadioDoge V3 creates a decentralized mesh network that works like a blockchain for Dogecoin transactions:

  • wifi_tethering Broadcast Transaction: Send your Dogecoin transaction to all RadioDoge devices in range
  • sync Mesh Propagation: Each device rebroadcasts to extend the network reach
  • explore Gateway Discovery: The transaction travels until it finds a device with internet connectivity
  • link Blockchain Integration: The gateway device forwards your transaction to the Dogecoin network
  • reply Response Relay: The detailed response travels back through the mesh to you

This creates a truly decentralized way to send Dogecoin transactions without requiring internet on your device!

Core Features
  • Built-in Web Interface: Access device via web browser at http://192.168.4.1
  • WiFi Access Point: Creates its own WiFi network (default password: radiodoge)
  • Dual WiFi Mode: Access Point + Station mode for internet connectivity
  • Persistent Configuration: All settings stored in NVS flash memory
  • Real-Time Logging: Monitor all system activity with live log viewer
  • OLED Display: Shows status information and menu navigation
  • Moon Phase Display: View current moon phase on the OLED display with beautiful graphics
  • LibDogecoin Integration: Full libdogecoin WASM support for secure wallet generation and transaction signing
  • Custom Partition Table: Optimized partition layout for large WASM files (~4MB LittleFS partition)
security Security Features
  • Dogecoin Cold Storage: Quantum-resistant (against current quantum computers) encrypted wallet storage with PIN protection. Note: This is NOT post-quantum secure (secure against future powerful quantum computers).
  • AES-256 Encryption: Industry-standard encryption for wallet private keys
  • Offline Key Generation: Generate wallets completely offline using libdogecoin
  • Hardware Security: Keys stored in ESP32's secure NVS (Non-Volatile Storage)
  • Custom AP Password: Secure, configurable WiFi access point password
  • Password Validation: Strong password requirements (8-32 chars, letters + numbers)
network_check Network Features
  • Smart Multipart Packets: Automatic splitting of large transactions for reliable transmission
  • Request Queuing System: Intelligent request queuing ensures reliable communication
  • Timeout Management: Automatic timeout handling for confirmations (15s) and queued requests (30s)
  • Internet Gateway: Forward transactions to Dogecoin network
  • Multiple Gateway Types: Support for CORE, DogeBox, Dogecoin Wallet, and custom gateways
  • Auto-Reconnection: Automatic WiFi reconnection on boot
  • Internet Bridge: Share internet connection with devices connected to RadioDoge WiFi network
  • HTTP Proxy: Reliable internet access via proxy for connected devices
  • DNS Server: Custom DNS handling for connected clients
visibility Monitoring & Management
  • Queue Monitoring: Real-time queue status with pending request tracking via API
  • Multipart Status: Track active multipart transmission sessions
  • Enhanced Real-Time Logging: Comprehensive logging of all LoRa, WiFi, and API activities
  • Log Forwarding: Send system logs to other RadioDoge devices via LoRa for remote monitoring
  • Auto-Refresh Logs: Real-time logs auto-refresh by default for better monitoring
account_balance_wallet Wallet Management
  • Secure Wallet Generation: Generate Dogecoin wallets completely offline using libdogecoin
  • PIN-Protected Storage: AES-256 encrypted wallet storage with user-defined PIN
  • Manual Wallet Import: Import existing wallets using WIF (Wallet Import Format) private keys
  • Wallet Management: View, store, and delete encrypted wallets
  • OLED Menu System: Complete menu navigation using device buttons
  • Public/Private Key Display: Toggle between viewing public addresses and private keys

V3 Installation Steps

This guide will walk you through installing RadioDoge firmware V3 on Heltec devices. Choose your operating system below:

laptop_windows Windows Installation

Step 1: Install Arduino IDE
  1. Download Arduino IDE from https://www.arduino.cc/en/software
  2. Choose "Windows Installer" (recommended) or "Windows ZIP file"
  3. Run the installer and follow the installation wizard
  4. Launch Arduino IDE after installation
Step 2: Install ESP32 Board Support
  1. Open Arduino IDE
  2. Go to File > Preferences
  3. In "Additional Board Manager URLs", add:
    ESP32 Board Manager URL
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. Click "OK" to save
  5. Go to Tools > Board > Boards Manager
  6. Search for "ESP32"
  7. Install "esp32 by Espressif Systems" (this may take several minutes)
Step 3: Install USB Drivers
  1. Download CP210x USB drivers from Silicon Labs
  2. Run the installer and follow the instructions
  3. Restart your computer if prompted
  4. Connect your Heltec board via USB
  5. Check Device Manager (Windows Key + X, then Device Manager) to verify the COM port appears
Step 4: Install Required Libraries
  1. In Arduino IDE, go to Tools > Manage Libraries
  2. Search for and install the following libraries:
    • Adafruit GFX Library (by Adafruit) - Required for OLED display graphics
    • Adafruit SSD1306 (by Adafruit) - Required for OLED display control
    • LoRaWan_APP (by Heltec) - Required for LoRa communication
Step 5: Clone RadioDoge Repository

Install Git for Windows if you don't have it: Download Git

Clone RadioDoge Repository - V3 (Windows)
# Open Command Prompt or PowerShell
# Navigate to your desired directory
cd C:\Users\YourName\Documents

# Clone the RadioDoge repository
git clone https://github.com/dogecoinfoundation/radiodoge.git
cd radiodoge
git checkout 0.0.1-Beta-1
cd heltec-firmware-v3

# IMPORTANT: Rename the folder for Arduino IDE compatibility
# Arduino IDE requires the folder name to match the .ino file name
ren heltec-firmware-v3 heltec-firmware
Important: You must rename the folder from heltec-firmware-v3 to heltec-firmware because Arduino IDE cannot open the sketch if the folder name doesn't match the .ino filename. The main file is named heltec-firmware.ino, so the folder must be named heltec-firmware.
Step 6: Prepare LibDogecoin WASM File

Firmware V3 includes libdogecoin for secure wallet generation. You need to prepare the WASM file:

Option 1: Use Pre-built WASM (Recommended)
If a pre-built libdogecoin.js file is available in the repository, it should already be in the data folder. Skip to Step 7.
Option 2: Build Your Own WASM
If you need to build libdogecoin WASM yourself, follow the detailed instructions below.
Building LibDogecoin WASM - Detailed Instructions
Step 1: Install Emscripten SDK

Emscripten is required to compile C code to WebAssembly. Install it as follows:

Windows:

Install Emscripten on Windows
# Install Git for Windows if not already installed
# Download from: https://git-scm.com/download/win

# Clone emsdk repository
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# Install and activate latest SDK
emsdk install latest
emsdk activate latest

# Activate PATH and other environment variables
emsdk_env.bat

Linux/macOS:

Install Emscripten on Linux/macOS
# Clone emsdk repository
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# Install and activate latest SDK
./emsdk install latest
./emsdk activate latest

# Activate PATH and other environment variables
source ./emsdk_env.sh
Important: You must run emsdk_env.bat (Windows) or source ./emsdk_env.sh (Linux/macOS) in each new terminal session before building, or add it to your shell profile.
Step 2: Install Build Dependencies

Linux (Ubuntu/Debian):

Install Dependencies on Linux
sudo apt-get update
sudo apt-get install autoconf automake libtool build-essential libevent-dev

macOS:

Install Dependencies on macOS
# Install Xcode Command Line Tools
xcode-select --install

# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install dependencies
brew install autoconf automake libtool

Windows:

For Windows, you can use MSYS2 or WSL (Windows Subsystem for Linux). WSL is recommended:

Install Dependencies on Windows (WSL)
# Install WSL2 and Ubuntu from Microsoft Store
# Then in WSL Ubuntu terminal:
sudo apt-get update
sudo apt-get install autoconf automake libtool build-essential libevent-dev
Step 3: Clone and Build LibDogecoin
Clone and Build LibDogecoin
# Clone libdogecoin repository
git clone https://github.com/dogecoinfoundation/libdogecoin.git
cd libdogecoin

# Build libdogecoin static library
./autogen.sh
./configure --disable-net --disable-tools
make

# The static library will be created at: .libs/libdogecoin.a
Step 4: Build libunistring Dependency
Build libunistring
# Download and build libunistring
cd /tmp
wget https://ftp.gnu.org/gnu/libunistring/libunistring-1.1.tar.xz
tar -xf libunistring-1.1.tar.xz
cd libunistring-1.1
./configure --prefix=/tmp/libunistring-1.1/build
make
make install
Note: libsecp256k1 is already included as a git subtree in libdogecoin/src/secp256k1/ and will be built automatically with libdogecoin.
Step 5: Compile to WASM with Emscripten

Now compile libdogecoin to WASM using the complete command with all exported functions:

Build LibDogecoin WASM - Complete Command
# Make sure Emscripten is activated
# Windows: emsdk_env.bat
# Linux/macOS: source ~/emsdk/emsdk_env.sh

# Navigate to libdogecoin directory
cd /path/to/libdogecoin

# Compile to WASM with all exported functions
emcc -s STRICT=1 \
    -s EXPORTED_FUNCTIONS='["_dogecoin_ecc_start","_dogecoin_ecc_stop","_moon","_sign_message","_verify_message","_generatePrivPubKeypair","_generateHDMasterPubKeypair","_generateDerivedHDPubkey","_getDerivedHDAddressByPath","_getDerivedHDAddress","_getDerivedHDAddressFromMnemonic","_verifyPrivPubKeypair","_verifyHDMasterPubKeypair","_verifyP2pkhAddress","_generateHDMasterPubKeypairFromMnemonic","_verifyHDMasterPubKeypairFromMnemonic","_start_transaction","_add_utxo","_add_output","_finalize_transaction","_get_raw_transaction","_clear_transaction","_remove_all","_sign_raw_transaction","_sign_transaction","_sign_transaction_w_privkey","_store_raw_transaction","_generateEnglishMnemonic","_generateRandomEnglishMnemonic","_dogecoin_seed_from_mnemonic","_qrgen_p2pkh_to_qrbits","_qrgen_p2pkh_to_qr_string","_qrgen_p2pkh_consoleprint_to_qr","_qrgen_string_to_qr_pngfile","_qrgen_string_to_qr_jpgfile","_koinu_to_coins_str","_coins_to_koinu_str","_dogecoin_get_balance","_dogecoin_get_balance_str","_dogecoin_get_utxo_txid_str","_dogecoin_get_utxos_length","_chain_from_b58_prefix_bool","_dogecoin_char_vla","_dogecoin_free","_malloc","_free"]' \
    -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap","setValue","getValue","UTF8ToString","stackAlloc","intArrayFromString","stringToUTF8"]' \
    -s MODULARIZE=1 \
    -s ENVIRONMENT='web' \
    -s EXPORT_NAME="loadWASM" \
    -s SINGLE_FILE=1 \
    .libs/libdogecoin.a \
    src/secp256k1/.libs/libsecp256k1.a \
    /tmp/libunistring-1.1/build/lib/libunistring.a \
    -Iinclude/dogecoin \
    -o libdogecoin.js
Command Explanation:
  • -s STRICT=1: Enable strict mode for better error checking
  • -s EXPORTED_FUNCTIONS: List of C functions to export (prefixed with _)
  • -s EXPORTED_RUNTIME_METHODS: JavaScript helper functions to include
  • -s MODULARIZE=1: Create a module that can be imported
  • -s ENVIRONMENT='web': Target web environment
  • -s EXPORT_NAME="loadWASM": Name of the exported module function
  • -s SINGLE_FILE=1: Embed WASM binary in the JS file (single file output)
  • -Iinclude/dogecoin: Include path for libdogecoin headers
Step 6: Copy WASM File to RadioDoge Firmware
Copy WASM to Firmware Data Folder
# Copy the generated libdogecoin.js to RadioDoge firmware data folder
# Windows:
copy libdogecoin.js C:\path\to\radiodoge\heltec-firmware\data\libdogecoin.js

# Linux/macOS:
cp libdogecoin.js /path/to/radiodoge/heltec-firmware/data/libdogecoin.js
Success! The libdogecoin.js file is now ready. Continue with Step 7 (Configure Partition Table) and Step 9 (Upload Filesystem) to upload it to your device.
Alternative: Build Lite Version (Smaller File)

If you need a smaller file size, you can build a "lite" version with fewer functions:

Build Lite Version (Fewer Functions)
emcc \
  -s EXPORTED_FUNCTIONS='["_dogecoin_ecc_start","_dogecoin_ecc_stop","_moon","_sign_message","_verify_message","_generatePrivPubKeypair","_verifyPrivPubKeypair","_verifyP2pkhAddress","_start_transaction","_add_utxo","_add_output","_finalize_transaction","_get_raw_transaction","_clear_transaction","_remove_all","_sign_raw_transaction","_sign_transaction","_sign_transaction_w_privkey","_koinu_to_coins_str","_coins_to_koinu_str","_chain_from_b58_prefix_bool","_dogecoin_char_vla","_dogecoin_free","_malloc","_free"]' \
  -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap","setValue","getValue","UTF8ToString","stackAlloc","intArrayFromString","stringToUTF8"]' \
  -s MODULARIZE=1 \
  -s ENVIRONMENT=web \
  -s EXPORT_NAME=loadWASM \
  -s SINGLE_FILE=1 \
  .libs/libdogecoin.a \
  src/secp256k1/.libs/libsecp256k1.a \
  /tmp/libunistring-1.1/build/lib/libunistring.a \
  -Iinclude/dogecoin \
  -o libdogecoin-lite.js
Step 7: Configure Partition Table

Firmware V3 requires a custom partition table to accommodate the large libdogecoin WASM file (~2.8MB). The default partition table only allocates ~1.5MB for LittleFS, which is insufficient.

  1. Copy partitions.csv from the firmware folder to your sketch folder (the heltec-firmware folder)
  2. In Arduino IDE, go to Tools > Partition Scheme
  3. Select "Custom Partition Table"
  4. The IDE will automatically use partitions.csv from your sketch folder
Note: Changing partition tables does NOT erase your Heltec license - the license is stored in NVS which is preserved. However, if you use Tools > Erase Flash > "All Flash Contents", this WILL erase your license and you'll need to restore it (see troubleshooting section).
Step 8: Configure and Upload Firmware
  1. Open the RadioDoge firmware sketch in Arduino IDE:
    • File > Open > Navigate to heltec-firmware folder (the renamed folder)
    • Open the main heltec-firmware.ino file
    • Wait for all tabs to load (radioDogeTypes.h, libdogecoin.h, libdogecoin.ino, Images/*.h files)
  2. Select your board: Tools > Board > ESP32 Arduino > Heltec WiFi LoRa 32 (V3)
  3. Select the COM port: Tools > Port > COM3 (your port number may differ)
  4. Set upload speed: Tools > Upload Speed > 921600
  5. Verify partition scheme: Tools > Partition Scheme > Custom Partition Table
  6. Click the Verify button (✓) to compile the code and check for errors
  7. If compilation succeeds, click the Upload button (→) or press Ctrl+U
  8. If upload fails, hold the BOOT button on your board, click Upload, then release BOOT when upload starts
Step 9: Upload Filesystem (LibDogecoin WASM)

After uploading the firmware, you need to upload the filesystem containing the libdogecoin WASM file:

  1. Close Serial Monitor if it's open
  2. For Arduino IDE 1.x: Go to Tools > ESP32 Sketch Data Upload
  3. For Arduino IDE 2.x:
    • Press Ctrl + Shift + P (Windows/Linux) or Cmd + Shift + P (macOS)
    • Type "Upload LittleFS" and select "Upload LittleFS to Pico/ESP8266/ESP32"
  4. Wait for upload to complete
  5. Verify in Serial Monitor that the file was uploaded:
    Listing LittleFS files:
      - libdogecoin.js (XXXXX bytes)
    Total files: 1
Note: If you get a "File system is full" error, ensure you've selected the Custom Partition Table in Step 7. The custom partition allocates ~4MB for LittleFS, which is sufficient for the WASM file.
Step 10: Verify Installation
  1. Open Serial Monitor: Tools > Serial Monitor
  2. Set baud rate to 115200
  3. You should see initialization messages
  4. Look for "RadioDoge" WiFi network and connect using password: radiodoge
  5. Open browser to: http://192.168.4.1

terminal Linux Installation

Step 1: Install Arduino IDE

Ubuntu/Debian:

Install Arduino IDE (Linux)
# Download Arduino IDE
wget https://downloads.arduino.cc/arduino-ide/arduino-ide_latest_Linux_64bit.AppImage

# Make it executable
chmod +x arduino-ide_latest_Linux_64bit.AppImage

# Run Arduino IDE
./arduino-ide_latest_Linux_64bit.AppImage

# Or install via snap (alternative)
sudo snap install arduino
Step 2: Install Required Dependencies

Ubuntu/Debian:

Install Dependencies (Linux)
sudo apt update
sudo apt install git python3-pip python3-setuptools
sudo apt install libusb-1.0-0-dev
Step 3: Add User to Dialout Group
Add User to Dialout Group
# Add your user to dialout group to access serial ports
sudo usermod -a -G dialout $USER

# Log out and log back in for changes to take effect
# Or use newgrp to apply immediately
newgrp dialout
Step 4: Install ESP32 Board Support
  1. Open Arduino IDE
  2. Go to File > Preferences
  3. Add to "Additional Board Manager URLs":
    ESP32 Board Manager URL
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. Go to Tools > Board > Boards Manager
  5. Search for "ESP32" and install "esp32 by Espressif Systems"
Step 5: Install Required Libraries
  1. Go to Tools > Manage Libraries
  2. Install the following libraries:
    • Adafruit GFX Library (by Adafruit)
    • Adafruit SSD1306 (by Adafruit)
    • LoRaWan_APP (by Heltec)
Step 6: Clone RadioDoge Repository
Clone RadioDoge Repository - V3 (Linux)
# Clone the RadioDoge repository
git clone https://github.com/dogecoinfoundation/radiodoge.git
cd radiodoge
git checkout 0.0.1-Beta-1
cd heltec-firmware-v3

# IMPORTANT: Rename the folder for Arduino IDE compatibility
mv heltec-firmware-v3 heltec-firmware
Important: You must rename the folder from heltec-firmware-v3 to heltec-firmware because Arduino IDE cannot open the sketch if the folder name doesn't match the .ino filename.
Step 7: Prepare LibDogecoin WASM File

See Step 6 in the Windows installation section above for details. The process is the same on Linux.

Step 8: Configure Partition Table

See Step 7 in the Windows installation section above for details. The process is the same on Linux.

Step 9: Upload Firmware
  1. Connect your Heltec board via USB
  2. Find the device: ls -l /dev/ttyUSB* or ls -l /dev/ttyACM*
  3. Open the firmware sketch in Arduino IDE (from the heltec-firmware folder)
  4. Select board: Tools > Board > ESP32 Arduino > Heltec WiFi LoRa 32 (V3)
  5. Select port: Tools > Port > /dev/ttyUSB0 (or your device)
  6. Set upload speed: Tools > Upload Speed > 921600
  7. Verify partition scheme: Tools > Partition Scheme > Custom Partition Table
  8. Click Verify (✓) to compile, then Upload (→)
Step 10: Upload Filesystem

See Step 9 in the Windows installation section above for details.

Step 11: Verify Installation
  1. Open Serial Monitor: Tools > Serial Monitor
  2. Set baud rate to 115200
  3. You should see initialization messages
  4. Look for "RadioDoge" WiFi network and connect using password: radiodoge
  5. Open browser to: http://192.168.4.1

laptop_mac macOS Installation

Step 1: Install Arduino IDE
  1. Download Arduino IDE from https://www.arduino.cc/en/software
  2. Choose "macOS" version
  3. Open the downloaded .zip file
  4. Drag Arduino IDE to your Applications folder
  5. Open Arduino IDE from Applications (you may need to allow it in System Preferences > Security & Privacy)
Step 2: Install Homebrew (Optional but Recommended)
Install Homebrew (macOS)
# Install Homebrew if you don't have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Git via Homebrew
brew install git
Step 3: Install ESP32 Board Support
  1. Open Arduino IDE
  2. Go to Arduino > Preferences (or File > Preferences on older versions)
  3. Add to "Additional Board Manager URLs":
    ESP32 Board Manager URL
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. Go to Tools > Board > Boards Manager
  5. Search for "ESP32" and install "esp32 by Espressif Systems"
Step 4: Install Required Libraries
  1. Go to Tools > Manage Libraries
  2. Install the following libraries:
    • Adafruit GFX Library (by Adafruit)
    • Adafruit SSD1306 (by Adafruit)
    • LoRaWan_APP (by Heltec)
Step 5: Clone RadioDoge Repository
Clone RadioDoge Repository - V3 (macOS)
# Open Terminal
# Navigate to your desired directory
cd ~/Documents

# Clone the RadioDoge repository
git clone https://github.com/dogecoinfoundation/radiodoge.git
cd radiodoge
git checkout 0.0.1-Beta-1
cd heltec-firmware-v3

# IMPORTANT: Rename the folder for Arduino IDE compatibility
mv heltec-firmware-v3 heltec-firmware
Important: You must rename the folder from heltec-firmware-v3 to heltec-firmware because Arduino IDE cannot open the sketch if the folder name doesn't match the .ino filename.
Step 6: Prepare LibDogecoin WASM File

See Step 6 in the Windows installation section above for details. The process is the same on macOS.

Step 7: Configure Partition Table

See Step 7 in the Windows installation section above for details. The process is the same on macOS.

Step 8: Upload Firmware
  1. Connect your Heltec board via USB
  2. Open the firmware sketch in Arduino IDE (from the heltec-firmware folder)
  3. Select board: Tools > Board > ESP32 Arduino > Heltec WiFi LoRa 32 (V3)
  4. Select port: Tools > Port > /dev/cu.usbserial-* or /dev/cu.SLAB_USBtoUART
  5. Set upload speed: Tools > Upload Speed > 921600
  6. Verify partition scheme: Tools > Partition Scheme > Custom Partition Table
  7. Click Verify (✓) to compile, then Upload (→)
  8. If you get permission errors, you may need to install USB drivers from Silicon Labs
Step 9: Upload Filesystem

See Step 9 in the Windows installation section above for details.

Step 10: Verify Installation
  1. Open Serial Monitor: Tools > Serial Monitor
  2. Set baud rate to 115200
  3. You should see initialization messages
  4. Look for "RadioDoge" WiFi network and connect using password: radiodoge
  5. Open browser to: http://192.168.4.1

Configuration

Before uploading, configure your device settings in the firmware code:

  • Node Address: Set your unique node address (e.g., 10.2.58)
  • Hub Address: Configure the address of your nearest hub (e.g., 10.0.1)
  • LoRa Frequency: Set the appropriate frequency for your region:
    • 915MHz for North America, South America, Australia
    • 868MHz for Europe
    • 433MHz for some regions (check local regulations)
  • WiFi Credentials: If using WiFi for initial setup, configure your SSID and password
  • Transmit Power: Adjust based on your needs and local regulations (typically 14-20 dBm)

Hardware Setup

  1. Attach Antenna: Screw the LoRa antenna onto the antenna connector on your board
  2. Check Frequency: Ensure the antenna is tuned for your operating frequency (915MHz or 868MHz)
  3. Mount Antenna: For best range, mount the antenna as high as possible and away from metal objects
  4. Power Supply: Connect via USB or external 5V power supply
  5. Enclosure: For outdoor use, place in a weatherproof enclosure with antenna feedthrough

Troubleshooting

Common Installation Issues
  • Arduino IDE can't open sketch: Make sure you renamed the folder from heltec-firmware-v3 to heltec-firmware. The folder name must match the .ino filename.
  • Upload fails (Windows/Linux): Hold the BOOT button while clicking Upload, then release after upload starts
  • Upload fails (macOS): Install USB drivers from Silicon Labs, or try holding BOOT button during upload
  • No serial output: Check COM port selection and baud rate (115200). On Linux, ensure you're in the dialout group
  • Port not found: Unplug and replug USB cable, check Device Manager (Windows) or ls /dev/tty* (Linux/macOS)
  • Permission denied (Linux): Add user to dialout group: sudo usermod -a -G dialout $USER then log out/in
  • Board not recognized: Install CP210x or CH340 USB drivers depending on your board version
Filesystem Upload Issues
  • "File system is full" error: Ensure you've selected Tools > Partition Scheme > Custom Partition Table. The custom partition allocates ~4MB for LittleFS, which is sufficient for the libdogecoin WASM file.
  • Filesystem upload fails: Close Serial Monitor first, then try uploading again. For Arduino IDE 2.x, you may need to install the LittleFS upload plugin manually.
  • libdogecoin.js not found: Verify the file exists in the data folder. If missing, you'll need to build it (see README_BUILD_WASM.md) or use a pre-built version.
Heltec License Error Recovery

If you see the message "Please provide a correct license!" in the serial monitor, you need to restore your Heltec license:

Method 1: Using Python Script (Recommended)
  1. Get your Chip ID:
    • Open Serial Monitor in Arduino IDE (baud rate: 115200)
    • Look for: ESP32ChipID=XXXXXXXXXXXX
    • Copy the 12-character hex string (e.g., D0CBA19E139C)
  2. Get License from Heltec:
    • Visit: https://resource.heltec.cn/search
    • Enter your Chip ID and retrieve your license key
    • License format: {0xXXXXXXXX, 0xXXXXXXXX, 0xXXXXXXXX, 0xXXXXXXXX}
    • Convert to AT command format: Remove 0x and commas, concatenate (e.g., 5642DDFECEB390B19B6F409CBA24DE60)
  3. Install Python dependencies:
    Install Python Dependencies
    pip install pyserial
    # Or use requirements file
    pip install -r requirements.txt
  4. Run the license script:
    Set Heltec License
    # Close Serial Monitor first!
    cd heltec-firmware
    python set_heltec_license.py COM3 YOUR_LICENSE_KEY
    
    # Example:
    # python set_heltec_license.py COM3 5642DDFECEB390B19B6F409CBA24DE60
  5. Reset device: Unplug/replug USB or press RESET button
  6. Verify: License error should be gone in Serial Monitor
Method 2: Manual AT Command
  1. Open Serial Monitor (baud rate: 115200, line ending: "Both NL & CR")
  2. Type: AT+CDKEY=YOUR_LICENSE_KEY (replace with your actual license key)
  3. Press Send and wait for "OK"
  4. Reset device
Note: Changing partition tables does NOT erase your license (it's stored in NVS). However, if you use Tools > Erase Flash > "All Flash Contents", this WILL erase your license and you'll need to restore it using the methods above.
Other Common Issues
  • LoRa not working: Verify antenna connection, check frequency settings match your region, ensure antenna is properly tuned
  • Can't find hub: Ensure hub is within range (typically 1-15km depending on terrain), verify hub is beaconing, check frequency match
  • Web interface not accessible: Check that you're connected to the "RadioDoge" WiFi network, try http://192.168.4.1, verify default password is "radiodoge"
  • Wallet generation fails: Ensure libdogecoin.js was uploaded to filesystem successfully, check Serial Monitor for errors
  • Moon phase not showing: Navigate to Main Menu > Moon Phase on the OLED display using device buttons

settings Firmware Usage Guide

Accessing the Built-in Web Interface

The RadioDoge Heltec firmware includes a built-in web interface that provides comprehensive documentation and controls. Here's how to access and use it:

Step 1: Connect to the Device

After uploading the firmware and powering on your device:

  1. The device will create a WiFi access point (AP mode)
  2. Look for a WiFi network named something like RadioDoge-XXXX or ESP32-XXXX
  3. Connect to this network from your computer or mobile device
  4. The default password is typically radiodoge or may be displayed on the OLED screen

Step 2: Access the Web Interface

Once connected to the device's WiFi network:

  1. Open a web browser on your connected device
  2. Navigate to: http://192.168.4.1 (default IP address)
  3. You should see the RadioDoge web interface homepage
Note: If 192.168.4.1 doesn't work, check the OLED display on your Heltec board - it may display the IP address. You can also check your network settings to see the gateway IP address.

Web Interface Features

The built-in web interface provides the following sections:

1. Home/Dashboard
  • Device Status: Shows current node address, connection status, and system information
  • Network Info: Displays connected hub information, signal strength, and network topology
  • Quick Actions: Fast access to common operations like sending transactions or checking balance
2. Configuration Menu

Access device settings and preferences:

  • Node Configuration:
    • Set your unique node address (e.g., 10.2.58)
    • Configure hub address (e.g., 10.0.1 for main hub)
    • Set LoRa frequency (915MHz for US, 868MHz for EU)
    • Adjust transmit power (typically 14-20 dBm)
  • WiFi Settings:
    • Configure WiFi access point name (SSID)
    • Set WiFi password
    • Optionally connect to existing WiFi network
  • Display Settings:
    • OLED screen brightness
    • Display timeout settings
    • Information display preferences
3. Wallet Management

Manage your Dogecoin addresses and keys:

  • Address Book:
    • Add new addresses manually or via QR code
    • Label addresses with friendly names
    • Edit or delete saved addresses
    • Import/export address book
  • Wallet Setup:
    • Generate new wallet addresses (using LibDogecoin)
    • Import existing private keys (encrypted storage)
    • View public addresses (private keys never displayed)
    • Backup wallet data
  • Security:
    • Set encryption PIN for balance privacy
    • Configure key storage encryption
    • Manage access permissions
4. Transaction Operations

Send and receive Dogecoin transactions:

  • Send Transaction:
    • Select source address from address book or enter manually
    • Enter destination address (or select from address book)
    • Specify amount in DOGE
    • Review transaction details
    • Confirm and send
    • View transaction ID (TXID) after confirmation
  • Receive Transactions:
    • Generate receiving address
    • Display QR code for easy sharing
    • Monitor incoming transactions
  • Transaction History:
    • View sent transactions with TXIDs
    • View received transactions
    • Check transaction status and confirmations
    • Export transaction log
5. Network Operations

Manage network connections and hub communication:

  • Hub Discovery:
    • Scan for available hubs in range
    • View hub addresses and signal strength
    • Select which hub to connect to
    • View hub information (address, type, status)
  • Connection Status:
    • Current hub connection
    • Signal quality indicators
    • Network topology view
    • Connection statistics
  • Message Relay:
    • Send encrypted messages to other nodes
    • View received messages
    • Message history
6. Balance & Account Management
  • Check Balance:
    • Query balance for any address
    • View balance for registered addresses
    • Update balance information from hub
  • Register with Hub:
    • Register address for balance monitoring (optional)
    • Set encryption PIN for privacy
    • Unregister when moving to different hub
7. System Information
  • Device Info:
    • Firmware version
    • Hardware model
    • Uptime and system status
    • Memory usage
  • Network Statistics:
    • Messages sent/received
    • Transactions processed
    • Network errors and retries
    • Connection quality metrics
  • Logs:
    • System logs
    • Transaction logs
    • Network activity logs
    • Error logs for troubleshooting

Using the OLED Display

In addition to the web interface, the Heltec board features an OLED display that shows:

  • Boot Screen: Device initialization and status
  • Hub Information: Connected hub address and signal strength
  • Node Address: Your device's network address
  • Status Indicators: Connection status, power level, errors
  • Menu Navigation: When using physical buttons (if available)

Menu Navigation (Physical Controls)

If your Heltec board has physical buttons, you can navigate the firmware menu:

  • Button 1 (Left): Navigate up/previous menu item
  • Button 2 (Right): Navigate down/next menu item
  • Button 3 (Center/Select): Select/confirm action

Typical Workflow

Here's a typical workflow for using RadioDoge:

  1. Initial Setup:
    • Power on device
    • Connect to device WiFi network
    • Access web interface at http://192.168.4.1
    • Configure node address and hub address
    • Set LoRa frequency for your region
  2. Wallet Setup:
    • Generate or import wallet addresses
    • Add addresses to address book
    • Set encryption PIN for privacy
  3. Connect to Hub:
    • Device automatically scans for hubs
    • Select hub from discovered list (if multiple available)
    • Wait for connection confirmation
  4. Send Transaction:
    • Navigate to "Send Transaction" in web interface
    • Select source address
    • Enter destination address and amount
    • Review and confirm
    • Wait for TXID confirmation
  5. Verify Transaction:
    • Copy TXID from confirmation
    • Check on blockchain explorer (e.g., chain.so)
    • Verify transaction details match

Advanced Features

Multi-Hop Routing

If your node cannot directly reach a hub, the firmware can automatically route through other nodes:

  • Network topology is discovered automatically
  • Messages are encrypted at each hop
  • Routing information is displayed in the web interface
Offline Transaction Queue

If the hub is temporarily unavailable:

  • Transactions are queued locally on the device
  • Queue status is shown in the web interface
  • Transactions are automatically sent when connection is restored
Low Power Mode

For battery-powered deployments:

  • Enable sleep mode in configuration
  • Device wakes on hub beacon or user interaction
  • Battery level monitoring (if supported by hardware)

Troubleshooting via Web Interface

The web interface includes troubleshooting tools:

  • Connection Test: Test LoRa radio functionality
  • Hub Ping: Check connectivity to hub
  • System Diagnostics: View detailed system information
  • Reset Options: Factory reset, network reset, etc.
  • Firmware Update: OTA (Over-The-Air) firmware updates (if supported)
Security Reminders:
  • Private keys are never transmitted over the air or displayed in the web interface
  • All transactions are created locally using LibDogecoin
  • Change default WiFi password after first setup
  • Use encryption PIN for balance privacy
  • Regularly backup your wallet data

api Firmware V3 API Documentation

REST API Overview

Firmware V3 provides a comprehensive REST API for programmatic control of all device functions. All API endpoints return JSON responses and support both GET and POST methods where applicable.

Base URL: http://192.168.4.1/api/
Format: JSON requests and responses
Methods: GET and POST supported
Authentication: Connection to RadioDoge WiFi network required

wifi_tethering RECOMMENDED: Broadcast API Commands

The broadcast feature is the recommended way to send Dogecoin transactions. It creates a blockchain-like mesh network that automatically finds gateways and forwards transactions.

Broadcast Dogecoin Transaction (Blockchain-Like)

Endpoint: POST /api/broadcast

Description: Broadcast a Dogecoin transaction to the entire RadioDoge network. No internet required! Automatically finds gateway and forwards to Dogecoin network.

cURL Example - Broadcast Transaction
curl -X POST "http://192.168.4.1/api/broadcast" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "type=transaction&priority=normal&message=0100000001..."
JavaScript Example - Broadcast Transaction
async function broadcastTransaction(signedTx) {
  const response = await fetch('http://192.168.4.1/api/broadcast', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: `type=transaction&priority=normal&message=${signedTx}`
  });
  
  const result = await response.json();
  console.log('Transaction broadcasted:', result);
  return result;
}

Parameters:

  • type: transaction (required)
  • priority: normal, high, or urgent (optional, default: normal)
  • message: Signed Dogecoin transaction hex string (required)
Broadcast General Message

Endpoint: POST /api/broadcast

cURL Example - Broadcast Message
curl -X POST "http://192.168.4.1/api/broadcast" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "type=announcement&priority=normal&message=Network update"

Parameters:

  • type: announcement, emergency, network, or transaction (required)
  • priority: normal, high, or urgent (optional)
  • message: Message content (required)
Note: Large broadcasts (>255 bytes) automatically use multipart packets for reliable transmission.

send Communication API Endpoints

Send Direct Message

Endpoint: POST /api/message

Description: Send a text message to a specific RadioDoge device via LoRa.

cURL Example - Send Message
curl -X POST "http://192.168.4.1/api/message" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "address=10.1.2&type=text&text=Hello from RadioDoge!"

Parameters:

  • address: Target address (e.g., "10.1.2") (required)
  • type: Message type - text, data, or command (required)
  • text: Message content (required)
Send Direct Transaction (LoRa)

Endpoint: POST /api/transaction

Description: Send a Dogecoin transaction to a specific device via LoRa. If the receiving device has an internet gateway configured, it will automatically forward to the Dogecoin network.

cURL Example - Send Transaction via LoRa
curl -X POST "http://192.168.4.1/api/transaction" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "address=10.1.2&type=signed&data=0100000001..."

Parameters:

  • address: Target address (e.g., "10.1.2") (required)
  • type: Transaction type - signed, raw, or utxo (required)
  • data: Transaction data as hex string (required)

Response Format (with Gateway):

Success Response
{
  "success": true,
  "action": "transaction",
  "target": "10.1.2",
  "type": "signed",
  "message": "Transaction sent to 10.1.2",
  "internet_forwarded": true,
  "internet_response": "{\"success\":true,\"transaction_id\":\"abc123...\"}"
}
Error Response
{
  "success": true,
  "action": "transaction",
  "target": "10.1.2",
  "type": "signed",
  "message": "Transaction sent to 10.1.2",
  "internet_forwarded": true,
  "internet_response": "{\"success\":false,\"error\":\"transaction already in block chain\"}"
}
Note: Large transactions (>255 bytes) automatically use multipart packets for reliable transmission.
Send Transaction to Internet Gateway

Endpoint: POST /api/transaction/send

Description: Send transaction directly to your configured internet gateway (Dogecoin Core, DogeBox, etc.) for immediate broadcast to the Dogecoin network.

cURL Example - Send to Gateway
curl -X POST "http://192.168.4.1/api/transaction/send" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "transaction=0100000001..."

Parameters:

  • transaction: Signed transaction hex string (required)

Response:

Success Response
{
  "success": true,
  "action": "transaction_send",
  "message": "Transaction sent to stored gateway",
  "gateway_type": "core",
  "server_response": "{\"success\":true,\"transaction_id\":\"abc123...\"}"
}
Send Ping

Endpoint: GET /api/ping or POST /api/ping

Description: Test connectivity between RadioDoge devices.

cURL Example - Ping Device
curl -X GET "http://192.168.4.1/api/ping?region=10&community=1&node=2"

# Or with POST
curl -X POST "http://192.168.4.1/api/ping" \
  -d "region=10&community=1&node=2"

Parameters:

  • region: Target region (0-255) (required)
  • community: Target community (0-255) (required)
  • node: Target node (0-255) (required)
  • broadcast: Set to "1" for broadcast ping (optional)

info Device Status & Configuration API

Get Device Status

Endpoint: GET /api/status

Description: Get current device status and configuration information.

cURL Example - Get Status
curl -X GET "http://192.168.4.1/api/status"
Get/Set LoRa Address

Endpoints: GET /api/address or POST /api/address

Description: Get or set the LoRa network address (Region.Community.Node).

cURL Example - Set Address
curl -X POST "http://192.168.4.1/api/address" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "region=10&community=1&node=5"

POST Parameters:

  • region: Region number (0-255) (required)
  • community: Community number (0-255) (required)
  • node: Node number (0-255) (required)
Get WiFi Status

Endpoint: GET /api/wifi

Description: Get WiFi connection status and configuration.

cURL Example - Get WiFi Status
curl -X GET "http://192.168.4.1/api/wifi"
Connect to Internet WiFi

Endpoint: POST /api/wifi/connect

Description: Connect to an internet WiFi network.

cURL Example - Connect WiFi
curl -X POST "http://192.168.4.1/api/wifi/connect" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "ssid=MyWiFi&password=MyPassword"

Parameters:

  • ssid: WiFi network name (required)
  • password: WiFi password (required)
Disconnect from Internet WiFi

Endpoint: POST /api/wifi/disconnect

cURL Example - Disconnect WiFi
curl -X POST "http://192.168.4.1/api/wifi/disconnect"
Clear Stored WiFi Credentials

Endpoint: POST /api/wifi/clear

cURL Example - Clear WiFi
curl -X POST "http://192.168.4.1/api/wifi/clear"

security Password Management API

Change Access Point Password

Endpoint: POST /api/password/change

Description: Change the WiFi access point password. Password must be 8-32 characters and contain both letters and numbers.

cURL Example - Change Password
curl -X POST "http://192.168.4.1/api/password/change" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "password=NewSecurePassword123"

Parameters:

  • password: New password (8-32 chars, must contain letters + numbers) (required)
Reset Password to Default

Endpoint: POST /api/password/reset

cURL Example - Reset Password
curl -X POST "http://192.168.4.1/api/password/reset"
Get Password Status

Endpoint: GET /api/password/status

cURL Example - Password Status
curl -X GET "http://192.168.4.1/api/password/status"

router Gateway Management API

Get Gateway Status

Endpoint: GET /api/gateway/status

Description: Get current internet gateway configuration and status.

cURL Example - Gateway Status
curl -X GET "http://192.168.4.1/api/gateway/status"
Save Gateway Configuration

Endpoint: POST /api/gateway/save

Description: Save internet gateway credentials. Gateway credentials persist across reboots.

cURL Example - Save Gateway (Dogecoin Core)
curl -X POST "http://192.168.4.1/api/gateway/save" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "type=core&ip=192.168.1.100&port=22555&username=myuser&password=mypass"
cURL Example - Save Gateway (Custom)
curl -X POST "http://192.168.4.1/api/gateway/save" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "type=custom&ip=192.168.1.100&port=8080&endpoint=/api/push/tx"

Parameters:

  • type: Gateway type - core, dogebox, wallet, or custom (required)
  • ip: Gateway IP address (required)
  • port: Gateway port (required)
  • username: RPC username (for Core gateway) (optional)
  • password: RPC password (for Core gateway) (optional)
  • endpoint: Custom endpoint path (for custom gateway) (optional)
Get Gateway Configuration

Endpoint: GET /api/gateway/config

cURL Example - Get Gateway Config
curl -X GET "http://192.168.4.1/api/gateway/config"
Set Gateway Configuration

Endpoint: POST /api/gateway/config

cURL Example - Set Gateway Config
curl -X POST "http://192.168.4.1/api/gateway/config" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "type=core&ip=192.168.1.100&port=22555&username=user&password=pass"
Test Gateway Connection

Endpoint: POST /api/gateway/test

cURL Example - Test Gateway
curl -X POST "http://192.168.4.1/api/gateway/test" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "url=http://192.168.1.100:22555"
Clear Gateway Configuration

Endpoint: POST /api/gateway/clear

cURL Example - Clear Gateway
curl -X POST "http://192.168.4.1/api/gateway/clear"
Get Gateway Debug Info

Endpoint: GET /api/gateway/debug

cURL Example - Gateway Debug
curl -X GET "http://192.168.4.1/api/gateway/debug"
Load Gateway Configuration

Endpoint: GET /api/gateway/load

cURL Example - Load Gateway
curl -X GET "http://192.168.4.1/api/gateway/load"

code JSON-RPC API

Send JSON-RPC Request

Endpoint: POST /api/jsonrpc

Description: Send a JSON-RPC request directly to Dogecoin Core nodes using standard JSON-RPC protocol.

cURL Example - JSON-RPC
curl -X POST "http://192.168.4.1/api/jsonrpc" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "transaction=0100000001...&url=http://192.168.1.100:22555&rpcuser=myuser&rpcpass=mypass"

Parameters:

  • transaction: Signed transaction hex string (required)
  • url: Dogecoin Core RPC URL (required)
  • rpcuser: RPC username (required)
  • rpcpass: RPC password (required)

Response (Success):

JSON-RPC Success Response
{
  "success": true,
  "action": "jsonrpc_send",
  "message": "JSON-RPC call sent to Dogecoin Core",
  "gateway": "http://192.168.1.100:22555",
  "parsed_response": "{\"success\":true,\"transaction_id\":\"abc123...\"}"
}

Response (Error):

JSON-RPC Error Response
{
  "success": true,
  "action": "jsonrpc_send",
  "message": "JSON-RPC call sent to Dogecoin Core",
  "gateway": "http://192.168.1.100:22555",
  "parsed_response": "{\"success\":false,\"error\":\"transaction already in block chain\"}"
}
Send RPC Request

Endpoint: POST /api/rpc

Description: Send a generic RPC request to the configured gateway.

cURL Example - RPC
curl -X POST "http://192.168.4.1/api/rpc" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "rpc_body={\"jsonrpc\":\"1.0\",\"id\":\"1\",\"method\":\"getinfo\",\"params\":[]}"

Parameters:

  • rpc_body: JSON-RPC request body (required)

monitoring Monitoring & Logging API

Get Real-Time Logs

Endpoint: GET /api/logs

Description: Get system logs in JSON format. Logs include LoRa activity, WiFi events, API calls, and transaction processing.

cURL Example - Get Logs
curl -X GET "http://192.168.4.1/api/logs"
Get Logs as Plain Text

Endpoint: GET /api/logs/text

cURL Example - Get Logs Text
curl -X GET "http://192.168.4.1/api/logs/text"
Send Logs via LoRa

Endpoint: POST /api/logs/send

Description: Send current system logs to another RadioDoge device via LoRa for remote monitoring.

cURL Example - Send Logs
curl -X POST "http://192.168.4.1/api/logs/send" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "address=10.1.2&type=logs&logs=log_content"

Parameters:

  • address: Target address (e.g., "10.1.2") (required)
  • type: Message type - logs (required)
  • logs: Log content to send (required)
Get Queue Status

Endpoint: GET /api/queue/status

Description: View request queue status and pending requests. The queue system processes requests sequentially and waits for confirmations.

cURL Example - Queue Status
curl -X GET "http://192.168.4.1/api/queue/status"
Get Multipart Status

Endpoint: GET /api/multipart/status

Description: View active multipart transmission sessions. Large transactions (>255 bytes) are automatically split into multiple packets.

cURL Example - Multipart Status
curl -X GET "http://192.168.4.1/api/multipart/status"

router Internet Bridge API

Enable Internet Bridge

Endpoint: POST /api/bridge/enable

Description: Enable internet bridge to share your internet connection with devices connected to the RadioDoge WiFi network.

cURL Example - Enable Bridge
curl -X POST "http://192.168.4.1/api/bridge/enable"
Disable Internet Bridge

Endpoint: POST /api/bridge/disable

cURL Example - Disable Bridge
curl -X POST "http://192.168.4.1/api/bridge/disable"
Get Bridge Status

Endpoint: GET /api/bridge/status

cURL Example - Bridge Status
curl -X GET "http://192.168.4.1/api/bridge/status"

Response Example:

Bridge Status Response
{
  "success": true,
  "timestamp": 1234567890,
  "bridge": {
    "enabled": true,
    "internet_connected": true,
    "ap_gateway": "192.168.4.1",
    "ap_subnet": "255.255.255.0",
    "internet_ip": "192.168.1.100",
    "internet_ssid": "YourWiFi"
  }
}
HTTP Proxy

Endpoint: GET /proxy?url=WEBSITE

Description: Access websites through the RadioDoge device's internet connection via HTTP proxy.

cURL Example - HTTP Proxy
curl "http://192.168.4.1/proxy?url=google.com"
curl "http://192.168.4.1/proxy?url=https://github.com"
curl "http://192.168.4.1/proxy?url=example.com"

account_balance_wallet Wallet API

Generate Wallet

Endpoint: GET /api/wallet/generate

Description: Generate a new Dogecoin wallet using libdogecoin. Requires libdogecoin.js to be loaded.

cURL Example - Generate Wallet
curl -X GET "http://192.168.4.1/api/wallet/generate"

settings Configuration API

Clear LoRa Configuration

Endpoint: POST /api/lora/clear

cURL Example - Clear LoRa
curl -X POST "http://192.168.4.1/api/lora/clear"

Complete API Reference

All available API endpoints:

Endpoint Method Description
/api/ping GET, POST Test connectivity between devices
/api/message GET, POST Send text message via LoRa
/api/transaction GET, POST Send Dogecoin transaction via LoRa
/api/transaction/send POST Send transaction to stored gateway
/api/broadcast GET, POST Broadcast message to all devices
/api/status GET Get device status
/api/address GET, POST Get or set LoRa network address
/api/wifi GET, POST Get WiFi status
/api/wifi/connect POST Connect to internet WiFi
/api/wifi/disconnect POST Disconnect from internet WiFi
/api/wifi/clear POST Clear stored WiFi credentials
/api/password/change POST Change AP password
/api/password/reset POST Reset password to default
/api/password/status GET Get password status
/api/gateway POST Send transaction to internet gateway
/api/gateway/status GET Get gateway status
/api/gateway/save POST Save gateway credentials
/api/gateway/clear POST Clear gateway credentials
/api/gateway/test POST Test gateway connection
/api/gateway/debug GET Get gateway debug info
/api/gateway/load GET Load gateway config
/api/gateway/config GET, POST Get or set gateway config
/api/rpc POST Send RPC request
/api/jsonrpc POST Send JSON-RPC to Dogecoin Core
/api/logs GET Get real-time system logs
/api/logs/text GET Get logs as plain text
/api/logs/send POST Send logs to other devices via LoRa
/api/queue/status GET Get request queue status
/api/multipart/status GET Get active multipart sessions
/api/bridge/enable POST Enable internet bridge
/api/bridge/disable POST Disable internet bridge
/api/bridge/status GET Get bridge status
/api/lora/clear POST Clear LoRa configuration
/api/wallet/generate GET Generate Dogecoin wallet
/proxy GET HTTP proxy for internet access

JavaScript Examples

Broadcast Transaction (Recommended)
JavaScript - Broadcast Transaction
async function broadcastDogecoinTransaction(signedTx) {
  const response = await fetch('http://192.168.4.1/api/broadcast', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: `type=transaction&priority=normal&message=${signedTx}`
  });
  
  const result = await response.json();
  console.log('Transaction broadcasted to entire RadioDoge network!', result);
  
  // The transaction will automatically:
  // 1. Spread through the mesh network
  // 2. Find a device with internet connectivity
  // 3. Forward to the Dogecoin blockchain
  // 4. Send the response back to you
  return result;
}
Send Direct Transaction
JavaScript - Send Transaction
async function sendDogecoinTransaction(signedTx, targetAddress) {
  const response = await fetch('http://192.168.4.1/api/transaction', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: `address=${targetAddress}&type=signed&data=${signedTx}`
  });
  
  const result = await response.json();
  
  if (result.internet_forwarded) {
    const internetResult = JSON.parse(result.internet_response);
    if (internetResult.success) {
      console.log('Transaction ID:', internetResult.transaction_id);
    } else {
      console.error('Error:', internetResult.error);
    }
  }
  
  return result;
}
Send Transaction to Gateway
JavaScript - Send to Gateway
async function sendTransactionToGateway(signedTx) {
  const response = await fetch('http://192.168.4.1/api/transaction/send', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: `transaction=${signedTx}`
  });
  
  const result = await response.json();
  console.log('Gateway Response:', result);
  return result;
}
Get Device Status
JavaScript - Get Status
async function getDeviceStatus() {
  const response = await fetch('http://192.168.4.1/api/status');
  const status = await response.json();
  console.log('Device Status:', status);
  return status;
}
Change Password
JavaScript - Change Password
async function changePassword(newPassword) {
  const response = await fetch('http://192.168.4.1/api/password/change', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: `password=${encodeURIComponent(newPassword)}`
  });
  
  const result = await response.json();
  console.log('Password changed:', result);
  return result;
}
Internet Bridge Examples
JavaScript - Internet Bridge
// Enable internet bridge
async function enableBridge() {
  const response = await fetch('http://192.168.4.1/api/bridge/enable', {
    method: 'POST'
  });
  const result = await response.json();
  console.log('Bridge Status:', result);
  return result;
}

// Get bridge status
async function getBridgeStatus() {
  const response = await fetch('http://192.168.4.1/api/bridge/status');
  const status = await response.json();
  console.log('Bridge Status:', status);
  return status;
}

// Access website via proxy
async function accessWebsite(url) {
  const proxyUrl = `http://192.168.4.1/proxy?url=${encodeURIComponent(url)}`;
  window.open(proxyUrl, '_blank');
}

Real-World Use Cases

Example 1: Remote Village Payment

Scenario: Send 100 DOGE from village A to village B (no internet in village A)

Steps:

  1. Create signed transaction in village A (with internet)
  2. Send via RadioDoge to village B device (address 10.1.2)
  3. Village B device has internet gateway configured
  4. Transaction automatically broadcasts to Dogecoin network
  5. Both devices receive transaction ID confirmation
API Call Example
curl -X POST "http://192.168.4.1/api/transaction" \
  -d "address=10.1.2&type=signed&data=0100000001..."
Example 2: Emergency Internet Broadcast

Scenario: You have internet but want to use RadioDoge's gateway for reliability

Steps:

  1. Configure Dogecoin Core gateway (192.168.1.100:22555)
  2. Save RPC credentials (username/password)
  3. Send transaction directly to gateway
  4. Get immediate transaction ID or error message
API Call Example
curl -X POST "http://192.168.4.1/api/transaction/send" \
  -d "transaction=0100000001..."

Important Notes

  • Large Transactions: Transactions larger than 255 bytes automatically use multipart packets for reliable transmission
  • Request Queuing: The system processes requests sequentially and waits for confirmations (15s timeout for confirmations, 30s for queued requests)
  • Gateway Forwarding: If a receiving device has an internet gateway configured, transactions are automatically forwarded to the Dogecoin network
  • Response Format: All API responses include success, action, message, and relevant data fields
  • Error Handling: Check the success field and parse internet_response for detailed error messages when using gateways

menu_book Usage Guide

Basic Operations

For detailed usage instructions, refer to the Firmware Usage Guide above, which covers the built-in web interface. The firmware provides comprehensive documentation and controls through its web interface.

Quick Start

  1. Connect to device WiFi network
  2. Open web browser to http://192.168.4.1
  3. Follow the on-screen instructions in the web interface
  4. Configure your node settings
  5. Set up your wallet
  6. Connect to a hub and start transacting!

hub How It Works?

How it Works?

RadioDoge is a decentralized communication and data transmission network that relies on a combination of radio frequency technologies and blockchain.

  1. Blockchain on the Internet: RadioDoge operates within a blockchain network that can be accessed via the regular internet.
  2. Main Hubs (A): These are primary network access points, located in various regions such as North America and South America. These hubs have direct internet connectivity, with their main access via services like Starlink, making them resilient to internet outages.
  3. Backhaul Connections: To reach these main hubs, there is a network of backhaul connections using radio frequency technologies. This includes HF (High Frequency)/shortwave, LoRa (Long Range), or VHF (Very High Frequency) point-to-point links. Backhaul connections ensure that even regions without direct internet access can still connect to the blockchain via the main hubs.
  4. Regional Hubs (B): These hubs are connected to the main hubs (A) via the backhaul network. They host Simplified Payment Verification (SPV) and data libraries (Lib) and serve as intermediaries for areas without direct internet connectivity. The data is relayed from the main hubs to the regional hubs.
  5. Local and Short-Range Connectivity: Community hubs and ShibeStation endpoints, which may not have direct internet access, can connect to regional hubs or other hubs using technologies like LoRa, VHF/UHF, WiFi, PSK, and AX.25. These connections use various modulation methods, including LoRa for long-range, low-power links and HF for long-distance, high-power links.
  6. Data Protocol: Regardless of the method used for the radio transmission (LoRa, HF, FM), the data protocol remains consistent. LoRa and VARA HF are described as "containers" or pipes for the data, with each having its strengths - LoRa for local, low-power links and HF for long-distance, high-power links.
  7. Addressing: The addressing scheme is hierarchical. Main hubs (A) have addresses like 10.0.1 in North America and 11.0.1 in South America. Regional hubs (B) have addresses like 10.1.1 in North America and 11.1.1 in South America. Community hubs and ShibeStation endpoints have their own addresses based on their location. For example, community hubs in Colorado may have addresses like 10.2.1, while ShibeStation endpoints in Colorado may have addresses like 10.2.58 or 10.1.35.

In summary, RadioDoge is a decentralized communication network that uses blockchain technology and a combination of radio frequency technologies to ensure connectivity in regions with limited or no internet access. It employs a hierarchy of hubs, each with its addressing scheme, to relay data and maintain connectivity even in areas where direct internet access is challenging.

radio First RadioDoge Transaction

On April 22, 2022, a groundbreaking event occurred in the world of Dogecoin as the first-ever DOGE transaction was successfully transmitted via radio using the innovative "Radio Doge" protocol. This historic milestone was achieved with the assistance of the global Starlink satellite network.

The transaction involved the sending of 4.2069 Dogecoin tokens, originating from BudZ, and covered a remarkable distance of 100 miles. The operation was orchestrated by Dogecoin developer Michi Lumin, who shared the news via X.

Michi Lumin's tweet highlighted the simplicity and effectiveness of the endeavor, which utilized libdogecoin, radio transmission technology, and relied on Starlink for final execution on the Dogecoin blockchain.

Notably, @tjstebbing and @KBluezr, positioned 810 miles away, played a crucial role in listening and witnessing this historic moment. Their involvement underscored the significance of Radio Doge in expanding Dogecoin's accessibility to areas beyond the reach of traditional internet infrastructure.

Sources:
https://x.com/michilumin/status/1517373307275816962
https://x.com/tjstebbing/status/1517374295739039744

First RadioDoge Transaction

play_circle RadioDoge Demo

Radio Doge Demo

Setting Up the Hub

Using RadioDoge pre-release 10.0.1, we set up the hub on just a Windows PC in a friend's office and put the Hub dongle with a decent antenna, sitting it on a shelf indoors.

Remote Node Setup

We took the Dogecoin Node setup to a park far away, and we just put it on top of an overturned box so it wasn't in the grass.

Radio Doge Demo
Radio Doge Demo

Solar Power

Solar panel powering the whole setup (there's a USB PD battery pack there too that gets charged by the solar panel.), running all disconnected now.

System Initialization

Starting up RadioDoge. It runs a few tests just to make sure everything (LibDogecoin, LoRa, Radio etc) are working.

Radio Doge Demo
Radio Doge Demo

Hub Discovery

So then we hit enter, and wait at the menu, until we see a hub. This is what people would do in an area, RadioDoge will just show which hubs are beaconing in range. Here, a hub broadcast from the hub we had set up in the office, is received, and it shows on the OLED of the LoRa dongle.

Hub Address Display

And it shows up on the terminal too. Now we know that there's an active hub in the area at Address 10.0.1.

Radio Doge Demo
Radio Doge Demo

Selecting Source Address

Just to make life easier there's an 'address book', (this is just the 'demo addressbook') - but we're choosing the source address (and wallet). So for this demo we just pick addressbook entry #3, "DGYr..." as the source address. (anyone can just enter one but it needs to enter in a private key as well to make it a source. In this case, the pub/priv keypair is saved in an encrypted and password protected file on the node. Since the node, using LibDogecoin, forms the transactions completely - the hub does NOT need to ever see the private key.)

Selecting Destination Address

Then we pick a destination address. Also from the addressbook but also can take direct entry. (Or QR code, etc. No private key needed for the destination address.)

Radio Doge Demo
Radio Doge Demo

Destination Selected

Picking Addressbook entry #1, "D6JQ...." as the receiver. (of course again it can be any address)

Registering with Hub

Registering a source address/wallet with the hub. It's transmitted encrypted, over the air, but the registration just allows you to check your balance live; which the hub updates and sends to you. It's encrypted with a PIN, but all this does or needs to do is make sure other people can't read your balance, since some people don't like that. Still zero possibility of fund movement or malleability. Just for privacy-of-balance.

Radio Doge Demo
Radio Doge Demo

Ready to Send

If you decide to move to another hub, too, you can unregister and the hub deletes all records of your addresses and balances. Which are encrypted-at-rest anyways.

So we've registered our node and a watch /source/balance address (which we have the keys to on our little pi box) - on the hub. (Just another reminder that the hub does NOT have the private key and it NEVER gets transmitted over the air, even encrypted.) And we've picked a destination address that we want to send to. So now we can pick #4, send dogecoin.

Sending Transaction

We now will send 12 dogecoin and it reverifies the from-and-to addresses that you're working with.

We hit enter and it creates the transaction and sends it. Showing the raw transaction here that's about to be sent. It's split into 3 burst packets (which have forward error correction - they're all or nothing; in other words, the message cannot get 'mangled', it either has correctable erasures or it's no go.) Hub sends an ACK as well that it received it

Radio Doge Demo
Radio Doge Demo

Hub Processing

Back at the Office: on the Windows PC (the hub), running LibDogecoin's SPV node, transmits the transaction to the Blockchain and gathers some data on where it's seen, to verify that it went through. It then sends a response:

Note: the hub can be connected directly to the internet OR it can use the HF Long Haul to forward the message to another hub that has access, if it has none. That was the experiment we did last year. It works similarly to the node to hub transaction send, just over an HF/shortwave link. We did not have a distant HF/shortwave setup here because we'd kinda have to fly somewhere to do it, but thats in the plans. to set some up permanently (the tower, and another remote/distant location).

Transaction Confirmation

Back at the portable/remote node: here we see a message from 10.0.1 (the hub) to the remote node (10.0.2); giving confirmation and the TXID. (of course the hex data could be hidden, we just have it there for debug) - but this also shows that the system can be used to send general purpose messages between nodes. But, this is basically the 'receipt' with the TXID that the doge has been sent.

Don't trust, verify!
4d5c88d3b791df1ffa445034fbda4d8f0dec0efed445a38e64e64e6ed2d4a15f

The Dogecoin address DGYr.. sends 12 Doge to D6JQ... Dogecoin address from its balance of 900 Doge*.

Radio Doge Demo
Radio Doge Demo

Summary

This demonstration shows the complete RadioDoge transaction flow from node setup to transaction confirmation, all without requiring traditional internet infrastructure.

map RadioDoge Interactive Map

info Status

RadioDoge is a fully working prototype leveraging LoRA, VaraHF radio and the Starlink network. We are looking for partners or even regular shibes in remote areas who would be interested in establishing regional hubs, and working with local communities to demonstrate and develop the technology for their needs.

We are looking to collaborate with NGOs, Governments or anyone who sees the potential for equipping farmers, teachers, tradespeople in remote or under facilitated areas with financial tools to engage with the top of the supply chains and not be exploited by greedy middlemen.

Please contact Michi Lumin via the forum: forum.dogecoin.org if you want to get involved.