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

除了 Grove OLED,開發者可能還會接觸到搭載其他驅動 IC 的 OLED 模組。以 olikraus 所開發的 U8g_Arduino 函式庫為基礎,LinkIt 7697 提供了對應的移植版本供開發者使用與對接各式 OLED 模組,詳細的模組支援清單可至專案官方 WiKi 查詢,並參考另一篇教學瞭解如何安裝驅動程式。接下來的章節將示範如何使用 OLED 模組以及常見的問題。

硬體接線說明

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

軟體設定

開啟 GraphicsTest 範例 sketch 後,開發者會在檔案開頭看見許多被註解掉的建構函式,請依據所使用的 OLED 模組規格及驅動 IC 型號 (含連接介面,如 HW I2C 或 SPI 等) 開啟對應的建構函式。例如此範例使用了支援 HW I2CSH1106 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 模組顯示畫面。

注意事項

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