文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

【自造學堂】Arduino如何透過I2C控制LCD模組

作者:黃小棟

OLYMPUS DIGITAL CAMERA

 

Maker運動現在紅透半邊天,這裏也來開個自造教學專欄,和大家分享動手做的樂趣。該從什麼題目切入呢?當然要先來談談Maker最愛的Arduino如何使用,且從LCD模組的控制開始講起。

對!大家沒看錯,我們第一篇Arduino教學文主題,並不是從介紹Arduino的歷史到安裝IDE,再到燒入Blink的範例程式,而是直接教大家從使用LCD模組開始,因為坊間或者網路有很多資料可以查詢,所以這裡並不會做太多入門的講解。

好~話不多說,現在就進入主題吧!

研讀實作後,你將會知道:

大家研讀完這篇文章,並且實際操作之後,將會對「I2C匯流排」和「LCD」有初步的認識,以及模組與Arduino的接線,再來是撰寫初階程式來控制你的LCD模組,並且腦力激盪可做哪些專案上的應用。而關於進階控制技巧的部分,我們會留在後續的教學文中再慢慢講解。

研讀實作前,你必須知道:

大家研讀實作前,必須要知道的有以下幾點:

  • 會安裝Arduino IDE和如何編譯與燒入程式到你的板子。(這是一定要知道的)
  • 知道什麼是Blink的範例程式。(這還不知道沒關係,可以趕快上網Google一下)
  • 了解Arduino程式語言的基本架構。(void setup()和void loop()的使用)
  • 會安裝第三方資料庫。(這很重要,因為我們後續有很多教學文會安裝libraries)

基礎認識:什麼是I2C匯流排?

I2C匯流排能夠讓兩個裝置之間以穩定、高速、雙向的方式及最少的I/O引腳的情形來進行通訊。因為它使用兩條線來進行通訊,一條時脈線(SCL)和一條數據線(SDA),所以I2C匯流排所使用的通訊協定也被稱之為「雙線」通訊協定。

比較特別的是,I2C匯流排允許多個從屬裝置能共享同條通訊線路,但也就因為如此,開啟通訊的功能則是由匯流排主體來控制要與誰通訊。

我們這裡是由Arduino(iCShop貨號:368030500683)當作主體去做控制,並且板子內A4和A5的接腳分別具有SDA和SCL的功能。當大家需要使用I2C的功能時,就會用到Wire函式庫。而這函式庫,當大家在安裝Arduino IDE時就已經內建進去了,所以大家不用擔心,且看下文的詳細解說。

LCD模組規格及腳位介紹

LCD(liquid-crystal display)液晶螢幕顯示器的縮寫。我們都知道,這是一個很常見的顯示裝置,在大家的生活中絕對都有它的存在,舉凡小型的手錶、電子計算機,到大型的電視或者看板,都可見到LCD的蹤跡與應用。

筆者這次所使用的液晶螢幕顯示器(iCShop貨號:368030100095),要感謝iCShop的贊助提供,如果大家電子零件或模組上的需求,都可到他們的網站去詢問並購買,而我們所使用的LCD模組的規格如下:

OLYMPUS DIGITAL CAMERA

LCD模組正面

此款LCD模組是最基本,並且也是最常見字元型LCD,其所使用的電壓為5V,因為Arduino開發板I/O Port所使用的電壓位準為5V,所以選擇它。再來此LCD模組具有2行顯示,每行可顯示16個字元,最後是採I2C通訊傳輸。所以模組只有四隻接腳,分別為Vcc、GND、SDA、SCL。

OLYMPUS DIGITAL CAMERA

LCD模組背面

LCD模組硬體接線圖

此模組的接線方式也非常容易,只需將模組Vcc接腳接至Arduino的5V接腳,模組GND接腳接至Arduino的GND接腳,再來是模組SDA接腳接至Arduino的A4接腳,最後是模組SCL接腳接至Arduino的A5接腳,即可完成接線。

OLYMPUS DIGITAL CAMERA

LCD模組接線

LCD模組程式範例

在講解程式之前,請大家先下載對於I2C_LCD的第三方資料庫(libraries)。大家可到這個網站去下載、解壓縮並安裝,筆者這邊下載使用的是NewliquidCrystal_1.3.4的版本。接下來就要教大家撰寫程式,我們這次所用的程式如下:

//引入Wire與LiquidCrystal_I2C函式庫
#include
#include

// 設定 LCD I2C 位址
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
// 初始化 LCD,一行 16 的字元,共 2 行,預設開啟背光
lcd.begin(16, 2);

// 閃爍三次
for(int i = 0; i < 3; i++) {
lcd.backlight(); // 開啟背光
delay(250);
lcd.noBacklight(); // 關閉背光
delay(250);
}
lcd.backlight();

// 輸出初始化文字
lcd.setCursor(0, 0); // 設定游標位置在第一行行首
lcd.print("ICshop&MakerPRO");
delay(1000);
lcd.setCursor(0, 1); // 設定游標位置在第二行行首
lcd.print("Hello, Maker!");
delay(8000);
lcd.clear(); //顯示清除
}
void loop() {
lcd.setCursor(0, 0); // 設定游標位置在第一行行首
lcd.print("ICshop&MakerPRO");
lcd.setCursor(0, 1); // 設定游標位置在第二行行首
lcd.print(millis()/1000);
}

這個程式的動作流程是啟動Arduino時,會先引用Wire與LiquidCrystal_I2C函式庫。

之後在初始化設定,則會先控制LCD模組閃爍背光三次,接著在第一行顯示「ICshop&MakerPRO」等字,延遲一秒,在第二行顯示「Hello, Maker!」等字,並且延遲八秒,再清除所有顯示。

最後進入主程式迴圈裡面,也同樣在第一行顯示「ICshop&MakerPRO」等字,並且在第二行顯示開機的時間。

結語

說明到這裡,相信大家應該都有順利完成I2C_1602_LCD模組的顯示吧!如果沒有的話,可以檢查一下,是不是哪條線路接錯了,或者是買到瑕疵品(筆者就有遇過)。

接著,大家可以想看看,是否拿這模組去做個時鐘、環境感測偵測器呢?講到這裡,相信大家都有很多想法,想要嘗試在自己的專案接上LCD模組來做顯示吧。

而在下一篇教學文裡,將會教大家如何使用RTC模組,並且與此I2C_LCD模組做結合,架構出自己的Maker時鐘,敬請期待!

(責任編輯:小波)

黃 小棟

黃 小棟

機電整合工程師,喜歡遊山玩水。多次參與Maker活動;曾自行設計和製作水下無人載具,現在則是平日手縫泰迪熊。
黃 小棟

上一篇: | 下一篇:

468 ad

5 Comments

  1. 想請問文中的A4及A5這兩隻腳位怎麼定義

    Post a Reply
  2. 你好,如果我要讓多塊mege板做連接,那我master的程式部分要怎麼依序讓他呼叫多塊slave板?謝謝。

    Post a Reply

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO