Menu

Recent Posts

aki-technical


Sunday, November 1, 2026

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

Overview 

The DHT-11 is a environmental sensor capable of converting surrounding temperature and humidity. It is a digital sensor, implementing the One-Wire communication protocol. The master micro-controller just need on digital I/O pin to command and get sensor data from this device. Its One-Wire data packet is very easy decode using a simple 8-bit micro-controller. The data packet is 40-bit or 5 bytes, containing two bytes of temperature data, two bytes of humidity data, and one byte of error correction.

 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Sensor Data Reading


This sensor is very low cost, widely available. It's popular among Arduino users, mini projects, etc. Using this sensor in agricultural or home garden is very popular. However it is not durable due to surrounding environment.

 

Arduino DHT Sensor Library

Adafruit has a lot of libraries and examples for their products. However I didn't buy any products. Some sensor are compatible in software. Install the DHT sensor library and open its example, DHTTester.ino sketch as shown below.

 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Open the DHTTester.ino Sketch

 This example the master MCU will read the environmental data from DHT sensor. It support DHT11, DTH-21, and DHT-22. However some pins of the ESP-12E board doesn't work with this sensor because they are connected to other devices or have alternative function such as TWI, UART, etc.

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 

I use this example, and added some OLED display function to read and display environmental data and the SH0016 124x64 OLED module. I use pin D3 of the ESP-12E module since other pin doesn't work with this one-wire sensor. You can test it by yourself.

It needs these libraries,

  1.  DHT
  2.  Wire
  3.  Adafruit_GFX
  4.  Adafruit_SH110X
  5. Adafruit_Sensor 

Arduino Source Code


  1. #include "DHT.h"
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SH110X.h>

  5. #define i2c_Address 0x3c
  6. /*initialize with the I2C addr 0x3D
  7. Typically Adafruit OLED's */
  8. //#define i2c_Address 0x3d

  9. #define SCREEN_WIDTH 128
  10. #define SCREEN_HEIGHT 64
  11. #define OLED_RESET -1
  12. Adafruit_SH1106G display =
  13. Adafruit_SH1106G
  14. (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

  15. // Digital pin connected to the DHT sensor
  16. #define DHTPIN D3

  17. #define DHTTYPE DHT11 // DHT 11

  18. DHT dht(DHTPIN, DHTTYPE);

  19. void setup() {
  20. // wait for the OLED to power up
  21. delay(250);
  22. // Address 0x3C default
  23. display.begin(i2c_Address, true);
  24. // Clear the buffer.
  25. display.clearDisplay();
  26. Serial.begin(9600);
  27. Serial.println(F("DHTxx test!"));

  28. dht.begin();

  29. display.setTextColor(SH110X_WHITE);
  30. display.setCursor(0, 8);
  31. display.setTextSize(3);
  32. display.println("ESP8266");
  33. display.println("NodeMCU");
  34. display.display();
  35. delay(5000);
  36. display.clearDisplay();
  37. display.setCursor(0, 0);
  38. display.setTextSize(3);
  39. display.println("SH1106");
  40. display.println("OLED");
  41. display.display();
  42. delay(5000);
  43. display.clearDisplay();

  44. display.setCursor(10, 8);
  45. display.setTextSize(3);
  46. display.println("DHT-11");
  47. display.println("Sensor");
  48. display.display();
  49. delay(5000);
  50. display.clearDisplay();
  51. }

  52. void loop() {
  53. // Wait a few seconds between measurements.
  54. delay(2000);

  55. /* Reading temperature or humidity takes
  56. about 250 milliseconds!
  57. Sensor readings may also be up to 2 seconds
  58. 'old' (its a very slow sensor)*/
  59. float h = dht.readHumidity();
  60. // Read temperature as Celsius (the default)
  61. float t = dht.readTemperature();
  62. // Read temperature as Fahrenheit (isFahrenheit = true)
  63. float f = dht.readTemperature(true);

  64. // Check if any reads failed and exit early (to try again).
  65. if (isnan(h) || isnan(t) || isnan(f)) {
  66. Serial.println(F("Failed to read from DHT sensor!"));
  67. return;
  68. }

  69. // Compute heat index in Fahrenheit (the default)
  70. float hif = dht.computeHeatIndex(f, h);
  71. // Compute heat index in Celsius (isFahreheit = false)
  72. float hic = dht.computeHeatIndex(t, h, false);

  73. Serial.print(F("Humidity: "));
  74. Serial.print(h);
  75. Serial.print(F("% Temperature: "));
  76. Serial.print(t);
  77. Serial.print(F("°C "));
  78. Serial.print(f);
  79. Serial.print(F("°F Heat index: "));
  80. Serial.print(hic);
  81. Serial.print(F("°C "));
  82. Serial.print(hif);
  83. Serial.println(F("°F"));

  84. display.clearDisplay();
  85. delay(1500);
  86. // Clear the buffer.
  87. display.clearDisplay();
  88. display.setTextColor(SH110X_WHITE);
  89. display.setCursor(32, 0);
  90. display.setTextSize(2);
  91. display.println("Temp:");
  92. display.println(" " + String(t) + "C");
  93. display.setCursor(0, 32);
  94. display.println(" Humidity:");
  95. display.println(" " + String(h) + "%");
  96. display.display();
  97. }


Connection

Connect all components as follow,

  1. SH1106 OLED 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Table 1: ESP-12E and SH1106 Connection

  1.  DHT-11 Sensor

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Table 2: ESP-12E and DHT-11 Connection

Picture

I tested it using my DIY ESP8266 TWI Communication Board.


 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 


ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 


Video

 

I keep the video on YouTube. 

 


 


 



 

 

 

 

 

 

 

 

Search This Blog

Electronics and Programming Tutorials

DIY Electronic Projects And Instruments

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (17) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (6) Display (163) Distance Sensor (3) dot matrix (1) ds1307 (11) DS18B20 (7) ds3231 (2) ds3232 (2) dsPIC (16) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP-12E (9) ESP32 (1) esp8266 (10) Graphical LCD (3) HD44780 (14) I2C (40) ILI9341 (1) Input/Output (85) Interrupt (22) IoT (4) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (92) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (11) MikroC PIC (2) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (6) One-Wire (8) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (15) PIC (122) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (14) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PLL (1) PWM (12) RTC (16) SBN0064G (1) Sensor (15) SH1106 (8) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (3) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (17) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) Web Server (1) Wi-Fi (3) XC16 (2) XC8 (96)

aki-technical