步驟1:我們要做的事情今日學習
我們將討論:
-什么是OLED顯示器?
-然后我們將仔細研究0.91(128x32)和0.96(128x64)I2C OLED顯示器
-接下來,我們將討論將Adafruit庫安裝到Arduino IDE
-然后我們將NodeMCU和Arduino連接到OLED顯示器
-接下來,我們將看一下代碼并在其中顯示一些圖形和文本
-我們還將討論應用自定義字體和顯示圖像
-然后,我們將使用I2C多路復用器將多個OLED連接到微控制器
-最后,我們將討論人們在使用OLED顯示器時犯的一些常見錯誤
步驟2:硬件要求
對于本教程,我們需要:
-A面包板
-一個0.91英寸(128x32)和0.96英寸(128x64)I2C OLED顯示器
-Arduino UNO/NANO(方便使用)
-NodeMCU
-TCA9548A I2C多路復用器
-很少使用連接電纜
-和一根USB電纜來上傳代碼
步驟3:什么是OLED顯示器?
OLED或有機發光二極管是發光的
二極管(LED),其中的電致發光元件該層是一層有機化合物薄膜(數百萬個小的LED燈),可響應電流而發光。
OLED用于在電視屏幕,計算機顯示器,便攜式系統等設備中創建數字顯示器。例如手機,手持游戲機和PDA。 OLED顯示器不發光,因為它發出可見光。
步驟4:
OLED顯示器的類型很多
市場上的
-尺寸
-顏色
-品牌
-協議
-SPI(串行外圍接口)或I2C
-無源矩陣(PMOLED)或有源矩陣(AMOLED)控制方案
我將討論將藍色的0.91(128x32 OLED)和0.96(128x64 OLED)I2C OLDE顯示器連接到Arduino NANO和NodeMCU。 I2C總線技術僅使用MCU的2個引腳,因此我們可以為其他傳感器提供堆。
步驟5:細看
在這兩個顯示器上放個更近些。
在這些顯示器的背面,有很多貼片SMD電容器和電阻器焊接在板上。但是,由于它是I2C設備,我們只關心這2個引腳(SCL和SDA)
顯示器僅使用四根電線連接到Arduino –兩根用于電源(VCC和GND),兩根用于數據(串行)時鐘SCL和
串行數據SDA),從而使接線非常簡單。數據連接為I2C(I2C,IIC或內部集成電路),該接口也稱為TWI(兩線接口)。
-板載引腳的順序可以不同,因此始終為三重在將其連接到項目之前,請進行檢查。
-工作電壓在3v至5v之間,但是,最好使用制造商數據表中的指導。
-有時我們需要在項目中使用2個顯示器。那么,我們如何實現呢?
訣竅是在顯示器上顯示一個可配置的地址。該單元的可配置地址在0x78和0x7A之間。只需從一側解焊0Ohm電阻器并將其連接到另一側,或者僅通過放置全局焊料即可更改地址。在本教程后面的部分中,當我們將多個顯示器連接到Arduino時,我們將深入討論它。
在圖中,這些顯示器看起來非常大。但是,實際上,它們很小。它們由128 x 32/64個單獨的OLED像素制成,不需要任何背光??纯催@個,看看它有多小。即使它們很小,它們也可以在任何電子項目中非常有用。
步驟6:庫
有幾個庫可以控制這些顯示
。過去我曾經使用過“ u8glib庫”,但是我發現AdaFruit庫在我們的項目中非常易于理解和使用。因此,我將在本教程中使用AdaFruit庫。
要控制OLED顯示,您需要“ adafruit_GFX.h”庫和“ adafruit_SSD1306.h”庫。
有兩種下載庫并將其安裝到Arduino IDE的方法。
方法1
轉到“庫管理器”并搜索“ adafruit_SSD1306”和“ adafruit_gfx” “
選擇最新版本,然后單擊“安裝”按鈕。
安裝后,您可以在程序中使用這些庫。
方法2
這兩個庫也可以從github下載(兩者都需要):
我將在下面的描述中提供鏈接。
顯示庫:https://github.com/adafruit/Adafruit_SSD1306
GFX庫:https://github.com/adafruit/Adafruit-GFX-Library
下載后,從以下位置復制Adafruit_SSD1306-master文件夾將下載的壓縮文件下載到Arduino庫文件夾中。通常在Windows系統上的文檔》 Arduino》庫中可以找到此文件夾。在Linux上,通常位于主文件夾》 Arduino》庫中。最后,在Arduino庫文件夾中,將Adafruit_SSD1306-master文件夾重命名為Adafruit_SSD1306。
步驟7:
現在,讓我們看一下“ Adafruit_SSD1306” .h“
文件
在此庫中我們需要了解兩件事:
1。如果要使用較小的顯示器,請使用默認的128_32,否則對于較大的顯示器請注釋128_32,然后取消注釋128_64
2。如果您已將0x7A地址焊接在板上(稍后將討論),則將7位0x3D地址用于較大的顯示器,否則使用默認的0x3C地址。對于較小的顯示器,地址為0x3C。
步驟8:為128 X 64/32 OLED布線
讓我們從連接開始
要注意的第一件事,也是最重要的一點是,某些顯示器可能會交換GND和VCC電源引腳。檢查您的顯示器以確保它與圖像相同。如果引腳被交換,請確保更改與Arduino或NodeMCU的連接。
-NodeMCU OLED接線
OLED VCC – NodeMCU 3.3V
OLED GND – NodeMCU GND
OLED SCL – NodeMCU D1
OLED SDA – NodeMCU D2
-Arduino Uno OLED接線
OLED VCC – Arduino 5V
OLED GND – Arduino GND
OLED SCL – Arduino Uno A5
OLED SDA – Arduino Uno A4
-Arduino MEGA 2560 OLED接線
OLED VCC – Arduino 5V
OLED GND – Arduino GND
OLED SCL – Arduino MEGA 2560引腳21
OLED SDA – Arduino MEGA 2560引腳20
第9步:代碼
Adafruit庫提供了非常好的示例,用于顯示128x32和128x64。
該庫位于“文件”》“示例”》“ Adafruit SSD1306”下,然后顯示
我們將使用128x32 I2C示例,并將其修改為可與128x64和128x32顯示器一起使用通過將其連接到Arduino,然后連接到NodeMCU板。
代碼首先包括兩個Adafruit庫。在本教程中,我將只強調代碼的那些部分,這些部分是我們在板上和顯示器上加載所必需的。如果您想了解更多有關代碼的信息,請在我的博客或下面的評論部分中添加評論,我會盡力與您聯系。
-首先,我們將代碼加載到Arduino Nano連接到128x32顯示器。
我們可以按原樣使用該代碼,而無需進行任何修改。
128x32使用0x3C地址,因此此位看起來很好,讓我們仔細檢查標頭庫,是的,它也使用0x3C地址,顯示類型為128x32。
-現在可以連接128x64顯示器。我們知道它默認情況下使用0x3C地址,因此我們不需要在代碼或庫中更新地址。
我們只需要注釋128_32并在注釋中取消注釋128_64。標頭庫,然后在我們的代碼中將LCDHEIGHT更改為64。
-現在要在NodeMCU上運行相同的代碼,我們需要在代碼中再更改一行。
“ #define OLED_RESET 4”》“ #define OLED_RESET LED_BUILTIN”其余部分代碼與Arduino
差不多,顯示所有我們首先需要使用
display.clearDisplay()清除上一個屏幕的內容。//清除緩沖區
然后繪制對象
testdrawline();//畫一條線
在硬件上顯示它
display.display();//使它們在顯示硬件上可見!
等待一段時間,然后顯示下一個項目。
delay(2000);//等待2秒
在此示例中,我們將顯示一些項目,例如文本,線條,圓圈,滾動文本,三角形等等。繼續發揮您的想象力,并在這些微型顯示屏上顯示任何內容。
步驟10:自定義文本和添加圖像
有時您的代碼需要顯示自定義字體和
圖像。如果您在位映射方面非常擅長,那么您只需要通過打開或關閉顯示器的微小LED來創建自定義字體和圖像來創建字節數組即可。
但是,我在進行這些映射,并且不想花費數小時來創建位圖表。
那么,我有什么選擇?我通常使用兩個網站來生成自定義字體和圖像。鏈接在下面的描述中提供。
自定義字體
------------
轉到字體轉換器網站,選擇字體系列,樣式,大小,庫版本作為“ Adafruit GFX字體”,然后單擊“創建”按鈕。在此頁面的右側,您可以看到實際顯示的字體。
根據您的選擇,網頁將生成字體頭文件。在您的代碼所在的文件夾中創建一個名為“ modified_font.h”的文件,并將生成的代碼復制并保存到其中。然后,您只需要在代碼中包括頭文件即可使用自定義字體。
#include“ modified_font.h”
然后,您只需要在顯示之前設置字體即可
display.setFont(&Your_Fonts_Name);
您可以從剛添加到項目中的頭文件中獲取字體的名稱。就是這樣,很容易。
使用自定義字體時,內存始終是個問題,因此請始終考慮內存將消耗的字節。只要記住Arduino UNO只有32K的內存即可。
自定義圖像
-------------
顯示位圖屏幕上的圖像,您首先需要創建一個128 x 64/32尺寸的圖像。
我正在使用舊的“ MS Paint”創建一個128 x 64位圖圖像,然后將其上傳到此圖像。圖像轉換器網站。該網站將圖像轉換為字節串,可與Arduino和OLED顯示器一起使用。
首先將圖像上傳到網站。然后選中“反轉圖像顏色”復選框,然后將“輸出代碼格式”更改為“ Arduino代碼”,然后選擇方向并單擊“生成代碼”按鈕以生成字節數組。 “預覽”部分向您顯示圖像在實際顯示器上的外觀。
我在本教程中隨附了代碼,可用于顯示圖像。您只需要用剛生成的陣列替換我的代碼中的陣列,然后將其加載到Arduino。
步驟11:連接2臺顯示器
將兩個128 x 64顯示器連接到您的項目很容易。
您只需要從0x78地址上拆下0Ohm電阻并將其放在0x7A上,然后在代碼中使用0x3D地址而不是默認的0x3C。
您一定想知道為什么我們使用0x3C和0x3D地址而不是實際的0x78和0x7A。 Arduino接受7位地址,而不接受8位硬件地址。因此,我們首先需要將8位地址轉換為二進制,然后將最低有效位切掉以獲得7位。然后將7位轉換為十六進制,以獲取您在代碼中輸入的0x3C或0x3D地址。
首先,通過為顯示指定一個唯一的名稱來初始化顯示:
Adafruit_SSD1306 display1( OLED_REST);
Adafruit_SSD1306 display2(OLED_REST);
然后在代碼中使用顯示1和顯示2調用帶有其中設備地址的begin語句:
display1.begin(SSD1306_SWITCHCAPVCC,0x3C);//顯示1個op地址0x3C
display2.begin(SSD1306_SWITCHCAPVCC,0x3D);//顯示2個操作地址0x3D
就是這樣,您現在可以繼續使用其余代碼中的Display 1或Display 2來做您想做的任何事情。我在本教程中提供了一個示例。
接線與我們之前所做的完全相同,幾乎您只需要在Arduino或NodeMCU的相同I2C引腳上添加另一個顯示器即可。然后,MCU將根據這些地址在I2C數據線上發送數據。
步驟12:連接2個以上的顯示器
現在,如果要連接兩個以上的顯示器怎么辦?
Arduino的引腳數量有限,因此您所連接的屏蔽數量不能超過一定數量。而且,它只有一對I2C總線。
那么,如何將兩個以上的I2C顯示器連接到Arduino?訣竅是使用TCA9548多路復用器。
TCA9548通過為每個傳感器從屬子分配一個唯一的通道,使單個微控制器可以與多達64個具有相同或不同I2C地址的傳感器進行通信。 -bus。
當我們談論通過2根線將數據發送到多個設備時,我們需要一種解決它們的方法。就像郵遞員走一條路,將郵件包投到不同的房子一樣,因為它們上面寫有不同的地址。
多路復用器連接到微型計算機的3V3,GND,SDA和SCL線路控制器。從傳感器連接到板上的八個SCL/SDA從端口之一。通過向TCA9548A發送其I2C地址(0x70 {默認}-0x77),然后是通道號(0b00000001-0b10000000)來選擇通道。為了控制64個相同的I2C尋址部分,您最多可以將8個這些多路復用器連接在一起在0x70-0x77地址上。通過將三個地址位A0,A1和A2連接到VIN,您可以獲得地址的不同組合。我將在我的下一個關于TCA9548A突破板的教程中對此進行深入解釋?,F在,讓我們將8個OLED連接到該板上并快速查看代碼。
連接:
VIN至5V(或3.3V)
GND接地
SCL到I2C時鐘
SDA到I2C數據
然后將傳感器連接到VIN,GND并使用SCn/SDn多路復用總線
現在,Int代碼首先要包含“ Wire”庫并定義多路復用器地址。
#include“ Wire.h”
#include
#define MUX_Address 0x70//TCA9548A編碼器地址
然后我們需要使用此功能選擇我們要通信的端口并在其上發送數據:
void tcaselect(uint8_t i){
if(i》 7)return;
Wire.beginTransmission(MUX_Address);
Wire.write(1 《
Wire.endTransmission();
}
接下來,我們將通過調用“ u8g.begin();”來初始化設置部分的顯示。對于連接到MUX“ tcaselect(i);”的每個顯示,一旦初始化,我們就可以通過調用函數“ tcaselect(i);”來完成我們想要的任何操作。其中“ i”是多路復用總線的值,然后相應地發送數據和時鐘。
步驟13:優點和缺點
OLED的圖像很漂亮。但是,OLED也有
的缺點。由于OLED屏幕包含有機材料,因此其壽命比LCD顯示器短。此外,許多OLED顯示器長時間顯示同一圖像后會出現烙印。老化后,即使顯示了其他圖像,圖像仍保留在屏幕上。因此,請確保每隔幾秒鐘不斷刷新屏幕。水會立即損壞這些顯示器的有機材料。
優點
無需背光
顯示器非常薄且輕巧
低功耗
視角比LCD寬
亮度和對比度都很好
高速且響應時間短
深黑色
缺點
昂貴的技術
壽命短
OLEDS更容易老化
水災
第14步:常見錯誤
總而言之,本教程僅討論一些常見錯誤
人們在使用這些顯示器時所做的事情:
-在項目中使用它之前,請務必三遍檢查引腳
-在頭文件和代碼中選擇正確的庫地址
#define SSD1306_I2C_ADDRESS 0x3C//在Adafruit_SSD1306.h
和
display.begin(SSD1306_SWITCHCAPVCC,0x3C);//在代碼中//
如果地址錯誤,則OLED將不會顯示任何內容
-必須在驅動程序中更改顯示大小,然后才能使用它。如果未更改,則在嘗試驗證代碼時會收到錯誤消息
#error(“高度不正確,請修復Adafruit_SSD1306.h!”);
-如果使用NodeMCU確保將OLED_RESET從4替換為LED_BUILTIN
#define OLED_RESET LED_BUILTIN
我有現場人員使用此OLED顯示器進行各種操作。有些甚至制作了電子游戲。我真的對使用這種小顯示屏制作視頻游戲不感興趣。但是,我現在將離開您去探索您的想象力,并提出令人驚訝的想法。
步驟15:鏈接
-博客:http://diyfactory007.blogspot.com.au
-添加圖像:http://javl.github.io/image2cpp/
-自定義文本:http://oleddisplay.squix.ch/#/home
-Adafruit顯示庫:https://github.com/adafruit/Adafruit_SSD1306
- Adafruit GFX庫:https://github.com/adafruit/Adafruit -GFX庫
-u8glib庫:https://code.google.com/archive/p/u8glib/或https://github.com/olikraus/u8glib
如果要使用較小的顯示器,請使用默認的128_32,否則,對于較大的顯示器請注釋128_32并取消注釋代碼中的128X64 NO_ACK(只需取消注釋所使用的屏幕類型)(字體在字體庫中)
責任編輯:wv
-
微控制器
+關注
關注
48文章
7552瀏覽量
151417 -
顯示器
+關注
關注
21文章
4978瀏覽量
139981 -
Arduino
+關注
關注
188文章
6469瀏覽量
187056
發布評論請先 登錄
相關推薦
評論