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
-
Bluetooth + MQTT + HTTP
Connect via HC-05/06, ESP32, or any serial device, and use MQTT or REST API for cloud control.
-
Visual UI Builder
Add buttons, seek bars, and text displays with custom colors, sizes, and behaviors — no programming needed.
-
HTML/JS WebView
Run your own interactive HTML pages inside the app and use JavaScript to send/receive data via Bluetooth, MQTT, or sensors.
-
Real-Time Graphs & Gauges
Visualize incoming data with dynamic line graphs and circular gauges, with adjustable colors and line widths.
-
Phone Sensors & Alarms
Read light, accelerometer, and magnetometer data, and trigger alarms (audio, vibration) based on values.
-
Multi-Page & Multi-Folder
Organise your projects into pages and folders, load/save configurations, and even create startup sequences.
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
Frequently Asked Questions
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
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.