# 使用 OLED 模組 (如 SH1106 / SSD1306... 等模組)

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2F1rAkk2uQYqFW0TXzqm9C%2FIMG_3862.jpeg?alt=media\&token=ac909f79-2e94-4c6c-986f-382563b7f84b)

[下載驅動程式](https://github.com/MediaTek-Labs/linkit-7697-peripheral-drivers-for-arduino/tree/master/U8g2_Arduino-master)

除了 Grove OLED，開發者可能還會接觸到搭載其他驅動 IC 的 OLED 模組。以 [olikraus](https://github.com/olikraus) 所開發的 [U8g\_Arduino 函式庫](https://github.com/olikraus/U8g2_Arduino)為基礎，LinkIt 7697 提供了對應的[移植版本](https://github.com/MediaTek-Labs/linkit-7697-peripheral-drivers-for-arduino/tree/master/U8g2_Arduino-master)供開發者使用與對接各式 OLED 模組，詳細的[模組支援清單](https://github.com/olikraus/u8g2/wiki/u8g2setupcpp)可至專案官方 WiKi 查詢，並參考另一篇教學瞭解如何安裝驅動程式。接下來的章節將示範如何使用 OLED 模組以及常見的問題。

### 硬體接線說明 <a href="#usingoledmodulesh1106ssd1306...etc.-ying-ti-jie-xian-shuo-ming" id="usingoledmodulesh1106ssd1306...etc.-ying-ti-jie-xian-shuo-ming"></a>

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2F424lq7A4O4XTXebsq3nJ%2Fssd1306.png?alt=media\&token=5c2beeb8-b898-494a-b2de-abe38ebec3b9)

此範例使用了 [4-pin 128x64 I2C OLED 模組](https://robotkingdom.com.tw/product/oled-display-0-96/)，請將 LinkIt 7697 的 **3V3** / **GND** / **P8** / **P9** 針腳分別接線至該 OLED 模組的 **VCC** / **GND** / **SCL** / **SDA** 腳位。並於驅動程式安裝完成後，點選 Arduino IDE 中的 **File / Examples / U8g2 / page\_buffer / GraphicsTest** 選單，接著依照下面**軟體設定**內描述的流程，修改 sketch 程式完成模組初始化、並上傳至 LinkIt 7697 執行，便能看見 OLED 模組顯示各種不同的展示畫面：

{% embed url="https://youtu.be/DSezuCMvuKM" %}

### 軟體設定 <a href="#usingoledmodulesh1106ssd1306...etc.-ruan-ti-she-ding" id="usingoledmodulesh1106ssd1306...etc.-ruan-ti-she-ding"></a>

開啟 **GraphicsTest** 範例 sketch 後，開發者會在檔案開頭看見許多被註解掉的建構函式，請依據所使用的 OLED 模組規格及驅動 IC 型號 (含連接介面，如 HW I2C 或 SPI 等) 開啟對應的建構函式。例如此範例使用了支援 **HW I2C** 的 **SH1106 OLED** 模組，那麼開發者就需要將**第 71 行**的建構函式開啟、以正確初始化顯示模組：

```
//U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);	// same as the NONAME variant, but maximizes setContrast() range
//U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
//U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);		// same as the NONAME variant, but maximizes setContrast() range
//U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather M0 Basic Proto + FeatherWing OLED
```

接著編譯並上傳此程式至 LinkIt 7697，就可以看到 OLED 模組顯示畫面。

{% hint style="danger" %}
注意事項

市面上有些標示使用 **SSD1306** 驅動 IC 的 128x64 OLED 模組並**非**真的使用該驅動 IC。當開啟 SSD1306 的建構函式驅動此 OLED 模組時，會看見整個畫面產生橫向平移的結果 (如下圖)：畫面左方被裁切、且右方有雜點。這就表示該顯示模組並非使用 SSD1306 驅動 IC，以本文的例子，該模組的正確驅動 IC 型號為 SH1106 ([原始討論](https://github.com/olikraus/u8g2/issues/149)連結)。

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2Fh1F9QRg43AP9AVszBWuL%2FIMG_3861.jpeg?alt=media\&token=c4e1c44b-746e-4352-aa13-45ecdfa29aad)
{% endhint %}
