User avatar
By RichardS
#43170 User

I developed an universal application to control ESP8266 wirelessly. The main idea is to let you, the user to build your own user interface with a set of pre-made controls or even easily write your own, totally customized controls.
It is designed to be cross platform, currently tested on Windows and Android but with the possibility to run on Linux, OS X and iOS as well.
The whole project consists of 5 separate parts:
- ESP8266 or ESP32-based PCB hardware (not finished yet)
- Firmware for the ESP8266 or ESP32 chip
- Cross-platform client application (for the UI)
- Control server (which acts as a bridge between multiple ESP boards and client UI applications)
- Separate lightweight Android service which runs in the background and listens for any alarms or events on the remote boards.

Each part has the ability to run custom JavaScript scripts to interact between inputs/outputs and even other boards or client applications.

The system is designed with the central server as its core so that whole setup can work separately and the client application works just as the UI which can (but doesn't have to) be connected as needed. The server is written in modern, cross-platform C++ and it can run on any Linux server, any OpenWrt-enabled wireless router (tested on WR842ND) and possibly on any other OS. Because of that the same server code is also embedded in the client application itself so the client device can also act as the local server with ALL of its features (including scripting).
So it can be single device-to-smartphone setup (without the separate device for the server) or even hundreds of devices to multiple clients all controlled by one server.

Scripts on the server could be used for example to watch the inputs on multiple boards and then change the outputs on the other boards, all in background!

The scripts are also supported on the ESP8266 module itself so you can also use the application to write entire module logic without the need for any external microprocessor or even any cables. The script is saved to the module flash and is run even without the WiFi connection.

The connection parameters for the ESP8266 (WiFi SSID, password etc) are configurable from the application itself with a very convenient user interface. There is also an option for direct connection and the ESP module creates an AP of its own, so no external WiFi network is required.

User controls can be organised in separate "screens" and even in whole separate setups (set of "screens", IP address and the rest of the application settings) and saved to external file. It even can create an shortcut on Android launcher with your own icon!

Android is also to run a background service which can monitor the boards and raise an alarm if for example analog input at one of the boards is too high or a digital input has changed. It can then vibrate the phone, wake up the phone and show the application and even do an external action (for example change output of another board) without the need to open the application itself.

All controls are synchronized between clients in real-time and are also stored on the server, so when another client connects it sees the latest state of all controls.

Most of the controls can accept your own image as a background and it can even be an animated gif or animated png sprite!

Currently supported inputs/outputs: Digital, Analog, Serial, I²C

There is even an option to write completely new control using QML language and load it at runtime. It can even be a 3D model!

For security, the firmware on the ESP8266 module is encrypted with the chip ID and flash unique ID (supported by WinBond) so it's not possible to just read the flash and write it to another ESP8266 to copy the project. But that doesn't stop it from having OTA updates, the server is encrypting firmware on the fly for each board separately before uploading it to the module!

The possibilities are endless and it's easily extendable if any new features are needed.
Possible use cases include:
- Home automation
- Very quick prototyping
- Convenient user interface for any machine or device
- Monitoring external events like temperature, humidity etc
- Remote control of basically anything

A cool example would be to write a script on android service side to monitor your GPS location and to open the gate at your home when you're approaching and close it when you're leaving and even automatically arm the home alarm or notify you when one of the doors are not closed!

The project is still under development and it's not decided yet if it will be open-source or commercial.
As of now the project has more than 18k lines of code in C++/Qt/QML/Java/JavaScript and took about 200 hours of development by a single person (me)