Skip to content
Espressif ESP32 Based Smarthome screen for MQTT
Branch: master
Clone or download
Latest commit a75ebb3 Jun 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
components First commit May 26, 2019
data First commit May 26, 2019
main Fix: Infinite Mutex Lock in AppScreen Back Button Jun 1, 2019
media Add video demo May 27, 2019
.gitignore First commit May 26, 2019
.gitmodules Add Variant submodule May 29, 2019
.travis.yml First commit May 26, 2019
CMakeLists.txt First commit May 26, 2019
HomeControl.code-workspace First commit May 26, 2019 Add MIT License May 26, 2019 Add ESP Versions Jun 16, 2019
partitions.csv First commit May 26, 2019
project_description.json First commit May 26, 2019
sdkconfig Replace Arduino Runloops with own May 26, 2019


An ESP32 based Smarthome Controller for MQTT

Travis CI Issues

Homepoint is a screen-based interface for MQTT-connected Smarthome devices that runs on the cheaply available ESP32 Chipset. This project requires a MQTT-Broker to be running in your smarthome.

HomePoint Youtube demo


  • See and trigger scenes (groups of devices) on the front screen.
  • Trigger individual devices by diving into scenes (long press).
  • Support for temperature, humidity and air quality sensors.
  • Supports both Touch Screen or Button based navigation.
  • Screen updates automatically when devices are triggered from elsewhere.
  • Easy configuration through a JSON files.
  • Screensaver saves power by switching off screen after 10 minutes.
  • Statusbar shows connectivity for WiFi and MQTT as well as time.


  • HomeKit Button/Switch Support (for users without MQTT to setup Automations they can toggle from Homepoint)
  • Improved documentation

Is there a feature missing? Open an issue, send me an email or fork this project and add it yourself.


Homepoint works with any ESP32 device and Touchscreen supported by TFT_eSPI, which are:
ILI9341, ILI9163, ST7735, S6D02A1, ILI9481, ILI9486, ILI9488, HX8357D and ST7789 based TFT displays that support SPI.

It has been tested with


In order to build Homepoint, you need the ESP-IDF SDK.


Software Version
ESP-IDF 3.3 (current master)
Toolchain 5.2.0

Installation is fairly straight forward, see Setting up the Toolchain in the Espressif Documentation.

git clone
cd homepoint
git submodule update --init --recursive
mkdir build && cd build
cmake ../
make spiffs_spiffs_bin
make -j 8 flash

For use with a Button-Based interface configure with

cmake -DBUTTONS=ON ../

and for out of box use with M5STACK run

cmake -DM5STACK=ON ../

Otherwise the default configuration will be for touch-screens like ArduiTouch or the widely used ILI9341 like the one offered by Adafruit. GPIOs for the screen may have to be configured in main/libraries/TFT_ESPI/User_Setup.h.

Other Homepoint specific configuration settings like the time it takes before the Screensaver kicks in can be configured in main/config/Config.h.


See the data/config.json file as a reference.
Each Scene consists of one or several devices. The scene can either be a Switch, Light or a Sensor.
Do not put Switch devices into a Sensor scene.
If Sensors transmit their information via JSON, set jsonData to true, and specify the key under which the data is sent (ie. temperature).
Sensor can have up to two devices, in which case a combined view is shown (ie. for temperature and humidity).
Wifi & MQTT credentials go in the top level.
Homepoint gets its time from an NTP Server. In order to set the correct timezone, copy & paste your NTP TZ Setting from here.


  "wifi": "MyWifiSSID",
  "password": "My Wifi Password",
  "mqttbroker": "mqtt://",
  "mqttusername": "mqttusername",
  "mqttpasswd": "mymqttpassword",
  "timezone": "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00",
  "scenes": [{
    "name": "Living Room",
    "type": "Light",
    "icon": "livingroom",
    "devices": [{
      "name": "Side Light",
      "setTopic": "lights/hue/00:17:88:01:02:3c:2a:6d-0b/set/on",
      "getTopic": "hue/status/lights/Hue color lamp 1",
      "onValue": "true",
      "offValue": "false"
    "name": "Bedroom",
    "type": "Sensor",
    "icon": "door",
    "devices": [{
      "name": "Temperature DHT Sensor",
      "type": "temperature",
      "jsondata": true,
      "temperatureKey": "temperature",
      "getTopic": "bedroom/esptemp"
      "name": "Humidity DHT Sensor",
      "type": "humidity",
      "jsondata": true,
      "humidityKey": "humidity",
      "getTopic": "bedroom/esphumi"

Switches can have custom icons, the icons of sensors are currently fixed and not customizable. See the data folder for available icons or add your own following the naming scheme visible there.

You can’t perform that action at this time.