WiFi Programmable Thermostat

 

Introduction

The goal of this project was enabling smart management of my home comfort from anywhere. This is monitoring or adjusting heating temperatures via computer, smartphone or tablet, so being able to check the heating status, change target temperature or the daily and weekly programming using a user-friendly interface. A secondary, but equally important goal of the project was the thermostat exterior design and the solution engineering. I wanted the electronic circuit to fit the size of a masonry wall box and the human interface (display and commands) to fit the shape and the size of some civil series. The final result is the following:

Project components

The thermostat is based on the well-known ESP8266 which includes a built-in Wi-Fi controller and very good computational capabilities with 80Mhz clock CPU, 80Kb of RAM and 4Mb flash storage for program code and data.

The project hardware includes a sensor to monitor ambient temperature and humidity) and a subminiature power latching relay to switch heating on or off.

The thermostat human interface includes a small 1.3″ OLED display to show the basic information like temperature, humidity, working mode and status. A small 5-way joystick is used to interact with the thermostat local interface for example to change the working mode and modify various thermostat configuration options.

A small SMPS provides the regulated 3.3v source required to operate the ESP8266 and all the other components.

Other than the local interface, the thermostat can be monitored and configured remotely using a web application interface. Advanced configuration options like changing the daily and weekly temperature programming are only available using the web interface.

Thermostat block diagram

Following picture shows the thermostat block diagram:

The I2C bus connects the temperature/humidity sensor, the OLED display and the 5-way joystick to the CPU. The latching relay is connected directly to the CPU using two control pins (to switch the relay contact ON or OFF – double coil relay) and a feedback pin. The feedback pin is used to check the relay status at system startup and verify that the latching relay contact is switched on the correct position (see “Latching Relay Status Feedback Management” section later on for details).

The thermostat features are the following:

  • Operating mode:
    • Auto: the thermostat automatically switches the heating system on or off comparing the ambient temperature and the target temperature set by the user.
    • Away: the thermostat normal status is off but it switches on the heating system if ambient temperature goes below the freezing temperature which is set to 5 degrees Celsius.
    • Cleaning: the thermostat switches off for 3 hours from the moment this mode is activated and then reverts back to the Auto mode. This is especially useful to avoid the heating system to switch on in winter time when opening windows during housekeeping time.
    • Manual: the thermostat is activated manually setting the target temperature to the desired value.
    • Off: the thermostat is switched off.

When is Auto mode, the target temperature is set according to a program of the day which defines the target temperature with a resolution of 30 minutes. There are up to three different programs that can be set and associated with the days of the week. Usually, just two programs are used one for Monday to Tuesday and the second program for the weekend. A third program is available for different needs.

User interface

The thermostat is connected to internet through the home Wi-Fi connection. Programming the thermostat can be done either by the local interface (thermostat joystick on the right hand side of the display) or the remote web interface. The local interface allows the user to switch between the different operating modes and change main settings of the thermostat. The web interface allows the user to monitor the thermostat status, change the operating mode or modify the weekly programming used by the Auto mode. Web interface interaction with the thermostat make use of the long polling technique (see “Remote Interface Interaction” section below for details).

Some features are only avaliable by the local or remote interface, here is the list:

FeatureLocal InterfaceWeb Interface
Change operating modeXX
Set target temperature in manual modeXX
Change weekly programsX
Associate Weekly program to DaysX
Adjust thermostat internal configuration parametersX
Monitor ambient temperatureXX
Monitor ambient humidityX
Advanced monitoring of temperature/humidity history (day/week/month/year)X
Set target end of time in cleaning modeXX
Table 1. Local vs. Web Interface

The local interface has two pages:

  • Main screen: here you have the time on the upper left corner, then some icons showing the heating status (on/off), the Wi-Fi connection status. The target temperature is on the upper right corner while current temperature is at the center of the display. Finally, on the bottom you can see the operating mode.
  • Settings screen: here you can change the internal configuration of the thermostat. These include:
    • Hysteresis: this is the minimum difference between the target temperature and current temperature that must exist to switch heating on again after the target temperature has been reached.
    • Contrast: the display brightness
    • Temp. ADJ: this is the temperature adjustment offset from -2 to 2 degrees Celsius used for temperature sensor fine tuning.
    • Reset WiFi: to restart Wi-Fi and put the thermostat in hotspot mode. This way, you can connect a smartphone or tablet to the thermostat and enter Wi-Fi connection parameters (ssid, key).
    • Language: the local and remote interface display language. English and Italian are supported, more to come.
    • Relay Test: used to force the heating relay on or off for testing purposes.
    • Reset: to restart the thermostat.

To enter the settings page from the main page you need to keep the joystick button pressed for more than 3 seconds.

On the settings page you can browse the configuration options up and down using the joystick. Once you have selected the desired option you can enter into the change mode moving the joystick in the right direction. When the option value is highlighted you can change its value moving the joystick up and down. To leave the change mode just move the joystick in the left direction.

To go back to the main page keep the joystick pressed again for more than 3 seconds.

Here are the screenshots of the display pages:

Main display page
Settings display page

The web interface has three tabs:

  • Home: here you can set the operating mode, check ambient temperature and humidity, explore their trend through an interactive graph (pan/zoom) over the last day/week/month/year
  • Week: here you can switch the program associated to the days of the week
  • Programs: here you can change the daily program setting the desired temperature for each time of the day. You can set up to three programs and the time resolutiin is 30 minutes.

Here are the screenshots of the tabs:

Home tab

The operating mode is selected using the button on the upper left side. When the operating mode is manual, the slider can be used to set the target temperature.

On the center of the page you have the heating status (on/off) and ambient temperature and humidity. On the bottom of the page, the temperature and humidity graph is interactive. You can select the reference period using the button below the graph and then pan and zoom on the time axis to refine the analysis window.

Week tab

The week tab is very simple you can select the program applied to each day of the week.

Programs tab

On the top of the page you can select the program to be configured. The bar graph allow you to set the target temperature at every time of the day. You can focus a specific period of the day using the buttons below the graph, then you can pan and zoom on the time axis to focus on specific hours of the day. Finally, clicking on the graph you can adjust the target temperature.

Thermostat internals

The thermostat is composed by the controller board, the i/o board which embeds the temperature and humidity sensor and the OLED display.

Following picture shows the main board in a early stage of the assembly. The size of the board is 68mm x 48mm:

Main components of the board are the (1) AC-DC SMPS converter (Hi-Link HLK-PM03 – see ref. [1]) that provides 3.3v regulated output, (2) the ESP 12-F WiFi module based on ESP8266 CPU (see ref. [2]) and (3) the latching relay that provides NO/NC contacts to switch the heating system on or off.

Latching relay is the subminiature dip relay HFD2-003-S-L2 (see ref. [3]) which has double coil and a nominal voltage of 3v. It can switch 125Vac/1A resistive load while the maximum rating is 220Vac/250Vdc at 3A. This is more than enough to drive typical heating system switching contact that is usually either a mechanical or solid-state relay. This latching relay offers two contacts, the second one is used to check the status of the relay and detect possible switching failures.

The I/O interface is composed by the joystick and the temperature sensor. This is connected to the main board using the I2C interface. The joystick has five contacts, one for the push button and four for the move directions. The joystick contacts are connected to the I2C bus using PCF8574 Remote 8-Bit I/O Expander (see ref. [4]). The temperature sensor is the well-known Bosh BME280 (see ref. [5]) which provides a native I2C bus connection. Here is a picture of the I/O board.

I/O board front view
I/O board back view

The back side of the board hosts the PCF8574 IC and two I2C connectors, one is used to connect the I2C bus to the main board and the other one is used as I2C bridge to the OLED display. Please, note that the I2C connector to the main board has an additional interrupt pin to notify a change of the joystick status and avoid polling for I/O changes. This is provided directly by the PCF8574 IC.

Finally, the display is an 1.3″ monochrome OLED with I2C bus interface based on SSD1306 IC (see ref. [6]) that can be found for a few coins on many e-commerce sites:

1.3″ Monocrome OLED display

Remote Web Interface and local interface Interaction

Following diagram shows the interconnections between a remote web interface (operated by the Smart Client), the local thermostat interface and the central components (API Server, Web Server and configuration database):

The pages of the remote web interface are provided by the Web Server. The API Server exposes web services to update the thermostat configuration parameters, read the current configuration and poll for configuration changes. Configuration is stored both remotely in the configuration database and in the local thermostat flash storage. Web pages downloaded bu the Smart Client embed the JavaScript code that interact with API Server to read the current configuration, check for configuration changes or update the configuration in case the user changes thermostat parameters (e.g. the operating mode or the target temperature). Configuration changes can be originated either from the Smart Client via the web interface or from the Chrono Thermostat via the local interface. In both cases, the new configuration is first sent via the API Server to the configuration database and then propagated to the other party.

To check for configuration changes both the remote web interface and the thermostat local interface make use of the Long Polling technique. Basically, the client makes an asynchronous call to the API Server which lasts up to 10 seconds (maximum polling interval). In case the configuration doesn’t change during the polling interval, a “no configuration change” response code is sent to the client at the end of the interval. If a configuration change is detected during the polling interval a “configuration changed” is immediately returned to the client along with the new configuration. This way, the frequency of the polling is highly reduced with respect to the continuous polling techniques (in case of no configuration changes, the frequency will be 6 pools for minute with 10 seconds polling interval), while the client is notified almost immediately when the configuration changes.

Next Steps

Possible evolutions of this project include:

  • Using Web Sockets in place of Long Polling for remote interface interaction will remove the need of the central configuration database. In this scenario, the remote interface would interact directly with the thermostat.
  • Adding a 868/433Mhz radio module (e.g. LoRa Ra-02 or similar) would allow the thermostat to act as a central hub for peripheral automation modules. For example, controlling thermal actuators, additional temperature/humidity monitoring devices, irrigation valves, and so on. Using low power radio will allow the peripheral devices to be battery powered.
  • At present, the thermostat retrieves current time from NTP servers once it is connected to internet. It does not startup until current time is set. In case of temporary power outage, if the internet connection is not reestablished, the thermostat will not work. Adding a RTC (Real Time Clock) module with a backup battery to keep time synchronized would solve this problem.
  • In addition to multi-language support, it would be useful adding some localization features like Celsius vs. Fahrenheit and different time formats

References

[1] HiLink. HLK-PM03 3.3V 3W Power module description and Datasheet. , 2020 rev. 1.01.
[Bibtex]
@hlk_pm03{hlk_pm03,
author = "HiLink",
title = "{HLK-PM03 3.3V 3W Power module description and Datasheet}",
year = "2020 rev. 1.01"
}
[2] Ai-Thinker Technology. ESP-12F WiFi module. , 2018.
[Bibtex]
@hlk_pm03{esp_12f,
author = "Ai-Thinker Technology",
title = "{ESP-12F WiFi module}",
year = "2018"
}
[3] HONGFA. HFD2 Subiminiature DIP Relay. , 2020 rev. 1.01.
[Bibtex]
@hfd2_003_S_L2{hfd2_003_S_L2,
author = "HONGFA",
title = "{HFD2 Subiminiature DIP Relay}",
year = "2020 rev. 1.01"
}
[4] Texas Instruments. PCF8574 Remote 8-Bit I/O Expander for I2C-Bus. , 2015 rev. J.
[Bibtex]
@pcf8574{pcf8574,
author = "Texas Instruments",
title = "{PCF8574 Remote 8-Bit I/O Expander for I2C-Bus}",
year = "2015 rev. J"
}
[5] Bosch. BME280 Combined humidity and pressure sensor. , 2018 rev. 1.6.
[Bibtex]
@bme280{bme280,
author = "Bosch",
title = "{BME280 Combined humidity and pressure sensor}",
year = "2018 rev. 1.6"
}
[6] Solomon Systech. 128×64, Dot Matrix OLED/PLED Segment/Common Driver with Controller. , Sep. 2019.
[Bibtex]
@ssd1306{ssd1306,
author="Solomon Systech",
title = "{128x64, Dot Matrix OLED/PLED Segment/Common Driver with Controller}",
year = "Sep. 2019"
}

Solar Heating Controller

Si tratta di una soluzione per la gestione integrata di un impianto solare termico e una caldaia per la produzione dell’acqua calda sanitaria. Permette di gestire in modo ottimale il flusso di acqua calda prodotta dai pannelli solari, per limitare o escludere l’intervento della caldaia nei periodi estivi e utilizzare la caldaia per integrare l’effetto dei pannelli solari quando l’irraggiamento solare non è sufficiente a garantire la temperatura minima richiesta per il consumo di acqua sanitaria. E’ composto da un sensore, posizionato in prossimità del pannello solare, che misura la temperatura dell’acqua calda e la trasmette ad una unità centrale localizzata in prossimità della caldaia. L’unità centrale, sulla base della temperatura di scambio configurata dall’utente, decide se deviare il flusso d’acqua calda proveniente dall’accumulo solare direttamente verso le utenze sanitarie oppure farlo passare attraverso la caldaia per integrare l’energia termica e quindi la temperatura dell’acqua al livello desiderato. La deviazione del flusso avviene mediante una valvola di scambio a tre vie che lavora in due posizioni:

  • Posizione di Bypass: quando la temperatura dell’accumulo solare è superiore alla temperatura di scambio, il flusso di acqua calda proveniente dall’accumulo solare “scavalca” la caldaia che rimane inattiva per la produzione di acqua sanitaria.
  • Posizione di Integrazione: quando la temperatura dell’accumulo solare è inferiore alla temperatura di scambio, il flusso di acqua (preriscaldata) proveniente dall’accumulo solare viene fatto viene fatto passare attraverso la caldaia che innalza la temperatura dell’acqua al livello necessario alle esigenze del consumo sanitario.

Il sensore è alimentato da un pannello solare e una batteria tampone e trasmette i dati all’unità centrale su onde radio alla frequenza di 433Mhz.

L’unità centrale comanda la valvola di scambio e decide la direzione del flusso di acqua calda sulla base della temperatura dell’accumulo solare ricevuta dal sensore e la temperatura di scambio impostata.

In aggiunta, l’unità centrale raccoglie informazioni ambientali esterne quali la temperatura e l’umidità e controlla lo stato di riempimento del serbatoio per la raccolta della condensa prodotta dalla caldaia (nel caso di caldaie a condensazione non dotate di scarico libero).

L’unità centrale può essere collegata alla rete WiFi domestica per trasmettere tutte le informazioni di funzionamento dell’impianto sulla rete Internet per il monitoraggio remoto dello stato dell’impianto.

Il Sensore

Di seguito lo schema a blocchi del sensore:

Diagramma a blocchi del sensore

Lo schema comprende:

  • Unità centrale di elaborazione (CPU)
  • Modulo di trasmissione radio a 433Mhz e relativa antenna
  • Sensore di temperatura esterno (temperatura accumulo solare)
  • Sensore di temperatura interno
  • Sensore di corrente e tensione della batteria
  • Batteria di backup
  • Modulo UPS a 5v
  • Regolatori di tensione a 3.3v

Il sensore è alloggiato all’interno di una scatola stagna con coperchio trasparente sotto il quale è posizionato un pannello solare per la produzione dell’energia elettrica necessaria all’alimentazione della scheda elettronica. Un modulo UPS e una batteria tampone completano la sezione di alimentazione per garantire che il sensore possa continuare a trasmettere dati per diversi giorni anche in assenza di sufficiente irraggiamento solare.

La temperatura dell’accumulo solare è misurata mediante una sonda basata sul sensore Dallas DS18B20.

Il dato di temperatura così come di altri parametri di funzionamento interno del sensore (livello della batteria, corrente di carica/scarica, temperatura interna del box), sono trasmessi all’unità centrale utilizzando il modulo radio con frequenza di trasmissione a 433Mhz.

La seguente figura mostra la scheda elettronica del sensore.

Il componente (1) è il cuore della scheda che si basa sul microcontrollore Atmel ATmega328p prodotto da Microchip Technology (rif. [1]). Il componente (2) è il modulo di trasmissione dati LoRa Ra-02 prodotto da AI-Thinker e basato sul chip SX1278 (rif. [2]) che lavora alla frequenza di 433MHz. Il componente (3) è il modulo UPS che, collegato al pannello solare e alla batteria tampone, fornisce una fonte di alimentazione regolata a 5V necessaria per il funzionamento della scheda elettronica.

La scheda è anche accessoriata con due componenti opzionali: il primo (4) è un amplificatore strumentale utilizzato per misurare la corrente che fluisce da e verso la batteria tampone. In questo modo è possibile misurare, oltre allo stato di carica, anche l’intensità della corrente di carica o scarica della batteria. L’intensità della corrente di carica della batteria è anche un buon indicatore dell’intensità dell’irraggiamento solare e può essere utilizzato per il monitoraggio ambientale. Il secondo componente opzionale è un sensore di temperatura, realizzato mediante il termistore attivo MCP9700 prodotto da Microchip Technology (rif. [4]) che permette di ottenere misure di temperatura in un intervallo piuttosto ampio che va dai -40 a 125 °C e misure precise nell’intervallo tipico di funzionamento di questo apparato (-10 a 50°C). Questo sensore serve per misurare la temperatura interna della scatola dove è alloggiata l’elettronica del sensore e permette, oltre al monitoraggio dei limiti di funzionamento, anche l’adeguamento di eventuali parametri di funzionamento interni al sensore in funzione della temperatura.

La seguente figura mostra l’alloggiamento delle componenti elettroniche del sensore all’interno della scatola elettrica.

Figura 2. Alloggiamento delle componenti del sensore nella scatola elettrica

Nella scatola elettrica, oltre alla scheda di controllo del sensore descritta in precedenza, trova alloggiamento la batteria tampone (1). Quest’ultima è inserita all’interno di un contenitore cilindrico di alluminio ancorato alla scatola elettrica mediante clips di pvc ed è collegata alla scheda di controllo mediante un cavetto sul quale è inserito in serie un circuito di protezione della batteria da carica/scarica eccessiva o sovracorrenti (2). Il sensore di temperatura (3) è inserito all’interno di una capsula impermeabile e collegato alla scheda di controllo mediante un cavetto elettrico protetto da un tubo di rivestimento di acciaio. Nello specifico è stato utilizzato un semplice flessibile per doccia che permette di preservare in modo ottimale l’integrità del cavo elettrico dagli agenti atmosferici.

La batteria è tenuta in carica da un pannello solare posto sotto la superficie interna del tappo trasparente della scatola elettrica (figura 3).

Figura 3. Pannello solare per la ricarica della batteria

Sotto il pannello solare, nella parte interna del coperchio è inserito un pannello di MDF opportunamente sagomato e sigillato con del silicone ai bordi per creare una intercapedine fra il pannello solare e l’interno della scatola (figura 4). Non visibile in figura l’intercapedine è stata riempita con gomma piuma.

Figura 4. Parte interna del coperchio.

L’intercapedine permette di ottenere un isolamento termico fra il coperchio e l’interno della scatola elettrica e limitare l’innalzamento di temperatura che si crea all’interno della scatola nei mesi estivi quando l’irraggiamento solare è molto intenso.

Nel montaggio finale, la scatola del sensore assemblata è posizionata sul tetto in prossimità del boiler di raccolta dell’acqua calda. La capsula con il sensore di temperatura è inserita all’interno in un pozzetto cilindrico posto su un fianco del boiler (normalmente i boiler per la raccolta di acqua ne sono dotati per la misura di temperatura mediante sonde analogiche – nel caso in esame la sonda analogica è stata rimossa e sostituita con la sonda digitale).

Unità centrale

L’unità centrale è il cuore della soluzione, di seguito lo schema a blocchi:

Schema a blocchi dell’unità centrale

Lo schema comprende:

  • Unità centrale di elaborazione (CPU)
  • Modulo di trasmissione radio a 433Mhz e relativa antenna
  • Modulo per la connessione WiFi 2.4Ghz e relativa antenna
  • Display LCD a caratteri (16×2)
  • Modulo relay per il controllo della valvola di scambio
  • Sensore di temperatura e umidità esterno
  • Sensore di peso
  • Pulsante multifunzione di controllo
  • Led di stato/accensione
  • Regolatori di tensione a 5v e 3.3v

La figura seguente mostra il pannello frontale dell’unità di controllo:

Figura 5. Unità di controllo

L’elettronica è alloggiata all’interno di una scatola elettrica. Sul pannello frontale è alloggiato il display (1) per la visualizzazione dei parametri e dello stato di funzionamento interno, il pulsante multifunzionale (2) con il quale è possibile scorrere le diverse viste del display e azionare i comandi per la configurazione e la regolazione dei parametri di funzionamento dell’unità, la manopola per la regolazione della temperatura di scambio (3), i led indicatori che permettono di verificare a colpo d’occhio lo stato di salute di alcune funzioni “vitali” dell’apparato: questi sono la spia di accensione (4), lo stato del collegamento radio con il sensore di temperatura remoto (5), lo stato del collegamento alla rete WiFi (6). Le immagini che seguono mostrano le pareti laterali dell’unità.

Figura 6. Pareti esterne dell’unità centrale, nell’ordine: la parete sinistra, quella inferiore e quella di destra

Sulla parete di sinistra è posizionata l’antenna WiFi (1), sulla parete inferiore si trova il cavetto di collegamento con il sensore di temperatura e umidità ambientale (2) e il connettore ausiliario (3), utilizzato in questo progetto per il collegamento con il sensore per misurare il livello di riempimento della tanica per la raccolta della condensa posta alla base della caldaia. Sulla parete di destra si trova il connettore di alimentazione a 12V/1A (4) e il connettore necessario per pilotare la valvola di scambio a tre vie (5).

All’interno della scatola è posizionata la scheda elettronica principale (Figura 7) che ospita le seguenti componenti: (1) è la CPU che si basa sul microcontrollore Atmel ATmega328p (rif. [1]), (2) è il modulo WiFi per il collegamento alla rete internet che si basa sul chip ESP8266, (3) è il modulo di trasmissione dati LoRa Ra-02 (rif. [2]). Il modello del modulo WiFi è il noto ESP-07S prodotto da Ai-Thinker (rif. [3]) che è dotato di un connettore esterno per il collegamento dell’antenna WiFi.

Figura 7. L’interno dell’unità di controllo, scheda principale

Sotto la scheda elettronica principale è posizionata una scheda secondaria (Figura 58) che monta una coppia di relè (1) necessari per pilotare la valvola di scambio a tre vie. Inoltre, l’immagine svela il modulo HX711 (2) posizionato sulla faccia posteriore della scheda principale. Tale modulo è l’interfaccia con il sensore che misura il peso e quindi il livello di riempimento della tanica per la raccolta della condensa.

Figura 8. L’interno dell’unità di controllo, scheda secondaria

La tanica per la raccolta della condensa poggia su una bilancia realizzata da due piastre parallele interconnesse mediante un elemento di torsione (cella di carico) che rappresenta il sensore di peso (rif. [5]).

IoT & Monitoring

Come accennato in precedenza, l’unità centrale è dotata di un modulo ESP8266 utilizzato per connettersi alla rete WiFi domestica. In questa soluzione, la connessione Internet viene utilizzata per inviare informazioni di stato generali a un servizio API che le salva in un database. Un’interfaccia Web viene quindi utilizzata per monitorare lo stato del sistema da qualsiasi dispositivo connesso ad Internet. L’immagine seguente mostra la semplice architettura dell’API e il servizio di monitoraggio:

Il gateway API espone un servizio che viene invocato direttamente dall’unità centrale per memorizzare i dati di stato in un database (MySQL). Il server Web espone una pagina Web che mostra le informazioni di stato più recenti nella rappresentazione grafica mostrata di seguito:

Due immagini della pagina di monitoraggio: nella figura a sinistra la temperatura dell’acqua nel serbatoio è superiore alla temperatura di commutazione e quindi la caldaia a gas è bypassata, nella figura a destra la temperatura dell’acqua nel serbatoio è inferiore alla temperatura di commutazione e quindi la caldaia a gas riscalda l’acqua proveniente dal serbatoio solare.

Le informazioni di stato presenti nella pagina di monitoraggio includono:

  • Stato del flusso
  • Temperatura dell’acqua del serbatoio di accumulo solare
  • Livello e stato di carica della batteria del sensore
  • Temperatura e umidità esterne
  • Stato di riempimento del serbatoio per la condensa posto sotto la caldaia a gas

Inoltre, la pagina può mostrare vari avvisi di stato:

  • Lo stato di salute della comunicazione tra l’unità centrale e il sensore
  • Un allarme quando il livello del serbatoio della condensa è superiore al 90%

Riferimenti

[1] Microcontrollore Atmel ATmega328p di Microchip Technology

[2] Modulo di trasmissione radio LoRa Ra-02 di Ai-Thinker

[3] Modulo WiFi ESP07-S di Ai-Thinker

[4] Termistore lineare per la misura di temperatura MCP9700

[5] Articolo: Realizzazione di una bilancia con cella di carico elettronica