天天看點

I2C 連接配接 12864 OLED 螢幕

我是潘,曾經是個工程師。這是為 Ardui.Co 制作的 “Arduino 公開課” 系列的入門教程。上一課介紹了I2C 協定連接配接1602 LCD。現在我們将螢幕更新到更強大的12864 OLED(也稱“1306”),讓互動界面更加豐富。有任何疑問請在評論區提出,我會逐一回答。

1602 LCD 限制很多,隻能顯示字元不能繪圖,而且每個字元的像素是分隔的,一般用在簡單的互動裝置上,比如顯示電壓、溫度等。而 12864 OLED,則是一塊功能完整螢幕,想象一下早期的諾基亞手機,利用這塊螢幕還可以設計一些像貪吃蛇等簡單遊戲。

首先,12864 OLED 螢幕有 I2C 和 SPI 兩種通信協定的模組,由于協定不同,是以完全不相容。這次使用的是 I2C 協定的模組,SPI 協定後面會介紹。不過,可以提前劇透一下,I2C 和 SPI 性能和擴充性有很大差異,在産品設計開發過程中,選用哪一種将是一場艱難的選擇。

回到正題,與 1602 LCD 的命名不同(“16”代表16個字元,“2”代表2行),12863 的含義是 128 X 64 個像素,這些像素都是連續的,可以構成不同的字元或者圖形。OLED 意味着面闆的顯示方式是 發光二極管。但 12864 也是一款單色的螢幕,是以每個像素就是一個二極管,而不是彩色的 3~4 個(一些OLED 螢幕會在 RGB 之外增加 W 白色二極管,進而提升對比度和亮度)。

一般螢幕是橫向使用的,128 個像素橫向排列在 X 軸上,分别以 0~127 來代表,64個像素垂直排列在 Y 軸上,分别以 0~63 來代表。

按照 I2C 方式接線即可:

SCL 接到 A5

SDA 接到 A4

VCC、GND 分别接 VCC 和 GND

驅動這塊螢幕要用到 U8g2 庫,可以直接從 IDE 的庫管理器中下載下傳。這個庫功能非常強大,除了能驅動 12864 外,還能驅動市面上大部分常用的LCD/OLED。而且能友善地調節字型的大小、間距,還可以顯示比較複雜的動态圖形。

安裝好後,打開示例程式,找到 “U8g2 -> full_buffer ->  HelloWorld” :

讓人崩潰的注釋,但隻要找到對應的子產品:U8G2_SSD1306_128X64_NONAME_F_SW_I2C,對于 Arduino UNO 選擇标注有 SCL、SDA 即可(第21行),把注釋去掉,其他注釋内容就能删除掉。現在,上傳程式到 Arduino 就可以工作了:

I2C 連接配接 12864 OLED 螢幕
但我們并不滿足靜态的文字,現在要讓文字動起來,讓Hello World 自上而下循環滾動,此時就要用到坐标系:
I2C 連接配接 12864 OLED 螢幕

 按照 I2C 方式接線即可:

不用對接

  • IIC 介面:
  • GND: 電源地
  • VCC: 2.2V~5.5V
  • SCL: CLK 時鐘(高電平2.2V~5.5V)
  • SDA: MOSI 資料(高電平2.2V~5.5V)尺寸:約29.5mm*27.35mm

相關開源代碼:

程式與庫與軟體打包下載下傳:https://u16460183.ctfile.com/fs/16460183-296052219

檔案夾說明:

Adafruit_SSD1306-master   ——SSD1306庫(OLED的主要庫檔案,庫請複制在Arduino的庫目錄下)

Adafruit-GFX-Library-master  —— GFX庫(是一種圖形庫)

字模提取V2.2   —— 可以生成中文字點陣變量的軟體

LS_PrintChinese —— 主程式

I2C 連接配接 12864 OLED 螢幕
I2C 連接配接 12864 OLED 螢幕
I2C 連接配接 12864 OLED 螢幕

可能有人好奇這些亂七八糟的怎麼來的?↓

這其實就用到  字模提取V2.2  的軟體了,

I2C 連接配接 12864 OLED 螢幕

分享位址:http://pan.baidu.com/s/1i50UmxB

打開軟體,具體操作如下:

I2C 連接配接 12864 OLED 螢幕

把點陣生成的數組,套入程式的相關變量,調用相關的函數就可以實作顯示中文。

其實取模軟體,就是把中文字轉換成點陣,實作在沒有中文字庫程式中顯示中文。

我想有字庫的也是這樣的點陣庫,如有了解錯誤請指出。