Basic Tutorial for Arduino, 進階篇, 顯示器模組

【Arduino進階教學】SSD1306 0.96吋 OLED 顯示器模組:I2C 接線、位址檢測、Adafruit GFX 繪圖與繪製文字實作

一、 實驗說明:為什麼選擇 SSD1306 0.96 吋 OLED 顯示器?

在體積受限或需要高對比顯示的 Arduino 專題中,SSD1306 0.96 吋 OLED 顯示模組 是最熱門的首選。相較於傳統 LCD 螢幕,OLED 具備自發光特性,無需背光板,因此功耗極低、視角極廣且字體對比清晰鮮明。

核心技術與軟體架構

  1. 硬體規格: 解析度為 像素,採用極簡的 I2C 通訊介面(僅需 4 根線)。

  2. 預設 I2C 位址: 市售模組預設位址通常為 0x3C 或 0x3D。

  3. Adafruit 繪圖生態系: 結合 Adafruit_SSD1306 驅動庫與 Adafruit_GFX 圖形庫,能輕鬆完成文字、動態數據顯示與幾何點陣圖形繪製。

二、 實驗所需材料與電路接線圖 (Hardware Setup)

請依照下表將 0.96 吋 SSD1306 OLED 模組連接至 Arduino Uno。

⚠️ 注意事項: 市售 OLED 模組的 VCC 與 GND 引腳順序可能有所不同,接線前請務必確認模組上的標示,避免電源接反燒毀晶片。

🛒 準備材料

  • Arduino Uno R3 開發板 x 1

  • USB 傳輸線 x 1

  • 0.96 吋 SSD1306 OLED 模組 (I2C 介面) x 1

  • 杜邦線 若干

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

 

▼ 購買OLED 0.96吋顯示螢幕:

0.96吋 4Pin IIC I2C 白/藍/黃藍 螢幕 OLED顯示器

 

⚡ 腳位對接說明 (Pin Mapping)

SSD1306 模組腳位功能說明Arduino Uno 對應引腳
GND電源接地GND
VCC電源正極 (3.3V ~ 5V)5V 或 3.3V
SCL (SCK)I2C 序列時脈線A5 (或硬體 SCL 腳位)
SDAI2C 序列資料線A4 (或硬體 SDA 腳位)

三、 必備函式庫安裝步驟

編譯程式碼前,請先開啟 Arduino IDE 的程式庫管理員安裝以下套件:

  1. 安裝 Adafruit SSD1306 程式庫:

    • 點選選單 草稿碼 (Sketch) > 匯入程式庫 (Include Library) > 管理程式庫 (Manage Libraries)。

    • 搜尋 「Adafruit SSD1306」 並點擊安裝。

  2. 安裝 Adafruit GFX 程式庫:

    • 在程式庫管理員搜尋 「Adafruit GFX」 並點擊安裝(如跳出安裝相依套件提示,請選擇全數安裝)。

搜尋Adafruit SSD1306並點擊安裝

安裝 Adafruit SSD1306 程式庫

 

搜尋Adafruit GFX並點擊安裝

搜尋 「Adafruit GFX」 並點擊安裝,如跳出安裝相依套件提示,請選擇全數安裝

 

四、 程式碼實作範例

🔹 程式範例一:自訂文字與動態數字顯示 (Basic Text & Numerical Display)

本範例示範如何在 OLED 螢幕上設定字體大小、輸出字串。

#include <SPI.h> 
#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 

#define SCREEN_WIDTH 128 // OLED 寬度像素
#define SCREEN_HEIGHT 64 // OLED 高度像素

// 設定OLED
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


void testdrawstyles(void) {
  
  display.clearDisplay();
  display.setTextSize(2);          // 設定文字大小
  display.setTextColor(1);         // 1:OLED預設的顏色(這個會依該OLED的顏色來決定)
  display.setCursor(5,0);          // 設定起始座標
  display.print("Hello OLED");     // 要顯示的字串
  display.setCursor(26,40);        // 設定起始座標
  display.print("MiroTek");        // 要顯示的字串
  display.display();               // 要有這行才會把文字顯示出來
  delay(1000);
}


void setup() {
  Serial.begin(9600);

  // 偵測是否安裝好OLED了
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 一般1306 OLED的位址都是0x3C
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay(); // 清除畫面
  testdrawstyles();    // 測試文字
  delay(1000);
}

void loop() {

}

 

🔹 程式範例二:Adafruit 內建全圖形展示範例 (Adafruit GFX Test Demo)

若想測試 OLED 的極限效能、點陣繪圖、反白效果與幾何動畫,可直接調用 Adafruit 官方的經典測試程式:

Adafruit 內建全圖形展示範例

圖:開啟Adafruit SSD1306 >> ssd1306_128x64_i2c 範例檔。

 

圖:一般1306 OLED的位址通常都是0x3C,請將定義的位址 #define SSD1306_I2C_ADDRESS   0x3D 修改成 0x3C。修改程式完成後,即可上傳燒錄

 

五、 常見問題與除錯 (FAQ)

Q1:螢幕完全沒有顯示,傳輸區域一片黑暗?

  • 解答: 請確認 I2C 位址是否正確。市售模組常見位址為 0x3C 或 0x3D。可先執行 「I2C Scanner」 程式來掃描裝置位址,並將 display.begin(SSD1306_SWITCHCAPVCC, 0x3C) 中的位址替換成實際掃描結果。

Q2:為什麼寫了繪圖語法(如 drawRect),螢幕卻沒有任何變化?

  • 解答: Adafruit_SSD1306 採用記憶體緩衝區機制。所有的繪圖與文字指令只會先寫入 RAM,必須在程式最後呼叫 display.display(); 才會將畫面一次性刷至 OLED 實體面板。

Q3:畫面出現雜訊、雪花畫面或顯示內容嚴重偏移?

  • 解答: 請檢查面板解析度設定是否正確。常見 0.96 吋面板為 ,若購買到 0.91 吋面板(通常為 ),請將 SCREEN_HEIGHT 更改為 32 即可恢復正常。

🔗 延伸閱讀與推薦課程

📟 顯示模組控制: 【Arduino進階教學】LCD 1602 I2C 顯示模組:4線快速接線、位址檢測與程式碼範例

👈 上一篇: 【Arduino進階教學課程】驅動ILI9486 TFT 全彩3.5吋LCD顯示螢幕

👉 下一篇: 【Arduino進階教學】SSD1306 0.91吋 OLED 顯示器模組:128×32 I2C 接線、Adafruit 繪圖庫與文字動畫實作

📘 總索引: Arduino 新手學習必讀經典 – 快速索引頁面

相關文章