In previous post, I have shown how to record temperature from Lexibook ASM30 sensor with Arduino. Here, we will use the same hardware platform for DHT11 sensor.
It is very simple. Just connect the DHT11 sensor like this:
Then I suppose you have the Arduino connected with a USB cable to a PC running the Arduino development environment.
The first thing to do is to test the assembly with the DHT11 library SimpleDHT. It can be installed easily through library manager in Arduino environment.
Once installed, just choose the SimpleDHT example, export it on the Arduino and check the temperature and humidity returned on serial monitor.
It shoud display something like that:
================================= Sample DHT11... Sample OK: 18 *C, 37 % ================================= Sample DHT11... Sample OK: 18 *C, 37 % ================================= Sample DHT11... Sample OK: 18 *C, 37 %
Then, I changed the sketch in order to send the temperature and humidity in json:
#include <SimpleDHT.h> // for DHT11, // VCC: 5V or 3V // GND: GND // DATA: 2 int pinDHT11 = 2; SimpleDHT11 dht11; void print_data_json(int temp, int hum) { Serial.print("{ "); Serial.print("\"temp\": "); Serial.print(temp); Serial.print(", \"hum\": "); Serial.print(hum); Serial.print(" }\n"); } void setup() { Serial.begin(115200); } void loop() { // read without samples. byte temperature = 0; byte humidity = 0; if (dht11.read(pinDHT11, &temperature, &humidity, NULL)) { // Error. -1 is returned print_data_json(-1, -1); return; } print_data_json((int)temperature, (int)humidity); // DHT11 sampling rate is 1HZ. delay(1000); }
Follow the same instruction as found on previous tutorial Add temperature sensor in Domiticz.
And the lua script for DHT11 is really simple:
JSON = (loadfile "/home/pi/bin/domoticz/scripts/lua/JSON.lua")() -- one-time load of the routines -- Index of DHT11 device in domoticz local deviceIdx = 1 local serialPort = "/dev/ttyACM0" commandArray = {} -- Start job -- Open seria port and read rserial=io.open(serialPort, "r") read_value = rserial:read() local json_value = JSON:decode(read_value) -- Data : TEMP;HUM;HUM_STAT -- HUM_STAT can be one of: -- 0=Normal -- 1=Comfortable -- 2=Dry -- 3=Wet local hum_stat = 0; if json_value.hum<30 then hum_stat=2 end if json_value.hum>70 then hum_stat=3 end if (json_value.hum>=45 and json_value.hum<=50) then hum_stat=1 end commandArray['UpdateDevice']=deviceIdx..'|0|'..json_value.temp..';'..json_value.hum..';'..hum_stat return commandArray
Share this page: