This project is designed to create a small, versatile remote control application for RC toys, styled after the familiar button layout of an Xbox controller. Built with Python and HTML, this app operates as both a desktop .NET application and a mobile application, offering seamless control over RC toys via Bluetooth, Wi-Fi, and RF communication modes.
- Xbox-Inspired Button Layout: The app mirrors the intuitive design of an Xbox controller, making it easy to control RC toys with a familiar interface.
- Cross-Platform Support:
- Desktop: Runs as a .NET application on Windows.
- Mobile: Compatible with Android and iOS devices.
- Communication Options:
- Bluetooth: For short-range, direct connections.
- Wi-Fi: For networked control over greater distances. Current draft implemented with a UDP Socket.
- RF (Radio Frequency): For robust, hardware-supported communication.
- Mode Switching: A dedicated button or UI element allows users to switch between Bluetooth, Wi-Fi, and RF modes effortlessly.
- Tech Stack:
- Python: Powers the backend logic and communication protocols.
- HTML: Crafts a responsive, visually appealing frontend interface.
To develop and run this app, you'll need:
- Python 3.x: For backend development and communication handling.
- .NET Framework: For the desktop application (Windows).
- Mobile Development Tools: Android Studio (for Android) and Xcode (for iOS).
- Communication Libraries: Specific libraries for Bluetooth (e.g., PyBluez), Wi-Fi (e.g., sockets), and RF (e.g., PySerial or hardware-specific modules).
- Frontend: The Tkinter-based interface replicates an Xbox controller layout, capturing user inputs (e.g., button presses, joystick movements) and sending them to the backend.
- Backend: Python processes these inputs and communicates with the RC toy using the selected mode (Bluetooth, Wi-Fi, or RF).
- Mode Switching: A Slider implemented on the UI updates the backend to use the chosen communication protocol dynamically.
- Camera Feed: A Resizeable Box implemented on the UI which shows the Camera Streaming (Camera integrated as part of the Server; Remote will act as the Video Stream Client).
-
Clone the Repository:
git clone https://github.com/centx842/Universal-RC-Remote.git
-
Check for current Python Version:
- First check your Python Version on Windows or Ubuntu Machine (using either 'python', 'python3', or even 'python310' in case of Ubuntu Machine)
python --version
- If Python version appears, proceed to the next step otherwise Install from Python.org.
- First check your Python Version on Windows or Ubuntu Machine (using either 'python', 'python3', or even 'python310' in case of Ubuntu Machine)
-
Creating an Environment:
- Move into your Project Folder:
cd path\to\your\project
- Create your Environment Folder within the Project Folder:
python -m venv <env_name>
- Move into your Project Folder:
-
For Windows:
<env_name>\Scripts\activate
-
For Linux/macOS:
source <env_name>/bin/activate
Once activated, upgrade the essential build tools:
pip install --upgrade pip setuptools wheel build-
Python:
pip install -r requirements.txt
(Update this file with any additional libraries as needed.)
-
.NET: Ensure the .NET SDK/Runtime is installed and available in your system PATH.
-
Mobile: Install and configure Android Studio and/or Xcode depending on your target platform.
-
Desktop:
python main.py
- Desktop: Integrate Python with .NET using tools like IronPython or subprocesses.
- Mobile: Consider frameworks like BeeWare or Kivy for Python-based mobile apps with HTML frontends.
- Communication: Test with actual RC toys to ensure compatibility across all modes.
pyinstaller --onefile --add-data "images:images" main.py📁 Add more resources later:
pyinstaller --onefile \
--add-data "images:images" \
--add-data "sounds:sounds" \
--add-data "config:config" main.pycd dist
./mainpyinstaller --onefile --add-data "images;images" main.py📁 Add more resources later:
pyinstaller --onefile `
--add-data "images;images" `
--add-data "sounds;sounds" `
--add-data "config;config" main.pycd dist
main.exeMake sure your binary is built and ready (example for Linux):
cd dist
ls
# mainRename it with version info (recommended):
mv main universal-rc-remote-v1.0-linuxOptional but best practice: Compress the file to reduce size and make upload easier:
tar -czvf universal-rc-remote-v1.0-linux.tar.gz universal-rc-remote-v1.0-linuxEach GitHub release is linked to a Git tag.
Create and push a new tag:
git tag -a v1.0 -m "First stable release with Linux binary build"
git push origin v1.0🧠 Memory trick:
“Tag = Time capsule” — it freezes your repo at that version.
-
Go to your repo → Releases tab → click “Draft a new release”
-
Choose existing tag (
v1.0) -
Fill in:
-
Release title:
Universal RC Remote v1.0 -
Description:
🎉 First public release! ✅ Features: - Linux binary build for standalone use - MQTT & Serial communication support - Modern UI using CustomTkinter 🧩 How to use: 1. Download the `.tar.gz` file 2. Extract it: tar -xzvf universal-rc-remote-v1.0-linux.tar.gz 3. Run: ./universal-rc-remote-v1.0-linux
-
-
Upload your binary file (
.tar.gzor.exe). -
Click Publish release.
We’d love your help! Please check the contributing guidelines before submitting pull requests.
This project is licensed under the MIT License.