使用點陣型OLED顯示器,最簡單的方式,就是使用現成的函式庫來顯示中英文字或畫圓/線/框 ⋯⋯ 等圖形。
在 Arduino 的系統上,u8g2 的函式庫應該是最好用的。
由於點陣型OLED顯示器需要從CPU傳送大量的點陣資料到驅動IC上,因此需要考慮
- 介面的速度:高速的SPI介面(最快 5MHz @SH1106)會比低速的IIC (最快400KHz~1MHz)介面好。IIC雖然接腳比較少,但是在很多應用上,因為速度太慢並不合適。
- 是否使用內建字型的OLED顯示器模組。(字型檔要使用很多記憶體)
以下為本文要使用的2種使用4-Wire SPI介面 OLED 顯示器模組
https://seller.shopee.tw/portal/product/928548884
https://seller.shopee.tw/portal/product/929270114
http://goods.ruten.com.tw/item/show?21808691433791
http://goods.ruten.com.tw/item/show?21808691338964.
在 Arduino 上要使用 u8g2, 要先安裝 u8g2 的函式庫,請到以下的網址去看如何安裝
https://github.com/olikraus/u8g2/wiki/u8g2install
安裝完成後,連接 Arduino MEGA 2560 到 OLED 顯示器模組
Arduino MEGA 2560 OLED 模組(含內建中英文字型) OLED 模組(不含字型)
46 CS2 (字型檔晶片選擇) RES
47
48 CS1 (SH1106 晶片選擇) CS
49 DC (資料/命令設定) DC
50 MISO FSO (字型IC資料輸出) -----
51 MOSI MOSI (輸出資料到LCD/字型IC) MOSI
52 SCK CLK CLK
53 SS ------ -----
3.3V 3.3V 3.3V
GND GND GND
連接完成後,在檢查一遍,確認沒有接錯後,就可以開始寫程式了。下面的連結有 u8g2 的範例程式,
https://github.com/olikraus/u8g2/wiki/setup_tutorial
範例程式的 CPU板子不是 Arduino MEGA 2560, 因此要修改 Constructor 的設定 (下面紅字的部分). 為達最快速度,使用硬體 SPI 來傳送資料,而不使用軟體 SPI 的方式。
//#define OledPanelWithFontBuiltIn
#include <Arduino.h>
#include <U8g2lib.h>
#include <U8x8lib.h>
#ifdef OledPanelWithFontBuiltIn
#define SPI_CS2 46
#define SPI_FSO 47
#define SPI_CS1 48
#define SPI_DC 49
U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, SPI_CS1, SPI_DC);
#else
#define SPI_RESET 46
#define SPI_CS 48
#define SPI_DC 49
U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, SPI_CS, SPI_DC, SPI_RESET);
#endif
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB14_tr);
#ifdef OledPanelWithFontBuiltIn
u8g2.drawStr(2,32,"Hello World1");
#else
u8g2.drawStr(2,32,"Hello World2");
#endif
} while ( u8g2.nextPage() );
}
如果在有內含字型檔的螢幕上顯示 "HelloWorld1" 如下圖,就表示一切都正常。
或在沒有內含字型檔的螢幕上顯示 "HelloWorld2" 如下圖,就表示一切都正常。
下一篇:如何使用 Arduino MEGA 2560 SPI 介面和內含中英文字庫的 1.3吋 12864 點陣型 OLED 顯示器模組 (二)
https://www.blogger.com/blogger.g?blogID=7530656930048997875#editor/target=post;postID=8731948848737741146;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=postname