Python library to control Arduino as HID (Keyboard/Mouse) via Serial
Project description
Arduino HID Python Controller
Description
Python library for controlling keyboard and mouse through Arduino in HID (Human Interface Device) mode. Provides complete control over input device emulation.
Prerequisites
1. Upload Arduino Sketch
Before using this library, you must upload the HID controller sketch to your Arduino:
-
Download the sketch file:
-
Open the sketch in Arduino IDE
-
Select your board type:
- Tools → Board → "Arduino Leonardo" (or "Arduino Micro")
-
Select the correct port:
- Tools → Port → (select your Arduino's port)
-
Upload the sketch:
- Click the "Upload" button or press Ctrl+U
2. Install Python Package
pip install arduino-hid-controller
3. Administrator Privileges
Some mouse functions (particularly absolute positioning) require administrator privileges:
- Windows: Right-click → "Run as Administrator"
- Linux/Mac: Use
sudo(note: this may require GUI permissions)
# Linux/Mac example
sudo python your_script.py
Quick Start
from arduino_hid_controller import HIDController, KeyboardKey, MouseButton
# Auto-connects to Arduino (make sure sketch is uploaded)
hid = HIDController()
# Keyboard examples (no admin required)
hid.keyboard.start()
hid.keyboard.write("Hello World!")
hid.keyboard.press(KeyboardKey.F12)
# Mouse examples (admin may be required for absolute positioning)
hid.mouse.start()
hid.mouse.move_absolute(500, 300) # Requires admin
hid.mouse.click(MouseButton.LEFT) # Doesn't require admin
# Cleanup
hid.keyboard.stop()
hid.mouse.stop()
Complete Documentation
HIDController Class
Main facade class for device control.
Attributes:
keyboard- KeyboardController instancemouse- MouseController instance
KeyboardController Class
Core Methods
| Method | Parameters | Returns | Description |
|---|---|---|---|
start() |
- | bool | Initialize keyboard |
stop() |
- | bool | Stop emulation |
is_started() |
- | bool | Check is started emulation |
press(key) |
key: str/KeyboardKey | bool | Press key |
release(key) |
key: str/KeyboardKey | bool | Release key |
press_and_release(key, delay=0.05) |
key: str/KeyboardKey, delay: float | bool | Press and release |
release_all() |
- | bool | Release all keys |
Special Methods
| Method | Parameters | Description |
|---|---|---|
key_combo(keys, delay=0.05) |
keys: list, delay: float | Key combination |
write(text) |
text: str | Type text |
MouseController Class
Core Methods
| Method | Parameters | Description |
|---|---|---|
start() |
- | Initialize mouse |
stop() |
- | Stop emulation |
is_started() |
- | bool |
press(button) |
button: MouseButton | Press mouse button |
release(button) |
button: MouseButton | Release mouse button |
click(button) |
button: MouseButton | Click mouse button |
Movement Methods
| Method | Parameters | Description |
|---|---|---|
move_relative(x, y) |
x: int, y: int | Relative movement |
move_absolute(x, y, duration=1.0) |
x: int, y: int, duration: float | Absolute movement |
get_position() |
- | Current coordinates |
Error Handling
All methods return True on success or False on failure. Possible exceptions:
RuntimeError- connection issuesValueError- invalid argumentsSerialException- communication errors
System Requirements
- Python 3.7+
- Dependencies:
- pyserial >= 3.5
- pyautogui >= 0.9.50 (for screen resolution detection)
- Hardware:
- Arduino Leonardo/Micro
- HID controller firmware
Function-Specific Requirements
| Function | Requires Admin | Notes |
|---|---|---|
move_absolute() |
Yes | Needs screen access |
get_position() |
Yes | Needs screen access |
move_relative() |
No | - |
| All keyboard functions | No | - |
Troubleshooting
Permission Errors
If you get errors about screen access:
- On Windows, run as Administrator
- On Linux/Mac:
sudo python your_script.py
or configure permanent permissions:sudo usermod -a -G input $USER # For mouse access sudo reboot
Arduino Not Detected
- Verify the sketch uploaded successfully
- Check your USB cable (some cables are power-only)
- Ensure you selected the correct board type in Arduino IDE
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arduino_hid_controller-3.0.0.tar.gz.
File metadata
- Download URL: arduino_hid_controller-3.0.0.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
462e03f772a7d42dd6824d3cb6aa69ae013f5045beef2d9c3e5011dd2941599b
|
|
| MD5 |
4fedba26e2e4ab3d473336789dc385bf
|
|
| BLAKE2b-256 |
18d022357c671e7c0fda31a203bc66a3a8c61971f1c794aeb5ff678e38dc79ac
|
File details
Details for the file arduino_hid_controller-3.0.0-py3-none-any.whl.
File metadata
- Download URL: arduino_hid_controller-3.0.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27a6c4e8e49127ef32a3392e51d05ef8bdbbc77c38c7e2a1aa9759d08167b563
|
|
| MD5 |
959dcbd1bbca95ff7e4f1d365da08318
|
|
| BLAKE2b-256 |
4ad9a668150aab4b514e066b8c1ae0d0788386e9e18a5787b4a8eadccce45ac5
|