In een vorige blog heb ik uitgelegd hoe je een draadloze temperatuur sensor kunt gebruiken in Pimatic. Dit was gebasseerd op een bestaand project. Aangezien ik nu ben geswitcht naar Domoticz moest ik iets veranderen.

Ik heb daarom besloten om aan de slag te gaan en iets helemaal zelf te ontwikkelen. Voor een paar centen kun je namelijk heel goed zelf je hardware bij elkaar vinden op eBay. Verder is software voor mij ook zo geschreven.

Benodigheden

1 x Breadboard 400
1 x NodeMcu ESP8266 (CH340/CP2102)
1 x BME280 Atmospheric Pressure Sensor Temperature Humidity Sensor
1 x 128X64 OLED LCD LED Display Module

Uiteindelijk ben je ongeveer Euro 9,= kwijt aan hardware.

Als alternatief (deze worden ook ondersteund door mijn eigen ontwikkelde software) kun je als temperatuur sensor en display ook het volgende gebruiken (of combinatie):

1 x DHT22 Temperature and Humidity Temperature Sensor
2 x Max7219 Dot Matrix Module

Aansluiten

Het aansluiten is heel eenvoudig als je de pin-aansluitingen van je ESP8266 module weet:



Sluit bij alle sensors de 3.3V en GND pin van de ESP8266 aan op respectievelijke de aansluitingen van je DHT22, BME280, MAX7219 of Oled Display. Verder sluit je aan:

DHT22
Zoals geconfigureerd, default: Data op GPIO4 (=D2))

BME280
SDA op GPIO4 (=D2) en SCL op GPIO5 (=D1)

MAX721
Daisy chain 2 displays en rest zoals geconfigureerd, default: Data op GPIO13 (=D7), CLK op GPIO14 (=D5) en CS op GPIO5 (=D1)

OLED:
Zoals geconfigureerd, default: SDA op GPIO4 (=D2) en SCL op GPIO5 (=D2)

Hieronder de aangesloten default configuratie gevolgd door de alternatieve configuratie (ingebouwd in doosje)





Programmeren

Het uitlezen van de temperatuur en aansturen van de Oled display is niet moeilijk. We gebruiken hiervoor de Arduino IDE software die je hier kunt downloaden. Voordat we aan de slag gaan moet we nog wat instellingen in de Arduino IDE veranderen. Vul bij ‘File > Preferences’ voor ‘Additional Boards Manager URLs’ de volgende waarde in:

http://arduino.esp8266.com/stable/package_esp8266com_index.json




Ga naar Open Boards Manager vanaf ‘Tools > Board’. Scroll naar beneden en selecteer ‘esp8266 by ESP8266 Community’. Kies nu ‘install’ voor versie 2.4.2 (niet nieuwer).



Ga verder naar ‘Sketch > Include Library > Manage Libraries…’ en installeer de volgende libraries:

  • ‘BME280’ van Tyler Glenn
  • ‘ESP8266 and ESP32 Oled Driver for SSD1306 display van Dianiel Eichhorn, Frabrice Weinberg
  • ‘DHT sensor library for ESPx’ van beegee_tokyo
  • ‘LedControl’ van Eberhard Fahle



Code voor BME280

We zijn nu klaar om eindelijk te gaan programmeren. Om de BME280 uit te lezen gebruik je de volgende code:

#include <BME280I2C.h>  // Library for reading out BME280 sensor
#include <Wire.h>       // Library for Wire
// BME280 (D1 to SCL, D2 to SDA for NodeMCU Esp8266 (ESP-12E module))
BME280I2C g_bme;

void setup()
{
  Wire.begin();

  Serial.println("Initialize BEM280 Sensor");

  if (g_bme.begin())
  {
    switch(g_bme.chipModel())
    {
      case BME280::ChipModel_BME280:
          Serial.println("Found BME280 sensor");
          break;
      case BME280::ChipModel_BMP280:
          Serial.println("Found BMP280 sensor, but no Humidity available");
          break;
      default:
          Serial.println("Found UNKNOWN sensor");
          break;    
    }
  }
}

void loop() 
{
    float temp(NAN), hum(NAN), pres(NAN);
  
    BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
    BME280::PresUnit presUnit(BME280::PresUnit_hPa);

    // Retrieve Temperature Measurements
    g_bme.read(pres, temp, hum, tempUnit, presUnit);    
}

Code voor Oled 1306 Display

Om het Oled display aan te spreken kun je gebruik maken van de volgende code:

#include <Wire.h>             // Library for Wire
#include "SSD1306Wire.h"      // Library for controlling Oled Display

// OLED display (address, SDA, SCL)
// Wire SDA to GPIO4 (=D2) and SCL to GPIO5 (=D1)
SSD1306Wire  g_ssd1306 = SSD1306Wire(0x3c, 4, 5);

void setup()
{
  Wire.begin();

  Serial.println("Initialize Oled display");
  
  // Initialize Oled display
  // Default: Address is 0x3c, SDA on GPIO4 (=D2) and SCL on GPIO5 (=D1)
  g_ssd1306 = SSD1306Wire( 0x3c, 4, 5 );

  // Initialize the display    
  g_ssd1306.init();

  // Clear display
  g_ssd1306.clear();
  
  // Set display on
  g_ssd1306.displayOn();

  // Set Font
  g_ssd1306.setFont( ArialMT_Plain_24 );
}

void loop()
{
  // Clear display
  g_ssd1306.clear();    

  // Set brightness
  g_ssd1306.setBrightness( 8 );

  // Set text Alightment
  g_ssd1306.setTextAlignment(TEXT_ALIGN_CENTER);
    
  g_ssd1306.drawString( 64, 4, "Testing" );

  // Finally display data
  g_ssd1306.display();    
}

Integratie met Domoticz

Nu je de weer-gegevens kunt uitlezen en afbeelden op een display, wil je deze natuurlijk ook kunnen doorgeven aan Domoticz. Dit werkt heel eenvoudig via JSON. Je maakt een connectie met je Domoticz Server en stuurt dan een JSON bericht. Afhankelijk wat je wilt sturen is de inhoud van je JSON bericht anders. Zie deze link voor de syntax.

Ik maak gebruik van:

Temperature/Humidity: 
/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT

Temperature/Humidity/Barometer
/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT;BAR;BAR_FOR

Temperature/Barometer
/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;BAR;BAR_FOR;ALTITUDE

Programmeren ESP8266

Ik ben hiermee verder aan de slag gegaan en heb uitgebreide software geschreven voor mijn ‘eTemperature’ project. De software bestaat uit meer dan 2500 regels source-code en hiermee kun je via een Web-Interface of API gebruiken. Om de software op je ESP8266 te krijgen moet je de volgende stappen doorlopen:

  • In de Arduino IDE kies je in ‘File > Open’ menu de file ‘eTemperature.ino’ in de directory waar je deze hebt opgeslagen
  • Zet in ‘File > Preferences’ je ‘Sketchbook location’ naar de lokatie waar je ‘eTemperature’ hebt opgeslagen
  • Kies nu ‘Sketch > Verify/Compile’
  • Sluit je ESP8266 board via USB aan op je computer
  • Stel je upload poort in bij ‘Tools > Port’ (bijvoorbeeld /dev/ttyUSB0 op Debian of COM4 op Windows)
  • Kies ‘Sketch > Upload’

Als je Port niet juist ingesteld krijgt met Windows dan moet je wellicht nog de FTDI USB Drivers installeren op je computer

eTemperature software

Initiëel zal je ESP8266 opstarten als een Access Point (AP Mode). Wacht totdat je ‘eTemperature’ ziet verschijnen bij je draadloze netwerken. Maak verbinding met de SSID ‘eTemperature‘ en vul voor wachtwoord ‘eTemperature’ in. Ga vervolgens met je browser naar 192.168.4.1 en vul de Wifi gegevens van je lokale Wifi netwerk in en druk op [Submit].




Als het goed is gegaan verschijnt er OK op het browser-scherm. Herstart nu de ESP8266 (door reset knopje op ESP8266 te drukken of even de stroom eraf halen). De ESP8266 zal na de herstart automatisch verbinding maken met je Wifi Netwerk. Controleer welk IP adres je ESP8266 heeft gekregen van je DHCP server en ga met je browser naar dit IP-adres. Je krijgt nu een login-scherm te zien.



De standaard gebruikers-naam is ‘admin‘ en hier hoort standaard het wachtwoord ‘notdodo‘ bij. Deze gegevens kun je eventueel later in de Web-Interface van ‘eTemperature’ aanpassen bij [Instellingen]. Na het invullen van deze gegevens verschijnt de web-interface.



Op de web-interface verschijnt om de 5 seconde (configureerbaar) een update met actuele meet-gegevens. Tevens kun je hier de [instellingen] veranderen:



Stel hier de gegevens van je Domoticz Server in:

  • Domoticz Server
  • Domoticz Poort
  • Index van je Virtuele Sensor (idx)
  • Update frequentie naar Domoticz toe

Verder kun je hier nog instellingen plegen voor je sensors en eventueel calibratie-offsets opgeven. Om achter de Index van je Virtuele Sensor in Domoticz te komen maak je eerst een ‘Dummy’ Hardware aan.




Hier voeg je dan een virtuele sensor van jouw type toe (b.v. temp+hum of temp+baro).



Deze verschijnt nu in je Domoticz apparaten overzicht, waarbij in de kolom ‘idx’ je de index van je virtuele sensor kunt vinden.



Uiteindelijk zal dan in de temperatuur tab van Domoticz je weer-gegevens verschijnen (ik heb hem binnen getest vandaar de hoge temperatuur):


Upgraden eTemperature

Je kunt tenslotte ook nog ‘eTemperature’ via de Web-Interface updaten (dus via Wifi zonder draad). Dat is handig als je alles al ingebouwd hebt. Hiervoor maak je gebruik van de gecompileerde code. Dit doe je door in de Arduino IDE ‘Sketch > Export Compiled Binary’ te kiezen. Er zal dan een ‘bin’ file gegenereerd worden in de directory van je ‘eTemperature.ino’ sketch file. Deze kun je dan uploaden via de volgende verborgen URL van de ‘eTemperature’ Web-Interface:

http://ip-adres/upgradefw

Uit veiligheids oogpunt moet je wel eerst in de web-interface ingelogd zijn wil je deze URL kunnen gebruiken.




Kies de file-naam van je ‘bin’ en druk op de [Upgrade] knop. Na 1 minuutje zal je ESP8266 van nieuwe software zijn voorzien en automatisch worden herstart. Indien de major versie (getal voor de punt) van ‘eTemperature’ is veranderd dan zal de software weer in AP mode opstarten en worden alle instellingen gereset. Je moet dan alles weer opnieuw instellen. In alle andere gevallen blijven al je instellingen gewoon behouden.

Hoe kom ik aan de software?

Ik ben nu bijna 8 jaar met deze blog bezig en heb in die tussentijd alles bij elkaar opgeteld ongeveer 1.400.000 hits gehad en 1.000.000 bezoekers. In al die tijd hebben tot nu toe 9 mensen de moeite genomen om een kleine bijdrage te leveren omdat de informatie hen geholpen had. Dit terwijl bijvoorbeeld mijn blogs over reparatie van de Humax Receiver, Vaatwas Machine en Combi-Magnetron vele mensen honderden Euro’s hebben bespaard.

Daarom wil ik eens wat anders proberen deze keer. Je kunt de software van dit ‘eTemperature’ project bij mij kopen voor een kleine bijdrage van Euro 5,=. Als je deze wilt hebben moet je dit bedrag overmaken naar mijn bankrekeningnummer NL70RABO0145390640 ten name van H.M.M. Matthijssen onder vermelding van je email-adres en de toevoeging ‘eTemperature’. Ik stuur je dan de source-code toe zodat je zelf de code kunt compileren en/of aanpassen. Ik hoop dat je begrip hebt voor deze actie.

Als alternatief (indien je de software niet wilt kopen) kun je zelf aan de slag gaan. Dit artikel zou genoeg input moeten bevatten om je op weg te helpen.