Skip to main content

Smart Home Control Panel using ESP-Link

This post describes the control panel developed with a few open source software and libraries. The main purpose is to have a proof of concept that the various components can be put together to become a useful product.

I have built a smart home system controlled using Openhab and the hardware switches are primarily using Sonoff switches with Tasmota firmware. The switches are controlled using Openhab Habpanel using an Android Tablet. Generally, this is my preferred way of using the Android Tablet but the Arduino control panel is developed so that it can interface to external hardware at low cost.

The control panel is developed using ESP-Link firmware with the El-client APIs and the hardware is an ESP8266 and Mega2560 combi board.  Besides acting as a touchscreen based on/off switch, it is also an internet clock (ntp) and a doorbell buzzer.





The software/firmware/libraries are
  • ESP-Link
  • el-client APIs (interface to ESP-Link firmware
  • MCUFriends Arduino library to control the TFT screen.
  • JOS menu system (adapted the concept and heavily modified the source code)
  • Starwars theme doorbell tone source code

Supporting System
  • Openhab 2.0 running on Raspberry PI.
  • Mosquitto MQTT 3.1.1
    Hardware
    • ESP8266 Mega2560 Combi board (this can be bought from Aliexpress or Banggood).
    • Arduino 2.8" touchscreen TFT (this can be bought from Aliexpress or Banggood).
    • Passive Speaker for the buzzer
    • External Antenna
    I found a nice 3D casing in Thingiverse. The case design has some minor imperfections and I do not have a 3D printing skill to modify the design. I have also outsourced the printing to 3rd party and I am satisfied with the final output.
    I have 2 different 2.8 inch touch screens and one of them requires me to invert the colour when using the MCUFriend library. The built-in antenna for the combi board is not very sensitive and resulted in frequent dropped connections. I have connected an external antenna and the result was quite good. The connection to MQTT server is faster and there are less dropped connections. The details can be found in my other post.

    The source code is available on GitHub. This is the preliminary release and the source code needs further cleanup.

    There are some comments on the current version of EL-client library and ESP-link firmware that I am using.

    Occasionally, the MQTT disconnects and the callback will be triggered. The reconnection back to MQTT broker sometimes is not reliable. My way of handling is to trigger a soft reset at the Mega 2560 to re-init the Mega and reconnect to MQTT. So far I have not found a more graceful way to handle reconnect.

    Sometimes, the MQTT message is not received when I switch on/off my light directly or via Openhab Habpanel. To work around, every minute (there about), I send messages to inquire about the status of the switches. At the same time, update the clock to display the correct time.

    One of the observations I have made about ESP-link and el-client for MQTT library is there seems to be a limit to the number of topics it can respond to concurrently. When I have subscribed to 6 topics and concurrently sent messages to all the topics, only the first 4 topics received the messages.

    Please leave your comments for the suggestion for improvement.

    Update (9/9/2018)
    The Control Panel MQTT message handling has been changed. On the Openhab side, I have put in a new rule to trigger the Control Panel when there is state change on any of the switches. The Control Panel will receive the message as "XXXXXX" where X can be 0 or 1. The 1st X is the status of switch 1, 2nd X is the status of switch 2 etc.

    This has solved one of the ESP-link and EL-client whereby when the client subscribed to multiple queues and messages arrived at the same time, the client only pick up some of the messages.


    Comments

    Popular posts from this blog

    DIY Sonoff RF Bridge

    Tasmota recently supported the RF bridge by iTead which allowed for RF 433 remote devices to be controlled/controlling using Sonoff products. e.g A handphone can be used to control a remote RF device or an RF remote control can use to control a WIFI enabled device. By using Tasmota, I can control the device using MQTT. This idea fits exactly to my smart home plan. Here is the schematic: I cheated a bit by having ESP01 mounted on a breakout board. This breakout board converts all the external pins to 5v which simplified the wiring and I do not need to use a voltage level shifter. Moreover, the Arduino 3.3v power does not have enough current to power the ESP reliably and I have to power it via the 5V from Arduino Uno. Next, I used an Arduino Uno prototype shield with a tiny breadboard to hold all the components together. For the RF 433 transmitter/receiver, I am using the development kits when I purchased the all-in-one Arduino development kits. An antenna is added for more sensi

    Using ESP-Link transparent bridge (ESP-01 and Arduino Pro Mini)

    Recently stumbled across an interesting open source project ESP-Link . Its main purpose is to network-enable a non-network microcontroller (MCU) such as Arduino Uno, Pro mini or Nano using ESP8266. The author termed it as "Transparent Bridge". The ESP and MCU  communicate via the serial link and there is a companion Arduino library EL-Client  for the MCU to connect up the network using MQTT, REST, TCP and UDP. Setup I have put together an ESP-01 and an Arduino Pro Mini for this experiment. I have chosen a 3.3 version Pro mini so that I do not need to do any voltage level shifting between the I/O pins. In order to have a stable voltage source, the ESP8266 is powered by Pro Mini and the Pro Mini "RAW" pin is connected to a 5v USB power source. The RAW pin can take voltage up to 12V. The reset pin of Pro Mini is connected to GPIO 0 of ESP-01. This enables the ESP-01 to reset the Pro Mini.   I have linked up an APDS 9960 sensor to it and periodically se

    Using ESP-Link transparent bridge (ATmega2560+ESP8266 board)

    I have found this interesting board selling on Aliexpress website. It is an Arduino Mega 2650 with a built-in ESP8266 which allows the Mega to connect to wifi. This board has cut down a lot of wiring and bring out interesting possibilities. One of this is to connect up both the microcontrollers using ESP-link firmware. I have an earlier blog post  that described how to wire up an ESP-01 and Arduino Pro Mini. One of the tricky parts in this setup is the sequence of flashing the ESP firmware. Flashing the onboard ESP8266 requires some setting changes to the dip switches. The following are the sequences which I get both the microcontrollers to talk to each other. Set the jumper 5,6,7 to ON and the rest OFF. This will set the ESP to update mode. I am using version 3.0.14  and flashed the ESP using the following parameters: esptool --port com26 --baud 230400 write_flash -fm dio -fs 4MB -ff 80m 0x0 boot_v1.6.bin 0x1000 user1.bin 0x3fc000 esp_init_data_default.bin 0x3fe0