- ฮาร์ดแวร์ที่ต้องการ:
- ทำความรู้จักกับจอแสดงผล OLED:
- ฮาร์ดแวร์และการเชื่อมต่อ:
- การเขียนโปรแกรมจอแสดงผล SSD1306 OLED สำหรับ Arduino:
พวกเราส่วนใหญ่จะคุ้นเคยกับจอ LCD 16 × 2 Dot matrix ที่ใช้ในโครงการส่วนใหญ่เพื่อแสดงข้อมูลบางอย่างให้กับผู้ใช้ แต่จอ LCD เหล่านี้มีข้อ จำกัด มากมายในสิ่งที่ทำได้ ในการกวดวิชานี้เราจะเรียนรู้เกี่ยวกับการแสดงผล OLED และวิธีการใช้ Arduino มีจอแสดงผล OLED หลายประเภทในตลาดและมีหลายวิธีที่จะทำให้พวกเขาใช้งานได้ ในบทช่วยสอนนี้เราจะพูดคุยเกี่ยวกับการจำแนกประเภทและสิ่งที่เหมาะที่สุดสำหรับโครงการของคุณ
ฮาร์ดแวร์ที่ต้องการ:
- 7pin 128 × 64 โมดูลแสดงผล OLED (SSD1306)
- Arduino UNO / นาโน
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
- คอมพิวเตอร์ / แล็ปท็อป
ทำความรู้จักกับจอแสดงผล OLED:
คำว่า OLED ย่อมาจาก " Organic Light emitting diode" ซึ่งใช้เทคโนโลยีเดียวกับที่ใช้ในโทรทัศน์ส่วนใหญ่ของเรา แต่มีพิกเซลน้อยกว่าเมื่อเทียบกับพวกเขา เป็นเรื่องสนุกจริงๆที่จะมีโมดูลการแสดงผลที่ดูดีเหล่านี้เชื่อมต่อกับ Arduino เพราะมันจะทำให้โครงการของเราดูเท่ เราได้กล่าวถึงบทความฉบับเต็มเกี่ยวกับจอแสดงผล OLED และประเภทต่างๆที่นี่
เราจะใช้สีขาวดำ 7 พิน SSD1306 0.96” จอแสดงผล เหตุผลในการเลือกจอแสดงผลนี้คือสามารถทำงานกับโปรโตคอลการสื่อสารที่แตกต่างกันสามแบบเช่นโหมด SPI 3 Wire, โหมด SPI four wire และโหมด IIC บทช่วยสอนนี้จะกล่าวถึงวิธีการใช้โมดูลในโหมด SPI 4 สายเนื่องจากเป็นโหมดการสื่อสารที่เร็วที่สุดและเป็นโหมดเริ่มต้น
พินและฟังก์ชันต่างๆได้อธิบายไว้ในตารางด้านล่าง
หมายเลขพิน |
ชื่อพิน |
ชื่ออื่น |
การใช้งาน |
1 |
Gnd |
พื้น |
ขากราวด์ของโมดูล |
2 |
Vdd |
Vcc, 5V |
พินเพาเวอร์ (ทนได้ 3-5V) |
3 |
SCK |
D0, SCL, CLK |
ทำหน้าที่เป็นเข็มนาฬิกา ใช้สำหรับทั้ง I2C และ SPI |
4 |
SDA |
D1, MOSI |
พินข้อมูลของโมดูล ใช้สำหรับทั้ง IIC และ SPI |
5 |
RES |
RST, รีเซ็ต |
รีเซ็ตโมดูล (มีประโยชน์ระหว่าง SPI) |
6 |
กระแสตรง |
A0 |
พินคำสั่งข้อมูล ใช้สำหรับโปรโตคอล SPI |
7 |
CS |
ชิปเลือก |
มีประโยชน์เมื่อใช้มากกว่าหนึ่งโมดูลภายใต้โปรโตคอล SPI |
ในบทช่วยสอนนี้เราจะใช้งานโมดูลในโหมด 4-Wire SPI เราจะปล่อยให้ส่วนที่เหลือสำหรับบทช่วยสอนอื่น ๆ
ชุมชน Arduino ได้มอบไลบรารีจำนวนมากให้เราแล้วซึ่งสามารถใช้โดยตรงเพื่อทำให้สิ่งนี้ง่ายขึ้น ฉันลองใช้ห้องสมุดสองสามแห่งและพบว่าห้องสมุด Adafruit_SSD1306 นั้นใช้งานง่ายมากและมีตัวเลือกกราฟิกจำนวนหนึ่งดังนั้นเราจะใช้สิ่งเดียวกันในบทช่วยสอนนี้ แต่ถ้าโปรเจ็กต์ของคุณมีข้อ จำกัด ด้านหน่วยความจำ / ความเร็วให้ลองใช้ U8g Library เพราะมันทำงานได้เร็วขึ้นและใช้หน่วยความจำโปรแกรมน้อยลง
ฮาร์ดแวร์และการเชื่อมต่อ:
วงจรแผนภาพ SSD1306 OLED เชื่อมต่อกับ Arduinoง่ายจริงๆและแสดงอยู่ด้านล่าง
เราก็ต้องสร้างการสื่อสาร SPI ระหว่างโมดูล OLED และ Arduino เนื่องจาก OLED ทำงานบน 3V-5V และใช้พลังงานน้อยมากจึงไม่จำเป็นต้องใช้แหล่งจ่ายไฟภายนอก คุณสามารถใช้สายไฟเพื่อทำการเชื่อมต่อหรือใช้เขียงหั่นขนมตามที่ฉันใช้เพื่อให้ง่ายต่อการทดลอง การเชื่อมต่อยังระบุไว้ในนิทานด้านล่าง
ส. เลขที่ |
ชื่อพินบนโมดูล OLED |
ชื่อพินบน Arduino |
1 |
Gnd พื้นดิน |
พื้น |
2 |
Vdd, Vcc, 5V |
5V |
3 |
SCK, D0, SCL, CLK |
10 |
4 |
SDA, D1, MOSI |
9 |
5 |
RES, RST, รีเซ็ต |
13 |
6 |
DC, A0 |
11 |
7 |
CS, ชิปเลือก |
12 |
หมายเหตุ: คุณจะไม่สามารถมองเห็นแสงไฟ / เรืองแสงบนโมดูล OLED ได้เพียงแค่เปิดเครื่อง คุณต้องตั้งโปรแกรมให้ถูกต้องเพื่อสังเกตการเปลี่ยนแปลงใด ๆ บนจอแสดงผล OLED
การเขียนโปรแกรมจอแสดงผล SSD1306 OLED สำหรับ Arduino:
เมื่อการเชื่อมต่อพร้อมแล้วคุณสามารถเริ่มเขียนโปรแกรม Arduino ได้ ดังที่ได้กล่าวไว้ก่อนหน้านี้เราจะใช้ไลบรารี Adafruit และไลบรารี GFX เพื่อทำงานกับโมดูล OLED นี้ ทำตามขั้นตอนเพื่อทดสอบการใช้งานจอแสดงผล OLED ของคุณ
ขั้นตอนที่ 1:ดาวน์โหลด Adafruit Library และ GFX library จาก Github โดยใช้ลิงค์ด้านล่าง
- ห้องสมุด Adafruit
- ไลบรารีกราฟิก GFX
ขั้นตอนที่ 2:คุณควรดาวน์โหลดไฟล์ Zip สองไฟล์ ตอนนี้เพิ่มลงใน Arduino ของคุณโดยทำตาม
Sketch-> รวมไลบรารี -> เพิ่มไลบรารี Zip ดังที่แสดงด้านล่าง จากนั้นเลือกไลบรารีที่เราเพิ่งดาวน์โหลด คุณสามารถเลือกได้ครั้งละหนึ่งไลบรารีเท่านั้นดังนั้นคุณต้องทำขั้นตอนนี้ซ้ำอีกครั้ง
ขั้นตอนที่ 3:เปิดโปรแกรมตัวอย่างโดยเลือก ไฟล์ -> ตัวอย่าง -> Adafruit SSD1306 -> SSD1306_128 * 64_SPI.ino ดังที่แสดงในภาพด้านล่าง
ขั้นตอนที่ 4:ภายในโปรแกรมตัวอย่างที่ด้านบนของบรรทัด 64 ให้เพิ่มบรรทัด “ #define SSD1306_LCDHEIGHT 64” ดังแสดงในภาพด้านล่าง
ขั้นตอนที่ 5:ตอนนี้อัปโหลดโปรแกรมและคุณจะเห็นจอแสดงผล OLED เริ่มทำงานพร้อมกับโค้ดตัวอย่าง Adafruit เริ่มต้นดังที่แสดงในภาพด้านล่าง วิดีโอการทำงานเต็มรูปแบบจะได้รับในตอนท้าย
โปรแกรมตัวอย่างนี้แสดงกราฟิกที่เป็นไปได้ทั้งหมดที่สามารถแสดงบนหน้าจอ OLED รหัสนี้น่าจะเพียงพอสำหรับคุณในการสร้างบิตแมปวาดเส้น / วงกลม / สี่เหลี่ยมเล่นกับพิกเซลแสดงอักขระและสตริงด้วยแบบอักษรและขนาดที่แตกต่างกัน ฯลฯ…
หากคุณต้องการทำความเข้าใจไลบรารีและฟังก์ชันต่างๆให้ดีขึ้นคุณสามารถอ่านเพิ่มเติมได้ แต่ละรหัสแยกและอธิบายด้วยความช่วยเหลือของบรรทัดความคิดเห็น รหัสที่สมบูรณ์จะได้รับในตอนท้ายของบทความนี้
การแสดงและล้างหน้าจอ:
การเขียนบนหน้าจอ OLED ก็เหมือนกับการเขียนบนกระดานสีดำเราต้องเขียนค่าแล้วทำความสะอาดก่อนจึงจะเขียนทับได้ คำสั่งต่อไปนี้ใช้เพื่อเขียนและล้างการแสดงผล
display.display (); // เขียนเพื่อแสดง display.clearDisplay (); // ล้างการแสดงผล
การแสดงตัวแปรอักขระ:
ในการแสดงเนื้อหาภายในตัวแปรสามารถใช้รหัสต่อไปนี้
ถ่านผม = 5; // ตัวแปรที่จะแสดง display.setTextSize (1); // เลือกขนาดของข้อความ display.setTextColor (WHITE); // สำหรับการแสดงผลขาวดำเท่านั้นที่เป็นไปได้ display.setCursor (0,0); // 0,0 คือมุมบนซ้ายของจอแสดงผล OLED เขียน (i); // เขียนตัวแปรที่จะแสดง
การวาดเส้นวงกลมสี่เหลี่ยมสามเหลี่ยม:
หากคุณต้องการเพิ่มสัญลักษณ์บางอย่างในจอแสดงผลของคุณคุณสามารถใช้รหัสต่อไปนี้เพื่อวาดสิ่งต่อไปนี้
display.drawLine (display.width () - 1, 0, i, display.height () - 1, WHITE); // โมฆะ drawLine (x0, y0, x1, y1, สี); display.drawRect (i, i, display.width () - 2 * i, display.height () - 2 * i, WHITE); // โมฆะ drawRect (x0, y0, w, h, สี); display.drawTriangle (display.width () / 2, display.height () / 2-i, display.width () / 2-i, display.height () / 2 + i, display.width () / 2+ ผม display.height () / 2 + i, WHITE); // โมฆะ drawTriangle (x0, y0, x1, y1, x2, y2, สี); display.drawCircle (display.width () / 2, display.height () / 2, i, WHITE); // โมฆะ drawCircle (x0, y0, r, สี);
การวาดสตริงไปที่หน้าจอ:
สามารถใช้โค้ดส่วนต่อไปนี้ o แสดงข้อความใด ๆ บนหน้าจอในสถานที่และขนาดที่ต้องการ
display.setTextSize (2); // กำหนดขนาดของข้อความ display.setTextColor (WHITE); // การตั้งค่าสี display.setCursor (10,0); // สตริงจะเริ่มต้นที่ 10,0 (x, y) display.clearDisplay (); // ลบการแสดงผลก่อนหน้านี้บนหน้าจอ display.println ("Circuit Digest"); // พิมพ์สตริงที่นี่“ Circuit Digest” display.display (); // ส่งข้อความไปที่หน้าจอ
การแสดงภาพบิตแมป:
สิ่งที่ไม่น่าไว้วางใจอย่างหนึ่งที่สามารถทำได้กับโมดูล OLED ก็คือสามารถใช้เพื่อแสดงบิตแมปได้ รหัสต่อไปนี้ใช้เพื่อแสดงภาพบิตแมป
โลโก้ PROGMEM ที่ไม่ได้ลงนามแบบคงที่ const แบบคงที่ B10100000, B00111111, B11100000, B00111111, B11110000, B01111100, B11110000, B01110000, B01110000, B00000000, B00110000}; display.drawBitmap (XPO), YPOS, บิตแมป, w, h, WHITE); // โมฆะ drawBitmap (x, y, * bitmap, w, h, color);
ดังที่คุณเห็นในการแสดงภาพข้อมูลบิตแมปจะต้องถูกเก็บไว้ในหน่วยความจำของโปรแกรมในรูปแบบของคำสั่ง PROMGMEM พูดง่ายๆคือเราต้องสั่งให้จอแสดงผล OLED ทำอะไรกับแต่ละพิกเซลโดยส่งต่อลำดับหรือค่าจากอาร์เรย์ดังที่แสดงด้านบน อาร์เรย์นี้จะมีข้อมูลบิตแมปของรูปภาพ
อาจฟังดูซับซ้อน แต่ด้วยความช่วยเหลือของเครื่องมือเว็บมันง่ายมากที่จะแปลงรูปภาพเป็นค่าบิตแมปและโหลดลงในอาร์เรย์ด้านบน
เพียงแค่โหลดภาพและปรับการตั้งค่าเพื่อรับตัวอย่างภาพที่คุณต้องการ จากนั้นคลิก“ สร้างรหัส” คัดลอกรหัสและวางลงใน Array ของคุณ อัปโหลดโปรแกรมเท่านี้ก็เสร็จเรียบร้อย ฉันลองแสดงโลโก้แบทแมนและนี่คือสิ่งที่ปรากฎ
ยังมีสิ่งต่างๆมากมายที่คุณสามารถทำได้กับไลบรารีเหล่านี้ หากต้องการทราบความเป็นไปได้ทั้งหมดให้ไปที่หน้า Adafruit GFX graphics Primitives
หวังว่าคุณจะใช้งานได้และพร้อมที่จะใช้จอแสดงผล OLED ในบางโครงการของคุณ หากคุณมีปัญหาใด ๆ ให้แบ่งปันในส่วนความคิดเห็นและเราจะพยายามอย่างเต็มที่เพื่อแก้ไข