วันพฤหัสบดี, ธันวาคม 19

MicroPython: แสดงอุณหภูมิจาก DHT22 ที่จอ OLED ด้วย ESP32



บทความนี้นี้แสดงวิธีใช้เซ็นเซอร์อุณหภูมิและความชื้น DHT22 กับบอร์ดพัฒนา ESP32 ให้แสดงผลที่ Python shell และ แสดงผลที่จอแสดงผล OLED โดยใช้เฟิร์มแวร์ MicroPython

เซ็นเซอร์ DHT22 เมื่อเปรียบเทียบกับ DHT11 จะมีความละเอียดที่ดีกว่าและช่วงการวัดอุณหภูมิและความชื้นที่กว้างขึ้น อย่างไรก็ตามมันมีราคาแพงกว่า เล็กน้อยและคุณสามารถขออ่านได้ด้วยช่วงเวลา 2 วินาทีเท่านั้น



### อุปกรณ์ที่ใช้ ###


1. PICO KIT V4 ESP32 Development Board WiFi + Bluetooth

2. Micro USB Cable Wire 1m for NodeMCU

3. Breadboard 830 Point MB-102

4. Jumper (M2M) 20cm Male to Male

5. Blue OLED Display 0.96 inch 128X64 Module

6. DHT22/AM2302 เซ็นเซอร์วัดอุณหภูมิและความชื้น

7. รีซิสเตอร์ 10K Ohm 1/4W 5%



โดยขั้นตอนการทำงานมีดังนี้


1. เริ่มต้นใช้งาน MicroPython กับ ESP32 ด้วย uPyCraft IDE


2. การใช้งานจอแสดงผล OLED ด้วย ESP32





3. แสดงอุณหภูมิจาก DHT22 บน Python shell



DHT Pinout

เซ็นเซอร์ DHT มีสี่ขาดังแสดงในรูปต่อไปนี้




ตารางต่อไปนี้แสดง Pinout DHT22 เมื่อเซ็นเซอร์หันหน้าเข้าหาคุณการกำหนดหมายเลขเริ่มต้นที่ 1 จากซ้ายไปขวา

DHT pinConnect to
13.3V
2GPIO 14  , 10k Ohm pull-up resistor
3Don’t connect
4GND


ต่อเซ็นเซอร์ DHT22 เข้ากับบอร์ด ESP32 ดังที่แสดงในแผนผังไดอะแกรมต่อไปนี้



ในตัวอย่างนี้เรากำลังเชื่อมต่อสายข้อมูล DHT22 กับ GPIO 14 อย่างไรก็ตามคุณสามารถใช้พินดิจิทัลที่เหมาะสมอื่น ๆ ได้


3.1 อัพโหลดโค้ด ไฟล์ main.py


แก้ไขไฟล์ main.py ที่เคยสร้างไว้แล้ว (อยู่ที่คอมพิวเตอร์เรา workSpace) ตามโค้ดด้านล่าง โดย
โค้ดนี้จะรับอุณหภูมิจากเซ็นเซอร์อุณหภูมิ DHT22 และแสดงการอ่านที่ Python shell



from machine import Pin
from time import sleep
import dht 

sensor = dht.DHT22(Pin(14))

while True:
  try:
    sleep(2)
    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.')

อัพโหลดโค้ด main.py ไปยัง บอร์ด ESP32 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า download ok ที่ Python shell แถบด้านล่าง




และที่ Python shell จะแสดงอุณหภูมิที่วัดได้จาก DHT22 เป็นองศาเซลเซียส , องศาฟาเรนไฮต์ และ ความชื้น (แสดงว่าประสบความสำเร็จแล้ว)





โค้ดทำงานอย่างไร


นำเข้าคลาส Pin จากโมดูล machine เพื่อกำหนดพิน นำเข้า sleep จากโมดูล time ใช่สำหรับการหน่วงเวลา และก็นำเข้าโมดูล dht เพื่อนำเข้าฟังก์ชั่นเพื่ออ่านจากเซ็นเซอร์ DHT
from machine import Pin
from time import sleep
import dht 
กำหนดวัตถุ dht ที่เรียกว่าเซ็นเซอร์บนพินข้อมูลที่ระบุ ในกรณีนี้เรากำลังเชื่อมต่อ data pin กับ GPIO 14
sensor = dht.DHT22(Pin(14))
เพิ่มการหน่วงเวลา 2 วินาที เนื่องจากอัตราการสุ่มตัวอย่างสูงสุดของ DHT22 คือ 2 วินาที
sleep(2)
ก่อนที่จะขออุณหภูมิและความชื้น คุณต้องใช้เมธอด measure()  บนวัตถุเซ็นเซอร์
sensor.measure()
จากนั้นอ่านอุณหภูมิด้วย sensor.temperature() และความชื้นด้วย sensor.humidity() บันทึกการอ่านเหล่านั้นในตัวแปร temp และ hum
temp = sensor.temperature()
hum = sensor.humidity()
คำสั่งต่อไปนี้แปลงอุณหภูมิเป็นองศาฟาเรนไฮต์
temp_f = temp * (9/5) + 32.0
แสดงการอ่านทั้งหมดที่ Python shell โดยใช้ฟังก์ชั่น print ():
print('Temperature: %3.1f C' %temp)
print('Temperature: %3.1f F' %temp_f)
print('Humidity: %3.1f %%' %hum)
ในกรณีที่มีข้อผิดพลาดในการอ่านค่า ให้แสดงข้อผิดพลาด : Failed to read sensor.
except OSError as e:
  print('Failed to read sensor.')


4. แสดงอุณหภูมิจาก DHT22 ที่จอ OLED




4.1 อัพโหลดโค้ด ไฟล์ main.py (อีกครั้ง)

แก้ไขไฟล์ main.py ที่เคยสร้างไว้แล้ว (อยู่ที่คอมพิวเตอร์เรา workSpace) ตามโค้ดด้านล่าง โดย
โค้ดนี้จะรับอุณหภูมิจากเซ็นเซอร์อุณหภูมิ DHT22 และแสดงการอ่านที่จอ OLED




from machine import Pin, I2C
import ssd1306
from time import sleep
import dht 

i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
sensor = dht.DHT22(Pin(14))

oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

while True:
  try:
    sleep(2)
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    temp_f = temp * (9/5) + 32.0
    oled.text('T: %3.1f C' %temp, 0, 0)
    oled.text('T: %3.1f F' %temp_f, 0, 10)
    oled.text('H: %3.1f %%' %hum, 0, 20)
    oled.show()
  except OSError as e:
    oled.text('Failed to read sensor.', 0, 0)
    oled.show()

อัพโหลดโค้ด main.py ไปยัง บอร์ด ESP32 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า download ok ที่ Python shell แถบด้านล่าง




และที่จอ OLED จะแสดงอุณหภูมิที่วัดได้จาก DHT22 เป็นองศาเซลเซียส , องศาฟาเรนไฮต์ และ ความชื้น (แสดงว่าประสบความสำเร็จแล้ว)





credit : https://randomnerdtutorials.com/esp32-esp8266-dht11-dht22-micropython-temperature-humidity-sensor/

1 ความคิดเห็น:

  1. Merit Casino | Online casino | Dancer casino
    All you have to do is visit the website to enter the slot machine register to play. At Merit Casino, 메리트 카지노 고객 센터 you can win an enormous amount of prizes!

    ตอบลบ