วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

บทนำ: ข้อมูลเบื้องต้นเกี่ยวกับจอแสดงผล OLED I2C 128*64/128*32
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

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

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

สำหรับผู้ที่มีความต้องการคล้ายกัน ต่อไปนี้เป็นคำแนะนำสั้นๆ สำหรับการเชื่อมต่อและทดสอบจอแสดงผล OLED ขนาดเล็กและราคาไม่แพง
ต่อไปเราจะพูดถึงหนึ่งในจอแสดงผล OLED รุ่นหนึ่งที่มีจำหน่ายกันอย่างแพร่หลายสำหรับนักวิทยุสมัครเล่นซึ่งควบคุมโดยชิป SSD1306 โดยมีขนาดหน้าจอ 0.96 นิ้วและความละเอียด 128 * 64 หรือ 128 * 32 พิกเซล จอแสดงผลเหล่านี้เหมาะอย่างยิ่งสำหรับการออกแบบวิทยุสมัครเล่นขนาดเล็กและโครงการโฮมเมด
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

ขั้นตอนที่ 1: แนวคิดพื้นฐาน


เราจะเชื่อมต่อกับ Arduino UNO / NANO และเราจะตั้งโปรแกรมผ่าน Arduino ด้วย
  • OLED เป็นไดโอดเปล่งแสงอินทรีย์ กล่าวคือ อุปกรณ์เซมิคอนดักเตอร์ที่ทำจากสารประกอบอินทรีย์ที่จะเริ่มเปล่งแสงเมื่อมีกระแสไฟฟ้าไหลผ่าน
  • ARDUINO เป็นแพลตฟอร์มสำหรับการฝึกอบรมและการสร้างระบบอัตโนมัติและหุ่นยนต์
  • ArduinoIDE - สภาพแวดล้อมการพัฒนา นี่คือโปรแกรมเขียนโปรแกรม Arduino ฟรี
  • I2C - วงจรรวมระหว่างสายการสื่อสารระหว่างชิป
  • Sketch หรือที่รู้จักในชื่อโค้ด หรือที่รู้จักกันในชื่อโปรแกรม - คำศัพท์เฉพาะของ Arduino

ทำตามคำแนะนำเพื่อทำความเข้าใจวิธีเชื่อมต่อและกำหนดค่าจอแสดงผล OLED กับ Arduino อย่างถูกต้อง และวิธีแสดงข้อความที่กำหนดเองบนจอแสดงผล
เราทำทุกอย่างทีละขั้นตอน

ขั้นตอนที่ 2: อุปกรณ์เสริม


เราต้องการเพียงสี่สิ่งเท่านั้น:
  • 1. ตัวจอแสดงผล OLED นั้นมีขนาด 0.96” (คุณสามารถซื้อได้ใน Aliexpress หรือ Ebay มันยาว แต่ราคาถูก!)
  • 2. Arduino UNO / Nano (ที่เดียวกับจอแสดงผล)
  • 3. การเชื่อมต่อสายไฟ (ibid.)
  • 4. คอมพิวเตอร์หรือแล็ปท็อปที่ติดตั้ง ArduinoIDE

วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

โดยทั่วไปแล้ว การซื้อชิ้นส่วนสำหรับโครงการต่างๆ ใน ​​Aliexpress และ Ebay เป็นสิ่งที่ดีมาก ในขณะที่คุณกำลังทำงานในโครงการหนึ่ง ชิ้นส่วนสำหรับอีกโครงการหนึ่งกำลังมาถึงแล้ว สิ่งสำคัญคืออย่าลืมสั่งซื้อ

ขั้นตอนที่ 3: การเชื่อมต่อจอแสดงผล


จอแสดงผลควบคุมโดยชิป SSD1306 ซึ่งรองรับโปรโตคอลการสื่อสาร 5 โปรโตคอล หนึ่งในนั้นคือ I2C ข้อมูลที่ใช้โปรโตคอลนี้จะถูกส่งผ่านสายเพียงสองสายและยิ่งมีสายน้อยกว่าในกรณีนี้ก็ยิ่งดีเท่านั้น ดังนั้นจึงค่อนข้างเหมาะกับเราแต่! มีโมดูลหลายโมดูลที่มีโปรโตคอล SPI และถึงแม้จะมีการสลับโปรโตคอล ดังนั้นควรระมัดระวังเมื่อซื้อโมดูลนี้
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

พินที่ใช้:
จอแสดงผล OLED - SCL/SCK (นาฬิกา) และ SDA (ข้อมูล), กำลัง "บวก" (VCC) และกำลัง "ลบ" (GND)
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

พินที่ใช้:
Arduino UNO - SCL/SCK บน A5 และ SSD บน A4, กำลังไฟ "บวก" (+5V) และพลังงาน "ลบ" (GND)
การเชื่อมต่อจอแสดงผลกับ Arduino:
  • วีซีซี - 5V
  • จีเอ็นดี - จีเอ็นดี
  • SDA-A4
  • SCL-A5

วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

ขั้นตอนที่ 4: เครื่องสแกน I2C


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

โดยรวมแล้วสามารถใช้ที่อยู่ได้มากถึง 127 ที่อยู่บนบัส - 119 สำหรับอุปกรณ์และที่อยู่บริการ 8 แห่ง การสื่อสารดำเนินการตามที่อยู่เหล่านี้ มีตัวหลักหรือที่รู้จักว่าอาจารย์และมีทาสหรือที่รู้จักในชื่อทาส - อาจารย์ถาม ทาสตอบ ทุกอย่างเรียบง่าย
เนื่องจากจอแสดงผล OLED ของเราใช้โปรโตคอลการสื่อสาร I2C และอาจไม่ได้ระบุที่อยู่ เราจึงพยายามค้นหาที่อยู่นี้ด้วยตนเอง

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

ขั้นตอนที่ 4: ดำเนินการต่อ:


ดาวน์โหลด CODE Finder_I2C_Hex_Address.ino อัปโหลดไปยัง Arduino
เปิด "Port Monitor" ตั้งค่าความเร็วเป็น 9600 และหากทุกอย่างเชื่อมต่ออย่างถูกต้อง โปรแกรมจะแสดงที่อยู่อุปกรณ์ ในกรณีของฉัน OLED พร้อมที่อยู่ 0x3F
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

ขั้นตอนที่ 5: ดาวน์โหลดและเชื่อมต่อไลบรารี


เพื่อให้ทุกอย่างทำงานได้อย่างถูกต้องและคุณไม่จำเป็นต้องสร้างวงล้อขึ้นมาใหม่ คุณต้องเชื่อมต่อไลบรารีสองสามตัวเข้ากับสภาพแวดล้อม ArduinoIDE ได้แก่ ADAFRUIT GFX และ ADAFRUIT SSD1306 ซึ่งจำเป็นสำหรับ Arduino เพื่อให้สามารถสื่อสารได้อย่างอิสระ ด้วยจอแสดงผลแบบ OLED
คุณสามารถรวมไลบรารีเหล่านี้ได้โดยทำตามขั้นตอนเหล่านี้
  • 1. ใน ArduinoIDE ไปที่เมนู Sketch
  • 2. เลือก “รวมไลบรารี”
  • 3.เลือก “จัดการห้องสมุด”
  • 4. ค้นหา ADAFRUIT GFX และติดตั้ง
  • 5. ค้นหา ADAFRUIT SSD1306 และติดตั้ง

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

อีกวิธีหนึ่งในการติดตั้งไลบรารีคือการค้นหา ดาวน์โหลด และติดตั้งไลบรารีเหล่านี้ด้วยตนเอง
สำหรับตัวอย่าง Github:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

เหล่านี้เป็นไลบรารี Adafruit เดียวกัน แต่สามารถค้นหาไลบรารีที่คล้ายกันในเครื่องมือค้นหาได้อย่างง่ายดาย ตามคำขอของ OLED I2C ผู้สนใจจำนวนมากเขียนห้องสมุด “เพื่อตนเอง” แล้วโพสต์บนเว็บ ห้องสมุดที่จะใช้นั้นขึ้นอยู่กับคุณ
เพื่อให้จอแสดงผลแสดงตัวอักษรรัสเซียได้ จำเป็นต้องมีห้องสมุดพิเศษด้วย แต่นี่เป็นหัวข้อแยกต่างหากสำหรับบทความแยกต่างหาก
หลังจากติดตั้งไลบรารีแล้ว คุณสามารถกลับไปที่ขั้นตอนที่ 4 และค้นหาที่อยู่เลขฐานสิบหกของจอแสดงผลของคุณได้ในที่สุด

ขั้นตอนที่ 6: การทดสอบการแสดงผล


หากต้องการตรวจสอบว่าทุกอย่างทำงานได้ตามที่คาดไว้หรือไม่ ให้รันตัวอย่างการทดสอบจาก ArduinoIDE
สำหรับสิ่งนี้:
ไปที่ ไฟล์ > ตัวอย่าง > SSD 1306 > เลือก 128x64 i2c
หากคุณได้รับ "ข้อผิดพลาด" ให้ลองเลือก SSD 1306 > 128x32 i2c
หาก "ข้อผิดพลาด" เกิดขึ้นอีกครั้ง ให้ลองเปลี่ยนที่อยู่ I2C ในบรรทัด 61 ของโค้ดสาธิต และแทนที่ด้วยที่อยู่ของจอแสดงผลที่คุณกำหนดไว้ในขั้นตอนที่ #4
หากเกิดข้อผิดพลาดอีกครั้ง คุณสามารถลองแก้ไขไฟล์ Adafruit_SSD1306.h ได้ ซึ่งอยู่ในโฟลเดอร์ไลบรารี Arduino
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

เปิดไฟล์ Adafruit_SSD1306.h ในโปรแกรมแก้ไขข้อความและค้นหาบรรทัด:
//#กำหนด SSD1306_128_64

#กำหนด SSD1306_128_32

// #define SSD1306_96_16 

ยกเลิกการแสดงความคิดเห็นบรรทัด:
#กำหนด SSD1306_128_64. 

มันควรมีลักษณะเช่นนี้:
#กำหนด SSD1306_128_64

//#กำหนด SSD1306_128_32

// #define SSD1306_96_16

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

เมื่อคุณเพลิดเพลินกับแอนิเมชั่นนี้อย่างทั่วถึงแล้ว คุณสามารถไปยังขั้นตอนถัดไปได้

ขั้นตอนที่ 7: เขียนข้อความของคุณเอง


หากต้องการเขียนข้อความของคุณเอง ขั้นแรกให้สร้างสเก็ตช์ใหม่ในสภาพแวดล้อมการเขียนโปรแกรม ArduinoIDE
ในส่วนหัวเรามี 4 ไลบรารี:
#รวม <SPI.h>

#รวม <Wire.h>

#รวม <Adafruit_GFX.h>

#รวม <Adafruit_SSD1306.h>

จากนั้นเราเขียนโปรโตคอลการรีเซ็ต:
#กำหนด OLED_RESET 4

จอแสดงผล Adafruit_SSD1306(OLED_RESET);

ใน VOID SETUP เราระบุที่อยู่เลขฐานสิบหกของจอแสดงผล 0x3C ซึ่งเราได้เรียนรู้ใน "ขั้นตอนที่ 4"
จากนั้นเราเริ่มต้นการแสดงผลและล้างข้อมูล:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay();

ต่อไป ใน VOID LOOP เราเขียนโค้ดหลัก นั่นคือข้อความของเราที่เราต้องการแสดงบนจอแสดงผล
เมื่อต้องการทำเช่นนี้ เราจะอธิบายขนาดข้อความ สีข้อความ ตำแหน่งเคอร์เซอร์ และสุดท้ายคือแสดงข้อความโดยใช้คำสั่ง println:
display.setTextSize(2);

display.setTextColor(สีขาว);

display.setCursor(0,0);

display.println("ทำได้ดีมาก!");

display.display();

ในตอนท้ายอย่าลืมเขียน จอแสดงผล.จอแสดงผลเพื่อให้ภาพนั้นปรากฏบนหน้าจอ มิฉะนั้น จะเกิดความว่างเปล่า
หากคุณทำทุกอย่างถูกต้อง ข้อความจะปรากฏขึ้นบนจอแสดงผล
วิธีเชื่อมต่อจอแสดงผล OLED I2C กับ ARDUINO

นี่คือรหัส Starting_with_Arduino_OLED.ino ของโปรแกรมของเรา:
รหัส.zip [946 ข] (ดาวน์โหลด: 4908)
ความคิดเห็น
  • หูกระต่ายรอยยิ้มหัวเราะบลัชออนยิ้มผ่อนคลายผ่อนคลายยิ้มแย้มแจ่มใส
    heart_eyesจูบ_หัวใจจูบ_ปิด_ตาแดงโล่งใจพอใจยิ้ม
    ขยิบตาStuck_out_tongue_winking_eyeStuck_out_tongue_closed_eyesยิ้มจูบStuck_out_tongueนอนหลับ
    กังวลหน้าบึ้งปวดร้าวอ้าปากทำหน้าบูดบึ้งสับสนเงียบ
    ไร้การแสดงออกไม่ขบขันเหงื่อ_ยิ้มเหงื่อผิดหวัง_โล่งใจเบื่อหน่ายเฉยๆ
    ที่ผิดหวังสับสนน่ากลัวหนาว_เหงื่ออดทนร้องไห้ร้องไห้
    ความสุขประหลาดใจกรีดร้องเหนื่อย_หน้าโกรธความโกรธชัยชนะ
    ง่วงนอนยำหน้ากากแว่นกันแดดเวียนหัว_หน้าภูตผีปีศาจsmile_imp
    neutral_faceno_mouthผู้บริสุทธิ์
4 ลบหนึ่ง =
ความคิดเห็น (10)
  1. ทาทอชก้า
    #1 ทาทอชก้า แขก 14 พฤศจิกายน 2561 21:18 น
    9
    ขอบคุณเพื่อน! นี่เป็นภาพร่างและการแนะนำ Arduino ที่ฉันอัปโหลดครั้งแรก นอกจากจะกะพริบแล้ว กะพริบตาแล้ว))
  2. อลิเชอร์
    #2 อลิเชอร์ แขก 28 กรกฎาคม 2562 19:35 น
    8
    ฉันจะดาวน์โหลดโค้ด Finder_I2C_Hex_Address.ino นี้ได้จากที่ไหน
    1. อัล
      #3 อัล แขก 14 สิงหาคม 2562 12:51 น
      11
      ใต้ภาพมีลิงค์ "นี่คือรหัส Starting_with_Arduino_OLED.ino ของโปรแกรมของเรา:"
  3. อเล็กซ์
    #4 อเล็กซ์ แขก 13 พฤศจิกายน 2562 20:01 น
    9
    ไม่ใช่ VOID SETUP หรือ VOID LOOP แต่เป็นการตั้งค่าเป็นโมฆะ(); และ void loop(); ภาษา C เป็นภาษาที่คำนึงถึงขนาดตัวพิมพ์
  4. แขกอเล็กซ์
    #5 แขกอเล็กซ์ แขก วันที่ 14 มกราคม 2563 เวลา 03:00 น
    6
    >ขั้นตอนที่ 4: ... ในกรณีของฉัน OLED พร้อมที่อยู่ 0x3F.
    แล้ว
    >ใน VOID SETUP... ที่อยู่ของจอแสดงผลของเรา 0x3Cซึ่งเราได้เรียนรู้ใน “ขั้นตอนที่ 4”
    เป็นยังไงบ้าง?
  5. แขกอเล็กซ์
    #6 แขกอเล็กซ์ แขก 14 มกราคม 2563 03:10 น
    9
    ขอบคุณ! ฉันทำทุกอย่างตามคำแนะนำของ Atmega328 Pro Mini และตรวจสอบ 0.96" ที่ซื้อมา ใช้งานได้ทั้งคู่ Arduino IDE 1.8.10
  6. ผู้อ่าน
    #7 ผู้อ่าน แขก 3 มีนาคม 2563 21:50 น
    4
    ขอบคุณ ให้คำแนะนำ ทุกอย่างได้ผล!
  7. อิลดาร์ ซาฟิซอฟ
    #8 อิลดาร์ ซาฟิซอฟ แขก 19 เมษายน 2563 19:15 น
    5
    ฉันมีคำถาม. มีจอแสดงผล OLED 2 จอที่เหมือนกับของคุณในรูปภาพ (รูปภาพที่สอง) ฉันไม่รู้ว่าจะใช้จัมเปอร์ตัวไหนในการเปลี่ยนที่อยู่
  8. แขกรับเชิญแม็กซิม
    #9 แขกรับเชิญแม็กซิม แขก 31 ตุลาคม 2563 18:53 น
    11
    ขอบคุณสำหรับบทความแต่ฉันมีปัญหา: พิกเซลในตัวอักษรเรืองแสงติดกันและแบบอักษรก็ใหญ่กว่าที่ควรจะเป็น เห็นได้ชัดว่า Arduino ไม่รู้จักความละเอียดหน้าจอ หากใครประสบปัญหาเดียวกัน มีวิธีแก้ไขดังนี้:
    #define SCREEN_WIDTH 128 // ความกว้างของจอแสดงผล OLED มีหน่วยเป็นพิกเซล
    #define SCREEN_HEIGHT 64 // ความสูงของจอแสดงผล OLED มีหน่วยเป็นพิกเซล
    จอแสดงผล Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  9. มิทรี
    #10 มิทรี แขก 9 พฤษภาคม 2564 19:35 น
    7
    ขอบคุณ! ไม่ใช่ทุกอย่างที่ได้ผลในทันที อันที่จริงที่อยู่บนหน้าจอคือ 128*64 ไม่ใช่ 0x3D แต่เป็น 0x3C และฉันก็จัดเรียงไลบรารี่ใหม่ "จากตรงกลาง" ของเวอร์ชันต่างๆ ไม่ใช่อันล่าสุดเพราะว่า... มีข้อความเกี่ยวกับค่าวิกฤติของหน่วยความจำ (ฉันมี Arduino Uno)