After a long break from the project, quite recently, over a month, I performed
two significant program iterations. At first, I wanted to try out
MicroPython, as I did not get a chance to do so earlier. It seemed like a great technology, eliminating all the headaches related to coding limited devices, such as microcontrollers. As a fan of keeping the technology consistent across different parts of a solution, I picked
Python for the back-end as well. UI is an independent app, so these choices do not interfere with it. I spent
four days implementing the entire thing, from scratch to the working prototype handling eight channels, and ready to take more. MicroPython turned out to be great for prototyping (I managed to easily implement a mechanism for updating the code on all connected devices by sending it through WebSocket, replacing old code on the device with the new one, and rebooting the device – there you go), but not yet production-ready. At least not for
my purpose. Many libraries miss crucial (for me) functionalities; they work unstable, threading does not work as expected, etc. It worked, but the performance was not astonishing.