React-based Android application for remote control of the ATS Mini radio receiver via USB Serial and Bluetooth LE.
- Dual Connection Mode: USB Serial or Bluetooth LE
- Frequency Control: Precise tuning with +/- buttons and long-press support
- Band Management: Quick navigation between frequency bands
- Operating Modes: AM, FM, SSB mode switching
- Bandwidth Control: Adjust receiver bandwidth
- Step Control: Configure tuning step
- AGC/Attenuator: Automatic gain control and attenuator
- Volume Control: Audio level adjustment with visual indicator
- Backlight Control: Adjust receiver screen brightness
- Menu Access: Direct access to receiver menu
- Real-time Monitoring: RSSI, SNR, battery voltage display
- React 19: JavaScript UI framework
- Vite 7: Build tool and bundler
- Capacitor 7: Cross-platform native framework
- TailwindCSS: CSS framework
- Capacitor Serial Plugin: USB Serial communication
- Capacitor Bluetooth LE Plugin: Bluetooth LE communication
- Node.js 18+ - JavaScript runtime
- Java JDK 17 - Included in Android Studio
- Android Studio - With Android SDK
- Git - Version control
-
Install Node.js
# macOS (using Homebrew) brew install node # Ubuntu/Debian sudo apt install nodejs npm # Verify installation node --version # Should be 18+ npm --version
-
Install Android Studio
- Download from https://developer.android.com/studio
- Install Android SDK (API 33 recommended)
- Configure environment variables:
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS export ANDROID_HOME=$HOME/Android/Sdk # Linux export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/platform-tools
-
Clone the Repository
git clone https://github.com/rodillo69/ATS-Mini-Companion.git cd ATS-Mini-Companion/app -
Install Dependencies
npm install
-
Build Web Assets
npm run build
-
Sync with Android
npx cap sync android
-
Open in Android Studio
npx cap open android
-
Build APK
- In Android Studio: Build > Build Bundle(s) / APK(s) > Build APK(s)
- Or via command line:
cd android ./gradlew assembleDebug - Output:
android/app/build/outputs/apk/debug/app-debug.apk
# Start Vite dev server
npm run dev
# In another terminal, run on Android device
npx cap run androidapp/
├── src/
│ ├── components/ # React components
│ │ ├── ConnectionTab.jsx
│ │ ├── ControlTab.jsx
│ │ ├── DebugTab.jsx
│ │ └── Header.jsx
│ ├── services/ # Communication services
│ │ ├── serialService.js # USB Serial
│ │ └── bluetoothService.js # Bluetooth LE
│ ├── App.jsx # Main app component
│ ├── main.jsx # Entry point
│ └── index.css # Global styles
├── android/ # Native Android project
│ ├── app/
│ │ └── build.gradle # App build configuration
│ └── build.gradle # Project build configuration
├── public/ # Static assets
├── package.json # Node dependencies
├── capacitor.config.json # Capacitor configuration
├── vite.config.js # Vite build configuration
└── tailwind.config.js # Tailwind CSS configuration
- USB Serial communication
- Command queue management
- Automatic reconnection
- Device discovery
- Bluetooth LE communication
- Nordic UART Service implementation
- Connection state management
- Data streaming
{
"appId": "com.ea5iyr.atscompanion",
"appName": "ATS Companion",
"webDir": "dist",
"android": {
"allowMixedContent": true
}
}<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-
Update Version
# Edit package.json and android/app/build.gradle -
Build Release APK
cd android ./gradlew assembleRelease -
Sign APK (Optional)
# Generate keystore keytool -genkey -v -keystore release-key.keystore \ -alias ats-companion -keyalg RSA -keysize 2048 -validity 10000 # Sign APK jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \ -keystore release-key.keystore \ app/build/outputs/apk/release/app-release-unsigned.apk \ ats-companion # Align APK zipalign -v 4 app-release-unsigned.apk ATS-Mini-Companion.apk
Problem: ANDROID_HOME not set
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS
export ANDROID_HOME=$HOME/Android/Sdk # LinuxProblem: Gradle build failed
cd android
./gradlew clean
./gradlew buildProblem: capacitor/core not found
npm install @capacitor/core @capacitor/cli --save
npx cap syncProblem: USB device not detected
- Enable USB debugging on Android device
- Grant USB permissions when prompted
- Check USB OTG cable
Problem: Bluetooth not connecting
- Grant location permissions (required for BLE on Android)
- Enable Bluetooth on device
- Ensure ATS Mini has Bluetooth firmware v1.4+
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Commit changes:
git commit -am 'Add feature' - Push to branch:
git push origin feature-name - Open a Pull Request
MIT License - See LICENSE file
Aplicación Android basada en React para control remoto del receptor de radio ATS Mini vía USB Serial y Bluetooth LE.
- Modo de Conexión Dual: USB Serial o Bluetooth LE
- Control de Frecuencia: Sintonización precisa con botones +/- y pulsación larga
- Gestión de Bandas: Navegación rápida entre bandas de frecuencia
- Modos de Operación: Cambio entre modos AM, FM, SSB
- Control de Ancho de Banda: Ajuste del ancho de banda del receptor
- Control de Paso: Configuración del paso de sintonización
- AGC/Atenuador: Control de ganancia automática y atenuador
- Control de Volumen: Ajuste del nivel de audio con indicador visual
- Control de Retroiluminación: Ajuste del brillo de la pantalla del receptor
- Acceso al Menú: Acceso directo al menú del receptor
- Monitoreo en Tiempo Real: Visualización de RSSI, SNR, voltaje de batería
- React 19: Framework JavaScript de UI
- Vite 7: Herramienta de construcción
- Capacitor 7: Framework nativo multiplataforma
- TailwindCSS: Framework CSS
- Capacitor Serial Plugin: Comunicación USB Serial
- Capacitor Bluetooth LE Plugin: Comunicación Bluetooth LE
- Node.js 18+ - Runtime de JavaScript
- Java JDK 17 - Incluido en Android Studio
- Android Studio - Con Android SDK
- Git - Control de versiones
-
Instalar Node.js
# macOS (usando Homebrew) brew install node # Ubuntu/Debian sudo apt install nodejs npm # Verificar instalación node --version # Debe ser 18+ npm --version
-
Instalar Android Studio
- Descargar desde https://developer.android.com/studio
- Instalar Android SDK (API 33 recomendado)
- Configurar variables de entorno:
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS export ANDROID_HOME=$HOME/Android/Sdk # Linux export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/platform-tools
-
Clonar el Repositorio
git clone https://github.com/rodillo69/ATS-Mini-Companion.git cd ATS-Mini-Companion/app -
Instalar Dependencias
npm install
-
Compilar Assets Web
npm run build
-
Sincronizar con Android
npx cap sync android
-
Abrir en Android Studio
npx cap open android
-
Compilar APK
- En Android Studio: Build > Build Bundle(s) / APK(s) > Build APK(s)
- O vía línea de comandos:
cd android ./gradlew assembleDebug - Salida:
android/app/build/outputs/apk/debug/app-debug.apk
# Iniciar servidor de desarrollo Vite
npm run dev
# En otra terminal, ejecutar en dispositivo Android
npx cap run androidapp/
├── src/
│ ├── components/ # Componentes React
│ │ ├── ConnectionTab.jsx
│ │ ├── ControlTab.jsx
│ │ ├── DebugTab.jsx
│ │ └── Header.jsx
│ ├── services/ # Servicios de comunicación
│ │ ├── serialService.js # USB Serial
│ │ └── bluetoothService.js # Bluetooth LE
│ ├── App.jsx # Componente principal
│ ├── main.jsx # Punto de entrada
│ └── index.css # Estilos globales
├── android/ # Proyecto Android nativo
│ ├── app/
│ │ └── build.gradle # Configuración de compilación
│ └── build.gradle # Configuración del proyecto
├── public/ # Assets estáticos
├── package.json # Dependencias Node
├── capacitor.config.json # Configuración Capacitor
├── vite.config.js # Configuración Vite
└── tailwind.config.js # Configuración Tailwind CSS
- Comunicación USB Serial
- Gestión de cola de comandos
- Reconexión automática
- Descubrimiento de dispositivos
- Comunicación Bluetooth LE
- Implementación Nordic UART Service
- Gestión de estado de conexión
- Streaming de datos
{
"appId": "com.ea5iyr.atscompanion",
"appName": "ATS Companion",
"webDir": "dist",
"android": {
"allowMixedContent": true
}
}<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-
Actualizar Versión
# Editar package.json y android/app/build.gradle -
Compilar APK Release
cd android ./gradlew assembleRelease -
Firmar APK (Opcional)
# Generar keystore keytool -genkey -v -keystore release-key.keystore \ -alias ats-companion -keyalg RSA -keysize 2048 -validity 10000 # Firmar APK jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \ -keystore release-key.keystore \ app/build/outputs/apk/release/app-release-unsigned.apk \ ats-companion # Alinear APK zipalign -v 4 app-release-unsigned.apk ATS-Mini-Companion.apk
Problema: ANDROID_HOME not set
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS
export ANDROID_HOME=$HOME/Android/Sdk # LinuxProblema: Gradle build failed
cd android
./gradlew clean
./gradlew buildProblema: capacitor/core not found
npm install @capacitor/core @capacitor/cli --save
npx cap syncProblema: Dispositivo USB no detectado
- Habilitar depuración USB en dispositivo Android
- Otorgar permisos USB cuando se soliciten
- Verificar cable USB OTG
Problema: Bluetooth no conecta
- Otorgar permisos de ubicación (requerido para BLE en Android)
- Habilitar Bluetooth en el dispositivo
- Asegurar que ATS Mini tiene firmware Bluetooth v1.4+
- Hacer fork del repositorio
- Crear rama de funcionalidad:
git checkout -b nombre-funcionalidad - Hacer commit de cambios:
git commit -am 'Agregar funcionalidad' - Push a la rama:
git push origin nombre-funcionalidad - Abrir un Pull Request
Licencia MIT - Ver archivo LICENSE