SoifGo Android Hardware Controller Logo SoifGo

Turn your Android phone into a custom hardware controller.
Bluetooth • MQTT • HTML/JS WebView • Phone Sensors

Build controllers and dashboards for Arduino, ESP32, ESP8266 and HC-05 — from simple buttons to fully custom HTML/CSS/JavaScript interfaces.
📡 Bluetooth SPP ☁️ MQTT 🌐 HTTP 🎨 HTML / CSS / JS 📱 Sensors 📊 Graphs & Gauges
Download SoifGo for Android
💡 Your idea Describe the controller you want
🎨 HTML / JS Build the interface you need
📱 SoifGo Run it inside Android WebView
⚙️ Hardware Control Arduino, ESP32 or other devices
Build → Paste → Run → Test. Bluetooth and phone-sensor projects can work locally without an internet connection.
Free Android app Open-source project Bluetooth works offline Custom WebView interfaces

Download SoifGo — Bluetooth Controller App for Android

Security Verified
This APK has been scanned by 65+ global security vendors on VirusTotal.
No threats detected.
View Full VirusTotal Report

See What SoifGo Can Do in Seconds

Motion Controller
LEFT
Bluetooth

📱 Phone movement → Bluetooth command

With SoifGo's HTML/JavaScript WebView interface, a custom page can read phone movement data and send commands to a Bluetooth device.

Tilt left → LEFT
Tilt right → RIGHT
Tilt forward → FRONT
Tilt backward → REVERSE

This same approach can be used for robot controllers, custom gamepads, dashboards, automation panels and other hardware projects.

Open the HTML + Bluetooth + Sensors tutorial →

What is SoifGo?

SoifGo is a free, open-source Android app that turns your smartphone into a professional IoT controller. It supports multiple communication protocols, a visual UI builder, and advanced features like real-time graphs, circular gauges, alarms, and sensor integration. For developers who want complete freedom, its HTML/JavaScript WebView layer can turn a simple page into a custom hardware controller.

Key Capabilities

Example: Build a robot with Arduino + HC-05, create directional buttons and speed control, or use phone movement to send commands. You can also build an MQTT dashboard for home automation or a custom HTML interface for a specialized machine. SoifGo gives you the communication layer and the tools — you build the experience.

Supported Languages

English · Spanish · Chinese · French · German · Japanese · Russian · Arabic · Persian · Italian · Hindi · Turkish · Korean · Portuguese · Hebrew · Kurdish · Urdu · Bengali · Indonesian · Tamil · Thai · Swahili

SoifGo Tutorials

New to SoifGo?

Start with the Complete User Guide — a comprehensive 11-chapter manual covering everything from installation to advanced features like graphs, sensors, and automation.

Step-by-step guides to get the most out of SoifGo.

Getting Started

Communication

Custom UI & Effects

Advanced & Tools

Frequently Asked Questions

The Golden Feature: WebView + Bluetooth + Sensors

This is what makes SoifGo truly powerful! You can build a fully custom HTML page that simultaneously:

📤 Send BluetoothSend commands to your device
📥 Receive BluetoothDisplay incoming data in real-time
💡 Light SensorRead ambient light intensity
📳 Movement SensorDetect X/Y acceleration
🧲 Magneto SensorMeasure magnetic field
🎨 Custom UIFull HTML/CSS/JS freedom

👉 Ready to build? Start with the Complete HTML + Bluetooth + Sensors Tutorial Includes ready-to-use code examples for send, receive, and all 3 sensors

Getting Started

What exactly is SoifGo, and who is it for?

SoifGo is an Android app for makers, engineers, and tech enthusiasts – its main focus is on electronics and device communication. But with its WebView capability and web app support, it's no longer limited to just that field – you can easily build or run any custom app you want, in any area you like.

What hardware does it support?

Any device that uses Bluetooth SPP (HC-05, HC-06, Bluetooth shields), MQTT, or HTTP REST APIs. This includes ESP32, ESP8266, Arduino (with BT modules), Raspberry Pi (with MQTT), and even GSM modules.

Do I need an internet connection?

No for Bluetooth — it works offline. Yes for MQTT and HTTP (you need Wi-Fi or mobile data).

⚡ The Golden Feature: WebView + Bluetooth + Sensors

🔑 How do I build a complete HTML page with Bluetooth Send/Receive AND Sensors?

This is the most powerful feature of SoifGo. You create an offline HTML file with JavaScript and run it inside WebView. Through window.soifgo.CallSub(), you get access to ALL of SoifGo's capabilities:

📤 Send Bluetooth: window.soifgo.CallSub('html_bluetooth_rx', true, 'text')
📥 Receive Bluetooth: html_bluetooth_tx(data) function
💡 Activate Light: window.soifgo.CallSub('sensor_light')
📳 Activate Movement: window.soifgo.CallSub('sensor_move')
🧲 Activate Magneto: window.soifgo.CallSub('sensor_magno')
📊 Receive Sensors: html_sensor_*(data) functions

✨ Result: A fully custom HTML/CSS/JS interface that simultaneously communicates via Bluetooth and displays real-time sensor data — all offline, all in one page.

👉 Full Tutorial with Complete Working Code

📤 How do I send data from my HTML page to Bluetooth?

It's just one line of JavaScript! Use window.soifgo.CallSub() to call SoifGo's Bluetooth send function:

// Send text to Bluetooth device
function sendData() {
    var message = document.getElementById("input").value;
    window.soifgo.CallSub('html_bluetooth_rx', true, message);
}

SoifGo receives this in its html_bluetooth_rx() Sub and forwards it to the connected Bluetooth device.

💡 Tip: You can send numbers, text, or even JSON strings!

📥 How do I receive Bluetooth data in my HTML page?

Define a global JavaScript function named html_bluetooth_tx(data). SoifGo will call it automatically whenever data arrives from Bluetooth:

// This function is called by SoifGo when Bluetooth data arrives
function html_bluetooth_tx(data) {
    document.getElementById('output').innerHTML = data;
}
window.html_bluetooth_tx = html_bluetooth_tx;  // Register it globally

You can display the data anywhere — in a div, a graph, or even trigger animations based on values.

📱 How do I activate and read phone sensors (Light, Movement, Magneto)?

Step 1: Activate each sensor with window.soifgo.CallSub():

// Activate ALL THREE sensors (best placed in window.onload)
window.soifgo.CallSub('sensor_light');   // Ambient light sensor
window.soifgo.CallSub('sensor_move');    // Accelerometer (X/Y movement)
window.soifgo.CallSub('sensor_magno');   // Magnetic field sensor

Step 2: Define receiver functions for each sensor:

// These are called by SoifGo when sensor data updates
function html_sensor_light(data)  { /* update light display */ }
function html_sensor_movex(data)  { /* update move X display */ }
function html_sensor_movey(data)  { /* update move Y display */ }
function html_sensor_magno(data)  { /* update magneto display */ }

// Register all functions globally
window.html_sensor_light = html_sensor_light;
window.html_sensor_movex = html_sensor_movex;
window.html_sensor_movey = html_sensor_movey;
window.html_sensor_magno = html_sensor_magno;

✅ Done! Your HTML page now receives real-time sensor data continuously.

🚀 Can you show me a complete working HTML example with ALL features?

Here's a minimal but complete HTML page that does everything:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bluetooth + Sensors Demo</title>
</head>
<body style="font-family:sans-serif; padding:20px; background:#0F0A1A; color:#fff;">
  <h2>⚡ Bluetooth + Sensors</h2>

  <!-- Send Section -->
  <div style="background:#1a1a2e; padding:15px; border-radius:8px; margin:10px 0;">
    <h3>📤 Send Command</h3>
    <input type="text" id="cmdInput" placeholder="Enter command..." style="padding:10px; width:70%; border-radius:6px; border:none;">
    <button onclick="sendCommand()" style="padding:10px 25px; background:#2196f3; color:white; border:none; border-radius:6px; cursor:pointer;">Send</button>
  </div>

  <!-- Receive Section -->
  <div style="background:#1a1a2e; padding:15px; border-radius:8px; margin:10px 0;">
    <h3>📥 Bluetooth Data</h3>
    <div id="btOutput" style="background:#0a0a1a; padding:15px; border-radius:6px; min-height:60px; font-family:monospace; color:#4caf50;">
      Waiting for data...
    </div>
  </div>

  <!-- Sensors Section -->
  <div style="background:#1a1a2e; padding:15px; border-radius:8px; margin:10px 0;">
    <h3>📱 Phone Sensors</h3>
    <div id="sensorLight" style="background:#0a0a1a; padding:10px; border-radius:6px; margin:5px 0; color:#ffb74d;">💡 Light: waiting...</div>
    <div id="sensorMoveX" style="background:#0a0a1a; padding:10px; border-radius:6px; margin:5px 0; color:#f06292;">📳 Move X: waiting...</div>
    <div id="sensorMoveY" style="background:#0a0a1a; padding:10px; border-radius:6px; margin:5px 0; color:#f06292;">📳 Move Y: waiting...</div>
    <div id="sensorMagneto" style="background:#0a0a1a; padding:10px; border-radius:6px; margin:5px 0; color:#ce93d8;">🧲 Magneto: waiting...</div>
  </div>

  <script>
    // ========== BLUETOOTH SEND ==========
    function sendCommand() {
      var msg = document.getElementById('cmdInput').value;
      if (msg) {
        window.soifgo.CallSub('html_bluetooth_rx', true, msg);
        document.getElementById('cmdInput').value = '';
      }
    }

    // ========== BLUETOOTH RECEIVE ==========
    function html_bluetooth_tx(data) {
      document.getElementById('btOutput').innerHTML = data;
    }
    window.html_bluetooth_tx = html_bluetooth_tx;

    // ========== SENSOR RECEIVERS ==========
    function html_sensor_light(data) {
      document.getElementById('sensorLight').innerHTML = '💡 Light: ' + data;
    }
    function html_sensor_movex(data) {
      document.getElementById('sensorMoveX').innerHTML = '📳 Move X: ' + data;
    }
    function html_sensor_movey(data) {
      document.getElementById('sensorMoveY').innerHTML = '📳 Move Y: ' + data;
    }
    function html_sensor_magno(data) {
      document.getElementById('sensorMagneto').innerHTML = '🧲 Magneto: ' + data;
    }

    window.html_sensor_light = html_sensor_light;
    window.html_sensor_movex = html_sensor_movex;
    window.html_sensor_movey = html_sensor_movey;
    window.html_sensor_magno = html_sensor_magno;

    // ========== ACTIVATE SENSORS ON LOAD ==========
    window.onload = function() {
      if (window.soifgo) {
        window.soifgo.CallSub('sensor_light');
        window.soifgo.CallSub('sensor_move');
        window.soifgo.CallSub('sensor_magno');
      }
    }
  </script>
</body>
</html>

🎯 Copy this code, save as demo.html, place it in SoifGo's folder, and run it!

👉 See the full tutorial with step-by-step explanations

💡 What can I build with this WebView + Bluetooth + Sensors feature?

The possibilities are endless! Here are some real-world examples:

  • 🤖 Robot Controller — directional buttons + speed slider + live sensor feedback
  • 📊 Data Dashboard — display temperature, humidity, RPM with custom gauges
  • 🎮 Custom Gamepad — tilt controls using accelerometer + button mapping
  • 🏠 Smart Home Panel — control lights, fans, and monitor sensors
  • 📈 Real-time Graph — plot Bluetooth data with canvas or Chart.js
  • 🔦 Light-Activated Switch — use light sensor to trigger Bluetooth commands
  • 🧭 Digital Compass — display direction using magneto sensor
  • 📱 Motion Detector — shake phone to send alerts via Bluetooth

🎨 The design is completely up to you — use any CSS framework, animations, or libraries you want!

Features & Technical Details

Can I control a robot with two-way communication?

Yes. You can send commands (like 'F', 'B', 'L', 'R') and simultaneously receive sensor data (distance, battery voltage, etc.) from your robot. The app displays incoming values on buttons or in graphs, and you can even log them to files.

Does it support real-time graphs and circular gauges?

Yes. Every button can be assigned a graph that plots incoming numeric values in real time. You can set the graph color, line width, and update interval. Additionally, you can create circular gauges (arcs) that visually represent values within a range, with adjustable start/end angles and colors.

What about alarms and notifications?

You can set numerical thresholds on received values. When a value goes above or below the threshold, the app can play an audio file, vibrate, or send an SMS. You can also customise the alarm message.

Can I view or edit G-Code files?

Yes, the app includes a built-in G-Code viewer and editor. You can load a G-Code file from the Note folder, and the app will render the toolpath with animated lines and arcs. This is useful for CNC or 3D printing monitoring.

Customisation & No-Code Design

How do I build a UI without programming?

Use the visual editor: add buttons and seek bars, then configure their properties (size, position, colour, text, behaviour) directly from the app. You can assign actions like "send Bluetooth data", "open another page", "change a seek bar value", or "execute a JavaScript function". No coding required.

🎨 Can I use HTML/CSS/JS to create a fully custom interface with Bluetooth and sensors?

Yes — and this is the most powerful feature of SoifGo! You're not limited to pre-built buttons. You can:

  • ✅ Build any design with HTML, CSS, and JavaScript
  • ✅ Access Bluetooth, MQTT, and sensors via window.soifgo.CallSub()
  • ✅ Receive Bluetooth data and display it anywhere
  • ✅ Activate light, movement, and magneto sensors and see live values
  • ✅ Use this page to control robots, display sensor data, create custom gamepads, or any other idea

Practical example: Build an HTML page with 4 directional buttons to control a robot, a slider for speed control, receive ultrasonic sensor data via Bluetooth, and display it on screen — all in one simple HTML file.

👉 Step-by-step tutorial with ready-to-use code

What kind of effects can I apply to buttons?

You can add rotation, circular gauges, max-size scaling, colour shifts based on input values, and even custom move animations. There's also a "scrip" (formula) feature that lets you apply mathematical expressions (e.g., val/2 + 10) to a button's displayed value.

Can I organise multiple projects?

Yes. SoifGo supports folders and pages. Each folder can contain multiple pages, and each page can have its own set of buttons, seek bars, and settings. You can load and save pages at any time, and even create a startup sequence that automatically triggers buttons on load.

Security & Installation

Is the APK safe to install?

Yes. The APK has been scanned by 65+ antivirus engines on VirusTotal with zero threats detected. The project is fully open-source, so the code is transparent and auditable. View the full security report.

Is SoifGo available on Google Play?

Currently, it is available as a direct APK download and on APKPure. The Google Play Store release is planned soon.

What Android version do I need?

SoifGo supports Android 5.0 (Lollipop) and above. For Bluetooth, your device must support Bluetooth 4.0+ (most modern phones do).

Can I use this WebView feature without internet?

Yes! The HTML files run locally from your device's storage. Everything — Bluetooth communication and sensor reading — works completely offline. No internet connection is required.

Contact Developer

Email: SSM20985@gmail.com · SSMQQMSS@gmail.com

💬 Join the SoifGo Forum for questions, ideas, and community support.

Connect to HC-05, create a control interface, and send commands to your hardware in seconds