luisllamasbinaburo / python3-idotmatrix-client

reverse engineered python3 client for 32x32 display with the Android App iDotMatrix (experimental)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


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

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

Getting Started

To get a local copy up and running follow these simple example steps:

Prerequisites

Please install the following for your distribution (Windows may work but it is untested):

  • latest Python3
  • Python3 Virtual Env

Installation

  1. Clone the repo
git clone https://github.com/derkalle4/python3-idotmatrix-client.git
  1. 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)

Specifies the address of the pixel display device.

./run_in_venv.sh --address 00:11:22:33:44:ff
--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
--rotate180degrees

Rotates the device display 180 degrees. True to rotate. False to disable rotation.

./run_in_venv.sh --address 00:11:22:33:44:ff --rotate180degrees true
--togglescreen

Disables or enables the screen. Does not seem to work currently.

./run_in_venv.sh --address 00:11:22:33:44:ff --togglescreen
--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. See --process-image for more information!

./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./demo.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.

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.

./run_in_venv.sh --address 00:11:22:33:44:ff --image true --set-image ./demo.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 ./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 ./demo.gif --process-gif 32

Roadmap

If you want to contribute please focus on the reverse-engineering part because my personal skills are not that good. 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.

  • Reverse Engineering
    • Chronograph
    • Clock
    • Countdown
    • Graffiti Board
    • DIY-Mode
    • Animated Images
    • Display Text
    • Cloud-API to download images
    • Cloud-API to upload images to device
    • Cloud-Firmware Update possible?
    • Eco-Mode
    • Fullscreen Color
    • MusicSync
    • Scoreboard
    • bluetooth pasword protection
    • understand the returned byte arrays of the device for better error logs
  • 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
  • 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

Acknowledgements

About

reverse engineered python3 client for 32x32 display with the Android App iDotMatrix (experimental)

License:GNU General Public License v3.0


Languages

Language:Python 99.1%Language:Shell 0.9%