ESP32 DHT11 การอ่านค่าอุณหภูมิและความชื้นในจอแสดงผล OLED โดยใช้ Arduino IDE

Esp32 Dht11 Kar Xan Kha Xunhphumi Laea Khwamchun Ni Cxsae Dng Phl Oled Doy Chi Arduino Ide



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

บทช่วยสอนนี้ครอบคลุมเนื้อหาต่อไปนี้:







1: รู้เบื้องต้นเกี่ยวกับเซ็นเซอร์ DHT11



2: Pinout เซ็นเซอร์ DHT11



2.1: เซ็นเซอร์ DHT11 3 ขา





2.2: เซ็นเซอร์ DHT11 4 ขา

3: โมดูลแสดงผล OLED พร้อม ESP32



4: การติดตั้งไลบรารีที่จำเป็น

4.1: Arduino Library สำหรับเซ็นเซอร์ DHT

4.2: Arduino Library สำหรับจอแสดงผล OLED

5: การเชื่อมต่อ ESP32 กับเซ็นเซอร์ DHT11

5.1: แผนผัง

5.2: รหัส

5.3: เอาท์พุต

1: รู้เบื้องต้นเกี่ยวกับเซ็นเซอร์ DHT11

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

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

นี่คือข้อกำหนดทางเทคนิคหลักของ DHT11:

    • เซ็นเซอร์ DHT11 ทำงานที่แรงดันไฟฟ้า 5V ถึง 5.5V
    • กระแสไฟขณะทำการวัดคือ 0.3mA และระหว่างเวลาสแตนด์บายคือ 60uA
    • มันส่งออกข้อมูลอนุกรมเป็นสัญญาณดิจิตอล
    • ช่วงอุณหภูมิของเซ็นเซอร์ DHT11 ตั้งแต่ 0°C ถึง 50°C
    • ช่วงความชื้น: 20% ถึง 90%
    • ความแม่นยำ ±1°C สำหรับการวัดอุณหภูมิ และ ±1% สำหรับการอ่านค่าความชื้นสัมพัทธ์

เนื่องจากเราได้กล่าวถึงการแนะนำเบื้องต้นเกี่ยวกับเซ็นเซอร์ DHT11 แล้ว เรามาต่อกันที่พินเอาท์ของ DHT11 กัน

2: Pinout เซ็นเซอร์ DHT11

ส่วนใหญ่แล้วเซ็นเซอร์ DHT11 จะมีการกำหนดค่าพินที่แตกต่างกันสองแบบ เซ็นเซอร์ DHT11 ที่มาในการกำหนดค่า 4 พินมี 3 พินไม่ทำงานหรือติดป้ายว่าไม่มีการเชื่อมต่อ

โมดูลเซ็นเซอร์ DHT11 แบบ 3 ขามาในสามขาซึ่งรวมถึงพลังงาน, GND และพินข้อมูล

2.1: เซ็นเซอร์ DHT11 3 ขา

ภาพที่แสดงการกำหนดค่า 3 ขาของเซ็นเซอร์ DHT11


หมุดทั้งสามนี้คือ:

1. ข้อมูล อุณหภูมิและความชื้นเอาต์พุตในข้อมูลอนุกรม
2. วีซีซี กำลังไฟฟ้าเข้า 3.5V ถึง 5.5V
3. จีเอ็นดี GND ของวงจร

2.2: เซ็นเซอร์ DHT11 4 ขา

ภาพต่อไปนี้แสดงโมดูลเซ็นเซอร์ DHT11 4 พิน:


พินทั้ง 4 นี้ประกอบด้วย:

1. วีซีซี กำลังไฟฟ้าเข้า 3.5V ถึง 5.5V
2. ข้อมูล อุณหภูมิและความชื้นเอาต์พุตในข้อมูลอนุกรม
3. เอ็น.ซี ไม่มีการเชื่อมต่อหรือไม่ได้ใช้
สี่ จีเอ็นดี GND ของวงจร

3: โมดูลแสดงผล OLED พร้อม ESP32

จอแสดงผล OLED ส่วนใหญ่มาพร้อมกับโปรโตคอลการสื่อสารสองแบบที่แตกต่างกัน สองโปรโตคอลคือ I2C และ SPI โดยทั่วไปแล้ว Serial peripheral interface (SPI) จะเร็วกว่า I2C แต่เราต้องการ I2C มากกว่าโปรโตคอล SPI เนื่องจากต้องใช้พินจำนวนน้อยกว่า

รูปภาพต่อไปนี้แสดงแผนภาพการเชื่อมต่อ ESP32 พร้อมจอแสดงผล OLED 128 × 64 พิกเซล (0.96 นิ้ว)


ด้านล่างนี้เป็นตารางการเชื่อมต่อ:


เมื่อเชื่อมต่อ ESP32 กับจอแสดงผล OLED แล้ว ขั้นตอนต่อไปในรายการคือติดตั้งไลบรารีที่จำเป็นทั้งหมดสำหรับการเขียนโปรแกรม ESP32 โดยใช้ Arduino IDE

4: การติดตั้งไลบรารีที่จำเป็น

ที่นี่เราจะเชื่อมต่อเซ็นเซอร์สองตัวที่แตกต่างกันกับ ESP32 ดังนั้นทั้งคู่จึงต้องการไลบรารีแยกกันเพื่อใช้งาน ตอนนี้เราจะติดตั้งไลบรารีสำหรับ DHT11 และจอแสดงผล OLED

4.1: Arduino Library สำหรับเซ็นเซอร์ DHT

เปิด Arduino IDE ไปที่: Sketch>รวมไลบรารี>จัดการไลบรารี

นอกจากนี้ เรายังสามารถเปิดตัวจัดการไลบรารีได้จากปุ่มด้านข้างบนอินเทอร์เฟซ Arduino IDE

ค้นหาไลบรารี DHT และติดตั้งเวอร์ชันอัปเดตล่าสุด ไลบรารี DHT จะช่วยในการอ่านข้อมูลเซ็นเซอร์


หลังจากติดตั้งไลบรารี DHT แล้ว ต่อไปเราต้องติดตั้งไฟล์ ห้องสมุดเซ็นเซอร์แบบรวม โดย อดาฟรุต

4.2: Arduino Library สำหรับจอแสดงผล OLED

มีไลบรารีหลายตัวใน Arduino IDE เพื่อตั้งโปรแกรม ESP32 ด้วยจอแสดงผล OLED ที่นี่เราจะใช้สองไลบรารีจาก Adafruit: ไลบรารี SSD1306 และ GFX

เปิด IDE แล้วคลิก Library Manager และค้นหาไลบรารี OLED SSD1306 ติดตั้งไลบรารี SSD1306 โดย Adafruit จากแถบค้นหา

หรือคุณสามารถไปที่: Sketch>รวมไลบรารี>จัดการไลบรารี


ไลบรารีถัดไปที่เราต้องติดตั้งคือ GFX ห้องสมุดโดย Adafruit


เราได้ติดตั้งไลบรารีสำหรับทั้งจอแสดงผล OLED และเซ็นเซอร์ DHT11 ตอนนี้เราสามารถเชื่อมต่อทั้งสองอย่างกับ ESP32 ได้อย่างง่ายดาย

5: การเชื่อมต่อ ESP32 กับเซ็นเซอร์ DHT11 และ OLED

สำหรับการเชื่อมต่อ ESP32 กับเซ็นเซอร์ DHT11 เราจำเป็นต้องมีพินดิจิทัลสำหรับอ่านข้อมูลเซ็นเซอร์และจ่ายไฟให้เซ็นเซอร์ DHT11 เราสามารถใช้พิน 3V3 หรือพิน Vin ของ ESP32

สำหรับจอแสดงผล OLED I2C พิน SDA และ SCL จะถูกใช้ สำหรับการเปิดเครื่องเราสามารถใช้ Vin หรือพิน 3V3 ของ ESP32

5.1: แผนผัง

ในภาพที่กำหนดเราสามารถเห็นแผนผังของ ESP32 กับ DHT11 และสำหรับเอาต์พุตจะใช้หน้าจอ OLED ภาพนี้แสดงถึงโมดูลเซ็นเซอร์ 3 พินที่เชื่อมต่อกับ ESP32 อย่าลืมเชื่อมต่อตัวต้านทานแบบดึงขึ้น 10kΩ


ในทำนองเดียวกัน ยังสามารถเชื่อมต่อ 4 ขา DHT11 ได้ด้วย ข้อแตกต่างเพียงอย่างเดียวคือ 3 ขาที่ไม่ใช้งานหรือเรียกว่าไม่มีการเชื่อมต่อ พินข้อมูลอยู่ที่พิน 2 ของเซ็นเซอร์

จอแสดงผล OLED เชื่อมต่อโดยใช้พิน I2C SDA และ SCL ที่ D21 และ D22 ตามลำดับ

5.2: รหัส

เชื่อมต่อ ESP32 กับพีซีและเปิด Arduino IDE อัปโหลดรหัสที่กำหนดไปยังบอร์ด ESP32

#include             /*รวมไลบรารีการสื่อสารผ่านสาย*/
#รวม
#include /*คลังแสดงผล OLED*/
#รวม
#include             /*ไลบรารีเซ็นเซอร์อุณหภูมิและความชื้น*/
#define SCREEN_WIDTH 128   /*หน้าจอ OLED กว้าง 128 พิกเซล*/
#define SCREEN_HEIGHT 64   /*หน้าจอ OLED สูง 64 พิกเซล*/
จอแสดงผล Adafruit_SSD1306 ( SCREEN_WIDTH, SCREEN_HEIGHT, & ลวด, - 1 ) ; /* การเริ่มต้นการแสดงผล SSD1306 I2C */
#กำหนด DHTPIN 4          /*ขาสัญญาณสำหรับเซ็นเซอร์ DHT11*/
#กำหนด DHTTYPE    DHT11
ดีเอชที ดีเอชที ( DHTPIN, DHTTYPE ) ;
การตั้งค่าเป็นโมฆะ ( ) {
Serial.begin ( 115200 ) ;
dht.begin ( ) ;
ถ้า ( ! display.begin ( SSD1306_SWITCHCAPVCC, 0x3C ) ) { /* ที่อยู่ I2C ที่ ที่ เชื่อมต่อ OLED แล้ว */
Serial.println ( ( 'การจัดสรร SSD1306 ล้มเหลว' ) ) ;
สำหรับ ( ;; ) ;
}
ล่าช้า ( 2543 ) ;
display.clearDisplay ( ) ;
display.setTextColor ( สีขาว ) ; /* สีข้อความเอาต์พุตเป็นสีขาว */
}
วนเป็นโมฆะ ( ) {
ล่าช้า ( 5,000 ) ;
float t = dht.readTemperature ( ) ; /* อ่าน อุณหภูมิ */
ลอย h = dht.readHumidity ( ) ; /* อ่าน ความชื้น */
ถ้า ( เป็น ( ชม. ) || เป็น ( ที ) ) {
Serial.println ( 'ไม่สามารถอ่านจากเซ็นเซอร์ DHT!' ) ;
}
display.clearDisplay ( ) ; /* แจ่มใส จอแสดงผล OLED ก่อนแสดงการอ่าน */
display.setTextSize ( 1 ) ; /* แบบอักษรข้อความ OLED ขนาด */
display.setเคอร์เซอร์ ( 0 , 0 ) ;
display.print ( 'อุณหภูมิ: ' ) ;
display.setTextSize ( 2 ) ;
display.setเคอร์เซอร์ ( 0 , 10 ) ;
display.print ( ที ) ; /* อุณหภูมิการพิมพ์ ใน เซลเซียส */
display.print ( ' ' ) ;
display.setTextSize ( 1 ) ;
display.cp437 ( จริง ) ;
แสดง เขียน ( 167 ) ;
display.setTextSize ( 2 ) ;
display.print ( 'ค' ) ;

display.setTextSize ( 1 ) ;
display.setเคอร์เซอร์ ( 0 , 35 ) ;
display.print ( 'ความชื้น: ' ) ;
display.setTextSize ( 2 ) ;
display.setเคอร์เซอร์ ( 0 , สี่ห้า ) ;
display.print ( ชม. ) ; /* พิมพ์เปอร์เซ็นต์ความชื้น */
display.print ( '%' ) ;
display.display ( ) ;
}


รหัสเริ่มต้นด้วยการรวมไลบรารีที่จำเป็นสำหรับเซ็นเซอร์ OLED และ DHT11 หลังจากนั้นกำหนดขนาดจอแสดงผล OLED ถัดไป กำหนดประเภทเซ็นเซอร์ DHT ในกรณีที่คุณใช้ DHT22 ให้เปลี่ยนตามนั้น

ในส่วนการตั้งค่า เซ็นเซอร์ DHT และจอแสดงผล OLED ได้รับการเริ่มต้น หน้าจอ OLED เชื่อมต่อที่ที่อยู่ I2C 0x3C ในกรณีที่ต้องการตรวจสอบที่อยู่ I2C ให้อัปโหลดรหัสที่ให้ไว้ในนี้ บทความ .

ค่าอุณหภูมิและความชื้นจะถูกเก็บไว้ภายในตัวแปรโฟลต ที และ ชม. ตามลำดับ หลังจากนั้นค่าทั้งสองนี้จะพิมพ์บนจอแสดงผล OLED

5.3: เอาท์พุต

ในเอาต์พุต เราสามารถเห็นอุณหภูมิและความชื้นที่วัดได้ตามเวลาจริงที่แสดงบนหน้าจอ OLED




เราเชื่อมต่อ ESP32 กับเซ็นเซอร์ DHT11 และหน้าจอ OLED สำเร็จแล้ว

บทสรุป

จอแสดงผล OLED พร้อม ESP32 สามารถแสดงข้อมูลหลายรายการที่อ่านโดยใช้เซ็นเซอร์ภายนอก บทความนี้ครอบคลุมขั้นตอนทั้งหมดเพื่อเชื่อมต่อ ESP32 กับเซ็นเซอร์ DHT11 เพื่อวัดอุณหภูมิและความชื้นของห้อง หลังจากนั้นข้อมูลที่อ่านทั้งหมดจะแสดงบนโมดูลจอแสดงผล I2C OLED