ElecFun--Arduino--OLED12864和U8glib庫

簡介

這邊文章將會演示的是使用一個U8glibOLED圖形庫,如果你剛剛接觸宛乃,可以點擊這個鏈接带欢,了解更多U8glib庫(可能被墻,所以你的會翻墻)這里面是英文資料烤惊,所以,你得準備好一個電子詞典吁朦,在閱讀的時候柒室,隨時查詢(U8glib是一個圖形庫來的,支持很多種類的OLED)來點亮OLED12864液晶顯示器逗宜,這是一個非常好用的圖形庫雄右,能夠讓我們非常快捷開發(fā)Arduino的OLED驅動程序纺讲。而且最大的好處是開源擂仍。

我用到的是一個朋友做好的OLED手表來演示這個程序,關于這個我將要作為演示的硬件的更多資料熬甚,你可以訪問他的網頁逢渔!

下面的圖片是我從Github里面找到的。

當然我們的U8glib可是很強大的乡括,支持的好幾款不同的芯片肃廓,這里我們只用到基于AVR芯片的Arduino系統(tǒng)智厌。


文章適合對象

本文適合的對象是對Arduino編程有一定了解的人,比如知道Arduino的庫使用盲赊,同時對Arduino編程語言有一定了解的人铣鹏。當然如果你對Arduino有非常大的熱情的話,也可以先了解一下這些內容哀蘑,再繼續(xù)往下面看诚卸。不然可能會給你帶來一定的難度。

需要的硬件:

1. 同時你需要手頭上有一塊Arduino 主控板绘迁,建議購買Arduino UNO 或者是 Arduino pro mini 因為這個對于新手來說比較容易入門合溺。

2. 當然你還需要有一塊12864OLED液晶顯示器,如果有其他尺寸的OLED顯示屏也是沒關系的脊髓,因為U8glib庫辫愉,支持非常多的類型,你只要在U8glib提供的例程序就能知道将硝,這是有多么強悍的一個庫了恭朗。

支持的類型有:SSD1325, ST7565, ST7920, UC1608, UC1610, UC1701, PCD8544, PCF8812, KS0108, LC7981, SBN1661, SSD1306, SH1106, T6963, LD7032 等等

你可以在這里查到所有完整支持的設備類型:

支持的設備類型

現(xiàn)在很多OLED模塊都是寬電壓輸入的,支持3.3到5.5V輸入依疼,但是無論如何你都得仔細查看一下你的OLED究竟支持多少伏輸入痰腮,在使用一個新元器件之前,查看他的數(shù)據(jù)手冊或者電氣資料對一個工程師來說律罢,是一個非常好的習慣膀值。

3. 必要的杜邦線,一根micro USB線误辑,給主控板通電沧踏,還有給Arduino主控板下載程序使用。

下面就是我使用的硬件背面圖巾钉,里面已經集成了Arduino Nano主控板和OLED12864翘狱,所以這里沒有演示怎么接線,但是是遵從I2C接線的砰苍。


一般步驟

當然這篇文章潦匈,主要是應用U8glib的庫,我們只需要知道怎么調用赚导,就能夠做很多事情了茬缩。

首先我們需要打開一個ArduinoIDE(ArduinoIDE就是一個集成開發(fā)環(huán)境,包括代碼的編寫吼旧,編譯凰锡,上傳,串口調試等等內容)

我們在編譯環(huán)境里面最先要做的事情,就是先保存好這份代碼文件寡夹,我一般都存在自己私人的文件夾处面。當然保存的路徑盡量不要帶中文,不然后IDE會識別不出來的菩掏。導致很多不必要的事情魂角。

比如你可以保存在一個叫做E盤下面Arduino_code_Documents下的ElecFun_Arduino_U8glib_Oled12864這里面,當然這個路徑是我演示的智绸,

E:\Arduino_code_Documents\ElecFun_Arduino_U8glib_Oled12864

如果你文件夾下面沒有這個文件野揪,完全可以自己建一個來的,都以英文命名會是一個好習慣來的瞧栗。

不過我們最后存的Arduino程序的命名要跟這個文件所在的文件夾同名斯稳,因為這是ArduinoIDE要求的。我們只要遵循就行了迹恐。

前期準備--庫文件下載和硬件接線

我這里假設你已經下載好了挣惰,那我們就直接進入編程這步了,如果你還沒有知道需要怎么下載殴边,怎么把庫放在ArduinoIDE的文件夾下面憎茂,請點擊Arduino庫文件的安裝學習。

還有一個很重要的一點锤岸,就是Arduino 主控板和OLED接線的竖幔,如果你沒有接好線,那么你可以看一下這篇文章--OLED12864和Arduino主控板(當然你如果手頭上是偷,不是12864也沒有關系拳氢,因為OLED不同尺寸的接線都遵循一定的規(guī)則)

接線都有以下幾種情況

1. I2C接線 (我得就是這種情況)

Arduino GND接OLED GND

Arduino 3.3V 接 OLED VCC 我的Arduino是Nano是3.3V系列

Arduino A4 接 OLED SDA

Arduino A5 接 OLED SCL

2. SPI接線?

3. 并行接線

如果你的跟我不同,那么你就需要參考一下Arduino和OLED接線方式查看你需要的接線方式蛋铆,然后在程序里面選擇你需要的初始化代碼馋评。或者直接詢問你的購買商刺啦,獲取更詳細的接線信息栗恩。如果你最后還是沒能接好線,請給我留言洪燥,我?guī)湍憧纯础?/p>

如果你很擅長看文檔資料,或者這些對你都是簡單的事情乳乌,那么你就是一個動手能力很強的人捧韵,當然如果這些對你來說有點難,沒有關系汉操,多試幾遍就能發(fā)現(xiàn)再来,這些都差不多一成不變的步驟。

軟件代碼分析

嗯,經過一番的努力芒篷,我想你已經把需要的前期工作準備好了搜变,那么接下來,我們就開始使用U8glib庫文件來點亮一個12864的液晶顯示器针炉。

接下來我們會演示一個簡單的點亮OLED屏幕的程序

首先我們需要做的挠他,當然就是把庫文件引入進來,我們手動敲一行代碼進入到這里篡帕,就像上面圖片顯示的那樣

#include "U8glib.h" //這句話是把U8glib庫包含到這個程序文件里面

我們可以根據(jù)自己實際的OLED顯示器殖侵,取消需要的那行代碼的注釋就行了。比如我的是12864OLED是SSD1306驅動的镰烧,所以我這里就刪除

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

這行代碼前面的//

這行代碼告訴我們幾個信息拢军,其中一個就是屏幕尺寸是12864的,驅動IC是SSD1306怔鳖,這個驅動IC一般裝在屏幕里面茉唉,比較難找,使用的是I2C通訊结执。

我們在屏幕上畫圖度陆,是靠坐標定位的,所以我們需要知道我們的坐標原點在哪里(下圖取自U8glib的Github里面的介紹)

從上圖可以看出昌犹,我們屏幕的左上角就是就是整個屏幕的原點了坚芜,記住這點很重要,因為我們接下來在代碼里斜姥,要讓圖形或者文字顯示在哪里鸿竖,所參照的坐標就是這個左上角的原點了。

接下來铸敏,我們就在void loop() 里面添加一個picture loop

不管是其他的應用也好缚忧,首先就這樣做吧

void loop()

{

// picture loop?

do {

? ? u8g.firstPage();

} while(u8g.nextPage());

delay(1000);

}

上面的

do {

}?

while();

這樣寫,是想讓Arduino一直處于圖形繪制狀態(tài)杈笔。

我們需要顯示的圖形將會在函數(shù)draw()里面闪水。所以上面是固定結構來的,也就是無論你做什么開發(fā)蒙具,就按照上面那樣子來就行了球榆。我們需要做的就是在draw()里面畫出我們需要的內容就好了。

比如我想在屏幕的正中間畫一個圓禁筏,那么我需要做的就是先根據(jù)OLED的尺寸持钉,確定128*64這塊屏幕的正中間坐標就行了。

坐標(128/2,64/2)=(64,32)就是這個屏幕的中點了篱昔。等下我們畫圓的時候會用到這個參數(shù)每强,接下來我們看看U8glib給我們畫圓的方法始腾。

這里我們使用U8glib的C prototype(C語言畫圓函數(shù)原型)

voidu8g_DrawCircle(u8g_t*u8g,u8g_uint_t x0,u8g_uint_t y0,u8g_uint_t rad,uint8_t opt)

描述:在坐標(x0, y0)這里畫一個半徑為rad的圓空执,圓的直徑是2*rad+1浪箭,另外這個取決于參數(shù)opt,我們可以在屏幕上只畫出圓的一部分辨绊,可以作為opt參數(shù)的值有以下一些:U8G_DRAW_UPPER_RIGHT(這個參數(shù)只畫出圓的右上1/4部分)

U8G_DRAW_UPPER_LEFT(這個參數(shù)只畫出圓的左上1/4部分)

U8G_DRAW_LOWER_LEFT(這個參數(shù)只畫出圓的左下1/4部分)

U8G_DRAW_LOWER_RIGHT(這個參數(shù)只畫出圓的右下1/4部分)U8G_DRAW_ALL(這個參數(shù)只畫出圓全部奶栖,函數(shù)默認是畫出整個圓)

另外上面的參數(shù)可以使用操作符 | 進行組合使用。?

參數(shù):

u8g: 指向u8g的數(shù)據(jù)結構(僅支持C接口邢羔,注意這里還有一個C++畫圓函數(shù)原型驼抹,那里是沒有u8g函數(shù)原型的)

x0,y0是圓的坐標

rad 是圓的半徑

opt 的參數(shù)就是上面提到的那些拜鹤,不選表示完整畫出整個圓出來框冀。

U8G_DRAW_UPPER_RIGHT

U8G_DRAW_UPPER_LEFT

U8G_DRAW_LOWER_LEFT

U8G_DRAW_LOWER_RIGHT

U8G_DRAW_ALL

return: 這個函數(shù)沒有返回值

這個函數(shù)在Picture loop 里面使用,舉例:

u8g.drawCircle(20,20,14)敏簿;


u8g.drawCircle(20,20,14,U8G_DRAW_UPPER_RIGHT);

得到下面的圖形:


接下來我在我的函數(shù)里面在寫一些代碼:

void draw()

{

? u8g.drawCircle(64,32,10);

}

到此明也,所有的編程工作完成了,你可以在這里下載完整的代碼惯裕,盡量不要拷貝我這里面的代碼温数,畢竟拷貝的話,難免會出錯蜻势,所以直接下載我的代碼撑刺,然后在你的編譯器里面編譯就好了。


外部參考資料

U8glib wiki資料?里面能告訴你很多關于硬件接線握玛,代碼的使用等等

U8glib in Google Code 訪問這個頁面需要翻墻够傍,否則無法閱讀

U8glib 使用手冊查詢 英文 需要翻墻使用,里面能夠讓你了解到很多U8glib庫里面的方法和函數(shù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挠铲,一起剝皮案震驚了整個濱河市冕屯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拂苹,老刑警劉巖安聘,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓢棒,居然都是意外死亡浴韭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門脯宿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來念颈,“玉大人,你說我怎么就攤上這事嗅绰。” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵窘面,是天一觀的道長翠语。 經常有香客問我,道長财边,這世上最難降的妖魔是什么肌括? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮酣难,結果婚禮上谍夭,老公的妹妹穿的比我還像新娘。我一直安慰自己憨募,他們只是感情好紧索,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菜谣,像睡著了一般珠漂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尾膊,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天媳危,我揣著相機與錄音,去河邊找鬼冈敛。 笑死待笑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的抓谴。 我是一名探鬼主播暮蹂,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼齐邦!你這毒婦竟也來了椎侠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤措拇,失蹤者是張志新(化名)和其女友劉穎我纪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丐吓,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浅悉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了券犁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片术健。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粘衬,靈堂內的尸體忽然破棺而出荞估,到底是詐尸還是另有隱情咳促,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布勘伺,位于F島的核電站跪腹,受9級特大地震影響,放射性物質發(fā)生泄漏飞醉。R本人自食惡果不足惜冲茸,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缅帘。 院中可真熱鬧轴术,春花似錦、人聲如沸钦无。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铃诬。三九已至祭陷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趣席,已是汗流浹背兵志。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宣肚,地道東北人想罕。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像霉涨,于是被迫代替她去往敵國和親按价。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容