chapter 7
การแสดงผลด้วยจอLCD
การแสดงผลด้วย LCD (Liquid Crystal Display) สามารถแสดงผลได้ทั้งตัวเลข ตัวอักษร รูปภาพ หรือ สัญลักษณ์ต่าง ๆ ใช้งานง่าย ได้รับความนิยมอย่างแพร่หลายเนื่องจากปัจจุบนั มีราคา ถูก มีหลายรูปแบบใหเ้ลือกใช้งาน เช่นขนาด 16 ตวัอกัษร 1 บรรทัด หรือ 2 บรรทัด หรือ 4 บรรทัด เป็นต้น
โครงสร้างและการทำงานของ LCD
โครงสร้างของ LCD ประกอบด้วยแผ่นแก้ว 2 แผ่นประกบกัน โดยเว้นช่องตรงกลางไว้ 6 ถึง 10 ไมโครเมตร ผิวด้านในของแผ่นแก้วเคลือบด้วยตัวนำไฟฟ้าชนิดใส แสดงตัวอักษรระหว่างตัวนำไฟฟ้าชนิดใสกับผลึกเหลว จะมีชั้นสารที่ทำให้โมเลกุลของผลึกรวมตัวกัน ในทิศทางของแสงที่สองออกมาเรียกว่า ชั้นอไรเมนท์ (Alignment Layer) และผนึกเหลวที่เรียกว่านีเมติก (Nematic) โดย LCD แบ่งได้ 3 ลักษณะคือ
1)LCD แสดงผลตัวอักษร (Character LCD Module) ใช้สำหรับแสดงตัวอักษรและตัวเลข สัญลักษณ์ต่าง ๆ ได้เท่านั้น
2)LCD แสดงกราฟฟิก (Graphic LCD Module) สำหรับแสดงตัวอักษรและตัวเลข และสามารถแสดงรูปภาพ ได้ด้วย
3)LCD แสดงเป็นส่วน (Segment Display Type Module) สำหรับแสดงตัวเลข หรือตัวอักษร คล้าย ๆ กับ LED 7 ส่วน
โดยท้ั้งสามแบบจะมีส่วนประกอบคือ
1) ชุดแสดงผล ( DOT Matrix LCD ) เป็นตัวแสดงผลให้เรามองเห็นในลักษณะ ตัวบังแสง
2) ชุดขับ ( Driver ) เป็นตัวรับสัญญาณมาจากส่วนควบคุมเพื่อขับผลึก LCD
3) ชุดควบคุม ( Controller ) เป็นตัวรับข้อมูลและคำสั่งมาจากไมโครคอนโทรลเลอร์เพื่อควบคุม LCD ให้สามารถแสดงผล เป็นตัวอักษร ต่าง ๆ การลบ การเลื่อนตัวอักษร เป็นต้น สำหรับการเรียนรู้การแสดงด้วย LCD ในเอกสารนี้ จะใช้ตัวแสดงผล LCD แบบตัวอักษร ขนาด 16 อักษร 2 บรรทัด ซึ่งมีลักษณะและตำแหน่งขาดังในรูปที่
การควบคุมตัวแสดงผล LCD ด้วย ESP32 จะควบคุมแบบ I2C จะตอ้งส่งคา สั่งและขอ้มูลไปยงั LCD ผา่ นทางขาสัญญาณต่างๆ ซ่ึงมีชื่อขาและตา แหน่งดังตาราง
เพื่อเป็นการลดจำนวนขาในการควบคุมการแสดงผล LCD สามารถใช้การสื่อสารในรูปแบบ I2C ผ่านทางไอซี PCF8574 ควบคุมการแสดงข้อความหรือตัวเลขบนหน้าจอ LCD ได้เช่นกัน โดยใช้การสื่อสารแบบ i2C จะใช้ขาสัญญาณจากไมโครคอนโทรลเลอร์ ESP32 เพียง 2 ขาเท่านั้น คือขาสัญญาณ SDA และขาสัญญาณ SCL แล้วไอซี PCF8574 จะนำสัญญาณไปควบคุมขาสัญญาณของ LCD เพื่อควบคุมให้ทำงานตามคำสั่งของไมโครคอนโทรลเลอร์ โดยการต่อโมดูล PCF8574 กับจอแสดงผล LCD ดังรูป
โดยการติดตั้งจะนำไปเชื่อมต่อกับด้านหลังของจอแสดงผล LCD ดังแสดงในรูป
โดยจะใช้ขา GPIO 21 ทำหน้าที่เป็นขา SDA เพื่อข้อมูล และใช้ขา GPIO 22 ทำหน้าที่เป็นขา SCL เพื่อส่งสัญญาณนาฬิกา ไปยังไอซี ของจอLCD
การระบุตำแหน่งไอซี PCF8574 บนการสื่อสารแบบ I2C
จอแสดงผล LCD ที่ใช้ไอซี PCF8574 ควบคุมการสื่อสารรูปแบบ I2C นั้นจะต้องมีการกำหนดเลขหมายที่อยู่เพื่อให้ไมโครคอนโทรลเลอร์ระบุตำแหน่งที่ต่้องการสื่อสาร เนื่องจากการสื่อสารแบบ I2C จะเชื่อมต่อกันแบบขนานโดยใช้สายตัวนำเพียง 2 เส้น คือสายสัญญาณข้อมูล(SCA) กับสายสัญญาณนาฬิกา (SCL) โดยไมโครคอนโทรลเลอร์จะเป็นอุปกรณ์แม่ข่าย (Master) และให้จอแสดงผลที่มีไอซี PCF8574 เป็นอุปกรณ์ลูกข่าย (Slave) จากรูป จะเห็นว่าอุปกรณ์ลูกข่ายที่ต่ออยู่ทุกตัวจะได้รับสัญญาณและข้อมูลจากอุปกรณ์แม่ข่ายเนื่องจากใช้สายสัญญาณเดียวกัน ดังนั้นการที่อุปกรณ์ลูกข่ายแต่ละตัวจะแยกแยะได้ว่า่่แม่ข่ายต้องการสื่อสารกับอุปกรณ์ลูกข่ายตัวใดจะต้องระบุเป้าหมายของอุปกรณ์ลูกข่ายด้วยการระบุที่อยู่ด้วยเลยหมายนั่นเอง ดังลักษณะในรูป
โดยบนแผ่นวงจร PCB ของโมดูล I2C ควบคุม LCD จะมีขาจั้มเปอร์ไว้ให้กำหนดตำแหน่ง 3 ขา หรือ 3 บิต คือขา A0 A1 A2 ดังรูป ซึ่งสามารถกำหนดตำแหน่งแตกต่างได้ 8 ตำแหน่ง โดยแต่ละขาของ A0 A1 A2 จะต่อความต้านทานไปยังไฟเลี้ยง (Pull Up)
ไอซี PCF8574 จะมีผู้ผลิต 2 บริษัท คือ Texas Instruments และ NXP Semiconductors ซึ่งจะระบุตำแหน่งของ PCF8574 ที่แตกต่างกันโดยปกติการระบุตำแหน่งจะให้เลขฐาน 16 จำนวน 7 บิตหากเป็นไอซีที่ผลิตจากบริษัท Texas Instrument จะกำหนดบิตที่ 5 ให้มีค่าสถานะเป็น 1 ไว้ตลอดไม่สามารถเปลี่ยนได้ จะสามารถเปลี่ยนตำแหน่งได้ด้วยการเปลี่ยนค่าบิตที่ 0 ถึงบิต 3 เท่านั้นซึ่งก็คือกำหนดให้ขา A0 A1 A2 มีสถานะเป็นลอจิก 0 หรือลอจิก 1 ด้วยการต่อจั้มเปอร์ให้แต่ละขาลงกราวน์
หากต้องการให้บิตใดมีสถานะเป็น 0 ให้ต่อจัมเปอร์ลงกราวน์ หากต้องการให้เป็น 1 ให้ถอดจั้มเปอร์ โดยการต่อจั้มเปอร์เพื่อกำหนดตำแหน่งของไอซี สามารถกำหนดได้ 8 รูปแบบที่ไม่ซ้ำกันดังรูป
ดังนั้นหากโมดูล PCF8574 ที่ผลิตด้วยบริษัทTexas Instruments หากไม่มีการต่อจัมเปอร์ไว้เลยทั้ง 3 ขา (A0 A1 A2) สามารถระบุตำแหน่งเป็น 0x27
กรณีโมดูล PCF8574 ที่ผลิตจากบริษัท NXP บิตที่ 4 ถึงบิต 6 จะถูกกำหนดให้มีค่าสถานะเป็น 1 ไว้ตลอด ดังในรูป ดังนั้นหากโมดูล PCF8574 ที่ผลิตด้วยบริษัท NXP หากไม่มีการต่อจัมเปอร์ไว้เลยทั้ง 3 ขา (A0 A1 A2) สามารถระบุตำแหน่งเป็น 0x3F
Libraries for DHT22
To read from the DHT sensor, we’ll use the DHT library from Adafruit. To use this library you also need to install the Adafruit Unified Sensor library. Follow the next steps to install those libraries. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open. Search for “DHT” on the Search box and install the DHT library from Adafruit.
https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/
After installing the necessary libraries,The following code should load. It reads temperature and humidity, and displays the results in the Serial Monitor.
#include
#include
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(1000); // Wait a few seconds between measurements.
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: ");
Serial.print(h,1);
Serial.print("% Temperature: ");
Serial.print(t,1);
Serial.println("C");
}
When you click Run Button, A dialog will appear in the serial monitor, as shown in the image.