RPi Pico B.Tech/Diploma Beginner

Interfacing DHT11 Temperature Humidity Sensor with Raspberry Pi Pico

Interfacing DHT11 Temperature Humidity Sensor with Raspberry Pi Pico & MicroPython Code to display temperature Humidity data in OLED Display

  • Suitable forB.Tech/Diploma RPi Pico students
  • Build time1-2 weeks
  • LevelBeginner
  • Available atAjvika Labs, Kakinada

About this project

Overview
In this tutorial we will learn
Interfacing
of
DHT11 Temperature Humidity Sensor
with
Raspberry Pi Pico
. We will write a
MicroPython
code for DHT11 Sensor. We will use
0.96″ I2C OLED Display
and disply the DHT11 temperature and Humidity value on it.
The DHT11 is a basic,
ultra low-cost digital temperature and humidity sensor
. It uses a
capacitive humidity sensor
and a
thermistor
to measure the surrounding air. This sensor can be easily interfaced with any microcontroller such as
Arduino
or
RP2040 Raspberry Pi Pico
to measure humidity and temperature instantaneously. You can make a
Weather Station
project with DHT11 Sensor.
This post explains, the method of retrieving the Humidity & Temperature data from the DHT11 sensor using Raspberry Pi Pico & MicroPython Code. The retrieved data will be displayed on
Python Shell Window
and later on
OLED Display
. But before moving ahead, please follow the Raspberry Pi Pico
Getting Started Tutorial
to learn more about the Pico Board in detail.
Bill of Materials
The list of components that you need for this project is given below. You can purchase all the components from Amazon.
S.N.
Components Name
Quantity
Purchase Links

Raspberry Pi Pico

Amazon
AliExpress

0.96" I2C OLED Display

Amazon
AliExpress

DHT11 Sensor

Amazon
AliExpress

Jumper Wires

Amazon
AliExpress

Breadboard

Amazon
AliExpress
DHT11 Humidity Temperature Sensor
The DHT11 is a basic, ultra low-cost digital temperature and humidity sensor. It uses a
capacitive humidity sensor
and a
thermistor
to measure the surrounding air and spits out a digital signal on the data pin (no analog input pins needed). The temperature range of DHT11 is from
0 to 50 degrees Celsius
with a 2-degree accuracy. The humidity range of this sensor is from
20 to 80%
with 5% accuracy.
DHT11 sensor has four pins-
VCC, GND, Data Pin
, and a not connected pin. A
pull-up resistor
of
5k
to
10k
ohms is provided for communication between
sensor
and
micro-controller
It’s fairly simple to use, but requires careful timing to grab data. The only real downside of this sensor is you can only get
new data
from it once every
2 seconds
, so when using the library, sensor readings can be up to 2 seconds old. To learn more about the DHT11 Sensor, you can check the
DHT11 Datasheet
Setting up DHT11 Sensor with Raspberry Pi Pico
The hardware setup and
hookup guide
for DHT11 Sensor with Raspberry Pi Pico board & OLED Display is super easy. The connection diagram is given below.
Connect the DHT11 digital output pin to
GP28
of Pico Board. Connect the
SCL & SDA
pin of OLED Display to Raspberry Pi Pico
GP9 & GP8
Pin. Supply DHT11 & OLED Display with
3.3V VCC
& Connect their GND pins to Pico GND Pin.
DHT11 Raspberry Pi Pico MicroPython Code
The DHT11 MicroPython Code for Raspberry Pi Pico comprises of so many dependencies. We have to write MicroPython code for the DHT11 Library and also for the OLED Display.
The code comprises of 3 parts:
1. SSD1306.py
2. dht.py
3. main.py
SSD1306.py
First open a New Tab, and copy the following code. Save the file with the name SSD1306.py & then run or download it to the Raspberry Pi Pico Board.

# MicroPython SSD1306 OLED driver, I2C and SPI interfaces
from
micropython
import
const
import
framebuf
# register definitions
SET_CONTRAST
=
const
(
0x81
)
SET_ENTIRE_ON
=
const
(
0xA4
)
SET_NORM_INV
=
const
(
0xA6
)
SET_DISP
=
const
(
0xAE
)
SET_MEM_ADDR
=
const
(
0x20
)
SET_COL_ADDR
=
const
(
0x21
)
SET_PAGE_ADDR
=
const
(
0x22
)
SET_DISP_START_LINE
=
const
(
0x40
)
SET_SEG_REMAP
=
const
(
0xA0
)
SET_MUX_RATIO
=
const
(
0xA8
)
SET_COM_OUT_DIR
=
const
(
0xC0
)
SET_DISP_OFFSET
=
const
(
0xD3
)
SET_COM_PIN_CFG
=
const
(
0xDA
)
SET_DISP_CLK_DIV
=
const
(
0xD5
)
SET_PRECHARGE
=
const
(
0xD9
)
SET_VCOM_DESEL
=
const
(
0xDB
)
SET_CHARGE_PUMP
=
const
(
0x8D
)
# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class
SSD1306
(
framebuf
FrameBuffer
)
:
def
__init__
(
self
width
height
external_vcc
)
:
self
width
=
width
self
height
=
height
self
external_vcc
=
external_vcc
self
pages
=
self
height
// 8
self
buffer
=
bytearray
(
self
pages *
self
width
)
super
(
)
__init__
(
self
buffer
self
width
self
height
framebuf
MONO_VLSB
)
self
init_display
(
)
def
init_display
(
self
)
:
for
cmd
in
(
SET_DISP
0x00
# off
# address setting
SET_MEM_ADDR
0x00
# horizontal
# resolution and layout
SET_DISP_START_LINE
0x00
SET_SEG_REMAP
0x01
# column addr 127 mapped to SEG0
SET_MUX_RATIO
self
height

SET_COM_OUT_DIR
0x08
# scan from COM[N] to COM0
SET_DISP_OFFSET
0x00
SET_COM_PIN_CFG
0x02
if
self
width
>

*
self
height
else
0x12
# timing and driving scheme
SET_DISP_CLK_DIV
0x80
SET_PRECHARGE
0x22
if
self
external_vcc
else
0xF1
SET_VCOM_DESEL
0x30
# 0.83*Vcc
# display
SET_CONTRAST
0xFF
# maximum
SET_ENTIRE_ON
# output follows RAM contents
SET_NORM_INV
# not inverted
# charge pump
SET_CHARGE_PUMP
0x10
if
self
external_vcc
else
0x14
SET_DISP
0x01
)
:
# on
self
write_cmd
(
cmd
)
self
fill
(

)
self
show
(
)
def
poweroff
(
self
)
:
self
write_cmd
(
SET_DISP
0x00
)
def
poweron
(
self
)
:
self
write_cmd
(
SET_DISP
0x01
)
def
contrast
(
self
contrast
)
:
self
write_cmd
(
SET_CONTRAST
)
self
write_cmd
(
contrast
)
def
invert
(
self
invert
)
:
self
write_cmd
(
SET_NORM_INV
(
invert
&

)
)
def
show
(
self
)
:
x0
=

x1
=
self
width

if
self
width
==

:
# displays with width of 64 pixels are shifted by 32
x0
+=

x1
+=

self
write_cmd
(
SET_COL_ADDR
)
self
write_cmd
(
x0
)
self
write_cmd
(
x1
)
self
write_cmd
(
SET_PAGE_ADDR
)
self
write_cmd
(

)
self
write_cmd
(
self
pages

)
self
write_data
(
self
buffer
)
class
SSD1306_I2C
(
SSD1306
)
:
def
__init__
(
self
width
height
i2c
addr
=
0x3C
external_vcc
=
False
)
:
self
i2c
=
i2c
self
addr
=
addr
self
temp
=
bytearray
(

)
self
write_list
=
[
b
"\x40"
None
]
# Co=0, D/C#=1
super
(
)
__init__
(
width
height
external_vcc
)
def
write_cmd
(
self
cmd
)
:
self
temp
[

]
=
0x80
# Co=1, D/C#=0
self
temp
[

]
=
cmd
self
i2c
writeto
(
self
addr
self
temp
)
def
write_data
(
self
buf
)
:
self
write_list
[

]
=
buf
self
i2c
writevto
(
self
addr
self
write_list
)
class
SSD1306_SPI
(
SSD1306
)
:
def
__init__
(
self
width
height
spi
dc
res
cs
external_vcc
=
False
)
:
self
rate
=

*
1024
*
1024
dc
init
(
dc
OUT
value
=

)
res
init
(
res
OUT
value
=

)
cs
init
(
cs
OUT
value
=

)
self
spi
=
spi
self
dc
=
dc
self
res
=
res
self
cs
=
cs
import
time
self
res
(

)
time
sleep_ms
(

)
self
res
(

)
time
sleep_ms
(

)
self
res
(

)
super
(
)
__init__
(
width
height
external_vcc
)
def
write_cmd
(
self
cmd
)
:
self
spi
init
(
baudrate
=
self
rate
polarity
=

phase
=

)
self
cs
(

)
self
dc
(

)
self
cs
(

)
self
spi
write
(
bytearray
(
[
cmd
]
)
)
self
cs
(

)
def
write_data
(
self
buf
)
:
self
spi
init
(
baudrate
=
self
rate
polarity
=

phase
=

)
self
cs
(

)
self
dc
(

)
self
cs
(

)
self
spi
write
(
buf
)
self
cs
(

)
dht.py
After uploading the SSD1306 program, open a New Tab again and copy the following code. Save the file with the name

Technologies used

ArduinoRaspberry PiDHT11SSD1306OLEDPythonI2CSPIMicroPythonHTML

Hardware components

  • Arduino
  • Raspberry Pi
  • DHT11
  • SSD1306
  • OLED

Software & tools

  • MicroPython

What you get

  • Working project / hardware kit, tested before delivery
  • Complete source code with explanation
  • Project demo and guidance for your viva
  • Project report, PPT and IEEE paper support (on request)
Delivery & Payment
Delivery takes a minimum of two weeks from the date your inquiry is confirmed. Payment is in two parts: • 50% advance to start the project • Remaining 50% before delivery Note: • Documentation and PPT are not included by default • If you need documentation/PPT, it can be arranged for extra time and cost We'll confirm the exact timeline and cost with you after reviewing your requirements.