Skip to content
Navigation Menu
Toggle navigation
Sign in
Product
Actions
Automate any workflow
Packages
Host and manage packages
Security
Find and fix vulnerabilities
Codespaces
Instant dev environments
GitHub Copilot
Write better code with AI
Code review
Manage code changes
Issues
Plan and track work
Discussions
Collaborate outside of code
Explore
All features
Documentation
GitHub Skills
Blog
Solutions
By size
Enterprise
Teams
Startups
By industry
Healthcare
Financial services
Manufacturing
By use case
CI/CD & Automation
DevOps
DevSecOps
Resources
Topics
AI
DevOps
Security
Software Development
Explore
Learning Pathways
White papers, Ebooks, Webinars
Customer Stories
Partners
Open Source
GitHub Sponsors
Fund open source developers
The ReadME Project
GitHub community articles
Repositories
Topics
Trending
Collections
Enterprise
Enterprise platform
AI-powered developer platform
Available add-ons
Advanced Security
Enterprise-grade security features
GitHub Copilot
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Search or jump to...
Search code, repositories, users, issues, pull requests...
Sign in
Sign up Reseting focus
derkalle4 / python3-idotmatrix-client Public
Notifications
Fork 34
Star 161
reverse engineered python3 client to control all your 16x16 or 32x32 pixel displays (experimental)
License
GPL-3.0 license
161 stars 34 forks Branches Tags Activity
Star
Notifications
Code
Issues 12
Pull requests 3
Actions
Projects
Security
Insights
derkalle4/python3-idotmatrix-client
main
1 Branch
0 Tags
Go to file
Go to file
Code
Folders and files
Name Name Last commit message Last commit date
Latest commit
derkalle4derkalle4
Merge pull request #42 from Zaine89/main
3 weeks ago
38aa2b5 · 3 weeks ago
History
120 Commits
improvement: add ability to scan for devices 6 months ago
core core
improvement: add text mode for iDotMatrix display 6 months ago
fonts fonts
Linux Build script last month
gui gui
first version to use the now separated idotmatrix-library 6 months ago
images images
Initial commit 9 months ago
.gitignore .gitignore
update README for better overview about the project 8 months ago
CODE_OF_CONDUCT.md CODE_OF_CONDUCT.md
Initial commit 9 months ago
LICENSE LICENSE
Update README.md - Fixing incomplete file paths 3 weeks ago
README.md README.md
first commit 9 months ago
__init__.py __init__.py
add proper keyboard interrupt on STRG+C or similar 8 months ago
app.py app.py
check python and pip commands seperately and allow to set them in an … 2 months ago
create_venv.sh create_venv.sh
fix confusing pip for python 3 weeks ago
find_cmds.sh find_cmds.sh
first version to use the now separated idotmatrix-library 6 months ago
pyproject.toml pyproject.toml
check python and pip commands seperately and allow to set them in an … 2 months ago
run_in_venv.sh run_in_venv.sh
View all files
Repository files navigation
README
Code of conduct
GPL-3.0 license
Logo
Pixel Display Client
control all your 16x16 or 32x32 pixel displays
Explore the docs »
Report Bug . Request Feature
Downloads Contributors Forks Stargazers Issues License
Table Of Contents
About the Project
Built With
Getting Started
Prerequisites
Installation
Usage
Roadmap
Contributing
License
Authors
Acknowledgements
About The Project
This repository aims to reverse engineer the iDotMatrix Android App for pixel screen displays like this one on Aliexpress. The goal is to be able to control multiple pixel screen displays via a GUI, an Rest API and the command line.
The initial reason for this project was to have a foundation to update one or multiple pixel displays during live streams on Twitch or other platforms where one can use this to further automate interactions with the audience. Please let
us know if you're using this to do so :)
Built With
Python 3
iDotMatrix Library
argparse
asyncio
bleak
pillow
Getting Started
To get a local copy up and running follow these simple example steps:
Prerequisites
Please install the following for your OS:
latest Python3
Python3 Virtual Env
windows users, to use the .sh scripts below you will need to use msys/gitbash, or roll your own
Installation
1. Clone the repo
git clone https://github.com/derkalle4/python3-idotmatrix-client.git
2. Create virtual environment and install all dependencies
./create_venv.sh
Usage
If you used the ./create_venv.sh you should use this command to run the app:
./run_in_venv.sh <YOUR_COMMAND_LINE_ARGUMENTS>
If you do not use a virtual environment the command will look like this:
python3 .\app.py <YOUR_COMMAND_LINE_ARGUMENTS>
command line arguments
--address (required for all commands except "scan")
Specifies the address of the pixel display device. Use "auto" to use the first available device (automatically looking for IDM-* devices in range).
./run_in_venv.sh --address 00:11:22:33:44:ff
--scan
Scans all bluetooth devices in range for iDotMatrix devices. Quits afterwards. Cannot be combined with other commands (use --address auto instead).
./run_in_venv.sh --scan
--sync-time
Sets the time of the device to the current local time.
./run_in_venv.sh --address 00:11:22:33:44:ff --sync-time
--set-time
Sets the time of the device to any time you want.
./run_in_venv.sh --address 00:11:22:33:44:ff --sync-time --set-time 18-12-2023-19:10:10
--screen
Turns the screen either on or off.
./run_in_venv.sh --address 00:11:22:33:44:ff --screen on
./run_in_venv.sh --address 00:11:22:33:44:ff --screen off
--flip-screen
Rotates the device display by 180 degrees. True to rotate. False to disable rotation.
./run_in_venv.sh --address 00:11:22:33:44:ff --flip-screen true
--toggle-screen-freeze
Freezes or unfreezes the screen. Does not seem to work currently.
./run_in_venv.sh --address 00:11:22:33:44:ff --toggle-screen-freeze
--chronograph
Sets the mode of the cronograph:
0 = reset
1 = (re)start
2 = pause
3 = continue after pause
./run_in_venv.sh --address 00:11:22:33:44:ff --chronograph 0
--clock
Sets the mode of the clock:
0 = default
1 = christmas
2 = racing
3 = inverted full screen
4 = animated hourglass
5 = frame 1
6 = frame 2
7 = frame 3
./run_in_venv.sh --address 00:11:22:33:44:ff --clock 0
--clock-with-date
Shows the date in addition to the time.
./run_in_venv.sh --address 00:11:22:33:44:ff --clock 0 --clock-with-date
--clock-24h
Shows the time in 24h format.
./run_in_venv.sh --address 00:11:22:33:44:ff --clock 0 --clock-24h
--clock-color
Sets the color of the clock in format --
./run_in_venv.sh --address 00:11:22:33:44:ff --clock 0 --clock-color 255-0-0
--countdown
Sets the mode of the countdown:
0 = disable
1 = start
2 = pause
3 = restart
./run_in_venv.sh --address 00:11:22:33:44:ff --countdown 1
--countdown-time
Sets the time of the countdown in format -
./run_in_venv.sh --address 00:11:22:33:44:ff --countdown 1 --countdown-time 5-0
--fullscreen-color
Sets all pixels to the given color in format --
./run_in_venv.sh --address 00:11:22:33:44:ff --fullscreen-color 255-255-255
--pixel-color
Sets one or multiple pixels to the given color in format ----
./run_in_venv.sh --address 00:11:22:33:44:ff --pixel-color 10-10-255-255-255
--scoreboard
Sets the score of the scoreboard <0-999>-<0-999>
./run_in_venv.sh --address 00:11:22:33:44:ff --scoreboard 21-12
--image
Wether to enable the image display mode or not. Set to true show an image or false to hide.
./run_in_venv.sh --address 00:11:22:33:44:ff --image true
--set-image
Path to an image to display on the device without further processing. This must match your display pixel size (e.g. demo_16.png for the 16x16 variant). See --process-image for more information on how to process a larger (or smaller)
image!
If you do not want to process the image: when using Gimp I had to export the file to a 32x32 pixel PNG (for my 32x32 Pixel Display) and disable all features except the "save resolution" feature to save time when sending the image
to the device. Every kind of metadata makes the image bigger and because we only can send around 20bytes at once this can certainly increase the transfer time!
The Demo PNG was downloaded from OpenGameArt.org.
./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./images/demo_16.png
./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./images/demo_32.png
./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./images/demo_64.png
--process-image
If specified it will process the given image. If used, the Python3 library Pillow will be utilized to convert the given image to a PNG with the given amount of pixels (e.g. 32 for 32x32 or 16 for 16x16 pixels). Technically you could use
all kind of sizes and variations of images. Keep in mind: processing could take some time depending on your computer. In my tests the given demo.png file takes around 1 second without processing and three seconds with processing.
./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./images/demo_512.png --process-image 32
--set-gif
Path to an GIF to display on the device. See --process-gif for more information! The Demo GIF was downloaded from OpenGameArt.org.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-gif ./images/demo.gif
--process-gif
If specified it will process the given image. If used, the Python3 library Pillow will be utilized to convert the given image to a GIF with the given amount of pixels (e.g. 32 for 32x32 or 16 for 16x16 pixels). Technically you could use
all kind of sizes for the GIF. Keep in mind: processing could take some time depending on your computer and using larger GIFs may result in a bad image quality. You should hand-craft your GIFs in the correct format for best results!
./run_in_venv.sh --address 00:11:22:33:44:ff --set-gif ./images/demo.gif --process-gif 32
--set-text
Sets a given text to the display. The Demo Font was downloaded from fontspace.com and is licensed open source (see font folder or link for details).
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World"
--text-size
Sets the size of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-size 10
--text-mode
Sets the mode of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-mode 1
--text-speed
Sets the speed of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-speed 50
--text-color-mode
Sets the color mode of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-color-mode 1
--text-color
Sets the color of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-color 255-255-255
--text-bg-mode
Sets the background mode of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-bg-mode 1
--text-bg-color
Sets the background color of the text.
./run_in_venv.sh --address 00:11:22:33:44:ff --set-text "Hello World" --text-bg-color 0-0-255
Roadmap
If you want to contribute please focus on the reverse-engineering part (find more information in the iDotMatrix Library). Many thanks for all contributions! If you want to dive deep into other issues please check for "#TODO"
comments in the source code as well.
outsource the reverse-engineered part to a library (suggestion from issue #17)
build configuration file to manage (multiple) devices
Build command line interface with all features to interact with the device
Build RestAPI to interact with the device remotely
Homeassistant Integration
Build GUI to allow non-technical people to use this software
build search tool to find displays nearby
make this software compatible with Windows and Linux
provide executables for Windows
Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have suggestions for adding or removing projects, feel free to open an issue to discuss it, or directly create a pull request after you edit the README.md file with necessary changes.
Please make sure you check your spelling and grammar.
Create individual PR for each suggestion.
Please also read through the Code Of Conduct before posting your first idea as well.
Creating A Pull Request
1. Fork the Project
2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
3. Commit your Changes (git commit -m 'Add some AmazingFeature')
4. Push to the Branch (git push origin feature/AmazingFeature)
5. Open a Pull Request
License
Distributed under the GNU GENERAL PUBLIC License. See LICENSE for more information.
Authors
Kalle Minkner - Project Founder
Jon-Mailes Graeffe - Co-Founder
Acknowledgements
Othneil Drew - README Template
LordRippon - Reverse Engineering for the Displays
8none1 - Reverse Engineering for the Displays
schorsch3000 - smaller fixes
tekka007 - code refactoring and reverse engineering
inselberg - Reverse Engineering for the Displays
About
reverse engineered python3 client to control all your 16x16 or 32x32 pixel displays (experimental)
Resources
Readme
License
GPL-3.0 license
Code of conduct
Code of conduct
Activity
Stars
161 stars
Watchers
22 watching
Forks
34 forks
Report repository
Releases
No releases published
Packages
No packages published
Contributors 9
@derkalle4
@tekka007
@heilig
@LordRippon
@5shekel
@jmgraeffe
@yair-mantis
@TheBigWazz
@Zaine89
Languages
Python 97.9%
Shell 2.0%
Batchfile 0.1%
Footer
© 2024 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact
Manage cookies
Do not share my personal information