dht11 OLED ssd1306,簡單上手
- DHT11 和 DHT22
- 🎉MicroPython 內置庫
- 🔎創建dht實體 —— dht.DHT11(Pin)
- 🔎開始測量 —— sensor.measure()
- 🔎讀取溫度 —— sensor.temperature()
- 🔎讀取濕度 —— sensor.humidity()
- 🎉測驗代碼,Shell列印當前溫濕度
- 🔎電路連線
- 🔎測驗代碼
- 🔎測驗結果
- 🎉測驗代碼,OLED1306顯示DHT11當前溫濕度
- 🔎電路連線
- 🔎測驗代碼
- 🔎測驗結果
忘記過去,超越自己
- ??博客主頁 單片機菜鳥哥,一個野生非專業硬體IOT愛好者??
- 🎉歡迎關注🔎點贊👍收藏??留言📝
- 🙏此博客均由博主單獨撰寫,不存在任何商業團隊運營,如發現錯誤,請留言轟炸哦!及時修正!感謝支持!
- 🔥Arduino ESP8266教程累計幫助過超過1W+同學入門學習硬體網路編程,入選過選修課程,刊登過無線電雜志🔥

DHT11 和 DHT22

- Dht11和 dht22傳感器用于測量
溫度(temperature)和相對濕度(relative humidity)

🎉MicroPython 內置庫
MicroPython本身內置了dht模塊,支持DHT11、DHT22,

在Shell里面分別輸入:
>>> import dht
>>> help(dht)
>>> from machine import Pin
>>> sensor = dht.DHT11(Pin(14))
>>> help(sensor)

主要有四個步驟:
- 創建dht實體
- 開始測量
- 讀取溫度
- 讀取濕度
🔎創建dht實體 —— dht.DHT11(Pin)
# 從machine引入Pin模塊
from machine import Pin
# 引入dht模塊
import dht
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
🔎開始測量 —— sensor.measure()
# 從machine引入Pin模塊
from machine import Pin
# 引入dht模塊
import dht
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
sensor.measure()
🔎讀取溫度 —— sensor.temperature()
# 從machine引入Pin模塊
from machine import Pin
# 引入dht模塊
import dht
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
sensor.measure()
sensor.temperature()
🔎讀取濕度 —— sensor.humidity()
# 從machine引入Pin模塊
from machine import Pin
# 引入dht模塊
import dht
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
sensor.measure()
sensor.temperature()
sensor.humidity()
🎉測驗代碼,Shell列印當前溫濕度
🔎電路連線

| dht11 | ESP32 |
|---|---|
| Vin | 5V |
| GND | GND |
| Data | GPIO14 |
🔎測驗代碼
# 從machine引入Pin模塊
from machine import Pin
# 引入dht模塊
import dht
# 引入睡眠方法
from time import sleep
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
print('dht11_test')
# 不斷讀取溫濕度
while True:
try:
# 睡眠10s
sleep(10)
# 開始測量
sensor.measure()
# 讀取溫度
temp = sensor.temperature()
# 讀取濕度
hum = sensor.humidity()
temp_f = temp * (9/5) + 32.0
print('Temperature: %3.1f C' %temp)
print('Temperature: %3.1f F' %temp_f)
print('Humidity: %3.1f %%' %hum)
except OSError as e:
print('Failed to read sensor.')
🔎測驗結果
>>> %Run -c $EDITOR_CONTENT
dht11_test
Temperature: 20.0 C
Temperature: 68.0 F
Humidity: 62.0 %
Temperature: 21.0 C
Temperature: 69.8 F
Humidity: 63.0 %
Temperature: 21.0 C
Temperature: 69.8 F
Humidity: 62.0 %
當前廣州2022年1月1號的室內溫濕度,
🎉測驗代碼,OLED1306顯示DHT11當前溫濕度
🔎電路連線
| dht11 | ESP32 |
|---|---|
| Vin | 5V |
| GND | GND |
| Data | GPIO14 |
| OLED | ESP32 |
|---|---|
| Vin | 3.3V |
| GND | GND |
| SCL | GPIO5 |
| SDA | GPIO4 |

關于ssd1306的講解,請參考上一篇 ESP32 MicroPython開發之旅 設備篇⑥ —— OLED ssd1306,簡單上手,支持中英文數字
🔎測驗代碼
# 從machine模塊匯入I2C、Pin子模塊
from machine import I2C,Pin
# 引入dht模塊
import dht
# 引入睡眠方法
from time import sleep
# 從ssd1306模塊中匯入SSD1306_I2C子模塊
from lib_ssd1306 import SSD1306_I2C
def chinese(ch_str, x_axis, y_axis):
offset_ = 0
y_axis = y_axis*8 # 中文高度一行占8個
x_axis = (x_axis*16) # 中文寬度占16個
for k in ch_str:
code = 0x00 # 將中文轉成16進制編碼
data_code = k.encode("utf-8")
code |= data_code[0] << 16
code |= data_code[1] << 8
code |= data_code[2]
byte_data = fonts[code]
for y in range(0, 16):
a_ = bin(byte_data[y]).replace('0b', '')
while len(a_) < 8:
a_ = '0'+a_
b_ = bin(byte_data[y+16]).replace('0b', '')
while len(b_) < 8:
b_ = '0'+b_
for x in range(0, 8):
oled.pixel(x_axis+offset_+x, y+y_axis, int(a_[x]))
oled.pixel(x_axis+offset_+x+8, y+y_axis, int(b_[x]))
offset_ += 16
# 中文字庫 UTF-8 從 https://www.qqxiuzi.cn/bianma/guojima.php 獲取
fonts= {
0xE58D95:
[0x10,0x08,0x04,0x3F,0x21,0x21,0x3F,0x21,0x21,0x3F,0x01,0x01,0xFF,0x01,0x01,0x01,
0x10,0x20,0x40,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x00,0x00,0xFE,0x00,0x00,0x00],#"單"
0xE78987:
[0x00,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x20,0x20,0x40,
0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20],#"片"
0xE69CBA:
[0x10,0x11,0x11,0x11,0xFD,0x11,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x12,0x12,0x14,
0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0x12,0x0E,0x00],#"機"
0xE88F9C:
[0x08,0x08,0xFF,0x08,0x00,0x00,0x3F,0x11,0x08,0x01,0x7F,0x05,0x09,0x31,0xC1,0x01,
0x20,0x20,0xFE,0x20,0x10,0xF8,0x00,0x10,0x20,0x00,0xFC,0x40,0x20,0x18,0x06,0x00],#"菜"
0xE9B89F:
[0x01,0x02,0x1F,0x10,0x12,0x11,0x11,0x10,0x10,0x1F,0x00,0x00,0x7F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x10,0x10,0x10,0x50,0x20,0x00,0xFC,0x04,0x04,0xE4,0x04,0x28,0x10],#"鳥"
0xE6B8A9:
[0x00,0x23,0x12,0x12,0x83,0x42,0x42,0x13,0x10,0x27,0xE4,0x24,0x24,0x24,0x2F,0x00,
0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x00,0xFC,0xA4,0xA4,0xA4,0xA4,0xFE,0x00],#"溫"
0xE6B9BF:
[0x00,0x27,0x14,0x14,0x87,0x44,0x44,0x17,0x11,0x21,0xE9,0x25,0x23,0x21,0x2F,0x00,
0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x20,0x20,0x24,0x28,0x30,0x20,0xFE,0x00],#"濕"
0xE5BAA6:
[0x01,0x00,0x3F,0x22,0x22,0x3F,0x22,0x22,0x23,0x20,0x2F,0x24,0x42,0x41,0x86,0x38,
0x00,0x80,0xFE,0x20,0x20,0xFC,0x20,0x20,0xE0,0x00,0xF0,0x10,0x20,0xC0,0x30,0x0E],#"度"
0xE5B9BF:
[0x01,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,
0x00,0x80,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00],#"廣"
0xE5B79E:
[0x10,0x10,0x10,0x10,0x10,0x54,0x52,0x52,0x90,0x10,0x10,0x10,0x20,0x20,0x40,0x80,
0x04,0x84,0x84,0x84,0x84,0xA4,0x94,0x94,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x04],#"州"
}
# 創建oled實體
i2c = I2C(sda=Pin(5), scl=Pin(4)) #I2C初始化:sda--> Y8, scl --> Y6
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c) #OLED顯示屏初始化:128*64解析度,OLED的I2C地址是0x3c
# 創建dht實體
sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT11(Pin(14))
print('dht11_ssd1306')
# 全部滅掉
oled.fill(0)
oled.show()
# 不斷讀取溫濕度
while True:
try:
# 睡眠10s
sleep(10)
oled.fill(0)
oled.show()
# 開始測量
sensor.measure()
# 讀取溫度
temp = sensor.temperature()
# 讀取濕度
hum = sensor.humidity()
temp_f = temp * (9/5) + 32.0
print('Temperature: %3.1f C' %temp)
print('Temperature: %3.1f F' %temp_f)
print('Humidity: %3.1f %%' %hum)
# 中文一個字是 16 X 16
chinese('單片機菜鳥',0,0)
chinese('廣州',0,2)
chinese('溫度',0,4)
oled.text('%d' % (temp), 33, 41, 2)
chinese('濕度',0,6)
oled.text('%d' % (hum), 33, 56, 2)
oled.show()
except OSError as e:
print('Failed to read sensor.')
🔎測驗結果
>>> %Run -c $EDITOR_CONTENT
Warning: I2C(-1, ...) is deprecated, use SoftI2C(...) instead
dht11_ssd1306
Temperature: 20.0 C
Temperature: 68.0 F
Humidity: 63.0 %
Temperature: 20.0 C
Temperature: 68.0 F
Humidity: 63.0 %
Temperature: 20.0 C
Temperature: 68.0 F
Humidity: 63.0 %

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400371.html
標籤:其他
上一篇:2022年學習方向
