在這篇文章中,我將介紹如何使用 Raspberry Pi 連結具備 I2C 介面的 LCD 點矩陣液晶顯示器 (型號 LCD1602),並且在 Python 3.6 的虛擬環境下控制 LCD,使其成為 LCD 時鐘。

LCD 點矩陣液晶顯示器有各種不同的形式,從外觀上來看,除了有不同的顏色,也有可顯示字數不同的差別。顏色部分,並不會影響使用時的接線與程式。至於可顯示字數的差別,雖然通常不會影響接線,但是程式在控制時必須加以判斷。我們這次選用的是 1602 系列的 LCD 顯示器,每一行可顯示 16 個英文字,一共有兩行。有些 LCD 顯示器可以顯示中文,不過 LCD1602 只能顯示英文,使用上會受到一定的限制。

看到 LCD1602 的正面 (請參考下圖),左上方密密麻麻的 16 個接腳編號著實嚇人。實際上,要連結並控制這 16 個接腳確實是一件挺複雜的事情。不過還好有超省事的作法,那就是透過 I2C 或 SPI 介面,而我們這次的範例就是採用 I2C 介面。I2C 介面也有人稱為 IIC 介面,兩個是指完全一樣的東西,只是念法與寫法的不同。

LCD1602 點矩陣液晶顯示器正面

LCD1602 點矩陣液晶顯示器正面

而 I2C 的玄機就在 LCD 顯示器的背面 (請參考下圖),可以看到一塊附有旋鈕的深色板子,編號為 LCM1602 IIC V1,就是與 LCD1602 搭配的 I2C 轉介介面。經由這個介面,接腳數量簡化為四個,除了電源 (VCC)、接地 (GND) 之外,僅使用剩下的兩個接腳 (SDA 與 SCL) 就可控制並與 LCD 顯示器進行溝通。

除了四個接腳需要注意之外,藍色旋鈕的功能則是可以用來控制 LCD 顯示器的亮度。此外,黑色晶片上面印有 PCF8574 字樣,這也是我們需要確認的地方。

LCD1602 點矩陣液晶顯示器背面與 I2C 介面

LCD1602 點矩陣液晶顯示器背面與 I2C 介面

購買時須特別注意的是,LCM1602 IIC V1 之類的轉介介面是額外附屬的功能,所以有些 LCD1602 顯示器是不包含這個介面的。可想而知,不包含 I2C 介面的 LCD 顯示器通常會較為便宜,所以可別只是因為看到價格便宜就衝動出手。

如果你手邊的 LCD1602 不巧剛好沒有 I2C 介面,你有幾個選項。包含買一個轉介介面、直接控制 16 個接腳、或是重新購買一個已包含 I2C 介面的 LCD1602。

開啟 Raspberry I2C 功能

Raspbian 在預設的情況下,I2C 介面功能是關閉的,所以我們必須先將其開啟。如果你手邊的 Raspberry Pi 已經開啟過 I2C 功能,就可以跳過這個步驟開始進行 Python 虛擬環境的安裝。

  1. 選取 Terminal 應用程式
    Raspberry Pi Terminal 應用程式
  2. 進入 Raspberry Pi 設定程式
  3. 利用上下鍵選取 Interfacing Options 後按下 Enter

    利用上下鍵選取 Interfacing Options 後按下 Enter

    利用上下鍵選取 Interfacing Options 後按下 Enter

  4. 利用上下鍵選取 P5 I2C 後按下 Enter

    利用上下鍵選取 P5 I2C 後按下 Enter

    利用上下鍵選取 P5 I2C 後按下 Enter

  5. 利用左右鍵選取 Yes 後按下 Enter

    利用左右鍵選取 Yes 後按下 Enter

    利用左右鍵選取 Yes 後按下 Enter

  6. 按下 Enter

    按下 Enter

    按下 Enter

  7. 利用左右鍵選取 Finish 後按下 Enter

    利用左右鍵選取 Finish 後按下 Enter

    利用左右鍵選取 Finish 後按下 Enter

  8. 重新開機

Python 虛擬環境安裝

如果你尚未依照這一篇文章的說明安裝 Python 3.6 的虛擬環境,請務必先予以正確設定再進行下列步驟。

  1. 選取 Terminal 應用程式
    Raspberry Pi Terminal 應用程式
  2. 初始虛擬環境相關設定
  3. 回到之前建立的虛擬環境
  4. 安裝 RPLCD 套件
  5. 安裝 smbus2 套件
  6. 確認 RPLCD, smbus2 套件皆已正確安裝

    應可看到類似下列訊息

線路圖

透過 I2C 介面連結 LCD 點矩陣液晶與 Raspberry Pi

透過 I2C 介面連結 LCD 點矩陣液晶與 Raspberry Pi

說明如下:

  1. 因為我們使用的是包含 I2C 介面的 LCD 顯示器,所以圖中右方那一大堆短短的藍色接線已經焊在板子裡而不需要處理 (感謝 I2C 介面)。
  2. 我們僅需處理 GND、VCC、SDA、SCL 四支接腳,與 Raspberry Pi GPIO 的腳位對應如下:
    LCM1602 IIC V1 接腳Raspberry Pi GPIO 腳位
    GND實體編號 6 (接地)
    VCC實體編號 4 (+5V)
    SDA實體編號 3
    SCL實體編號 5
  3. 請使用四種不同顏色的杜邦線加以連結,以方便區分各個接腳。
  4. 在此範例中依舊省略使用麵包板以簡化線路圖。
  5. 有些文件寫到 I2C 裝置的 SDA / SCL  接腳必須使用上拉電阻 (Pullup Resistor) 才能正常運作,這是沒錯的。然而因為 Raspberry Pi 3 的 SDA / SCL 腳位已經各內建一個 1.8K 的電阻,所以我們不需要再使用額外的上拉電阻即可直接使用。

尋找 I2C 裝置的位址

因為 I2C 介面允許多個裝置串接在同一個匯流排之上,所以每個裝置都必須擁有不同的位址,而進行溝通前則必須知道該裝置所使用的位址。在這個範例中,因為我們僅使用了一個 I2C 裝置,所以不會有位址重複的問題,僅需找出此一 I2C 裝置所使用的位址。
透過指令

應可看到類似下面的輸出結果

其中唯一非 — 的字串 3f 就是此 I2C 裝置的位址。

程式代碼

利用文字編輯器 (如 nano) 新增 Python 程式 i2c_lcd.py

內容如下

程式說明如下:

  1. 第 3 行引入剛剛安裝的 smbus2 套件。
  2. 第 5 行將 smbus 模組用 smbus2 取代。當透過 RPLCD 模組使用 I2C 介面時,會額外使用到 smbus 這個模組。但是在我們安裝的 Python 3.6 版本中,並沒有提供 smbus 的安裝套件,所以我們選擇安裝另一個號稱完全相容的 smbus2。不過因為 smbus2 的模組名稱與 smbus 並不相同,所以 RPLCD 無法直接取用。透過這行指令,將使得 smbus2 可以取代 smbus,並讓 RPLCD 正常運作。
  3. 第 7 行引入 RPLCD I2C 介面的功能。
  4. 第 9 行建立一個可透過 I2C 介面來控制 LCD 的 Python 物件。其中 PCF8574 為 I2C 晶片型號,而 address 為我們透過指令 i2cdetect 所找出的裝置位址,而 backlight_enabled=False 則是關閉其背光功能。如果你使用的 I2C 裝置位址與此不同,請記得要加以修改。
  5. 第 13 行將螢幕內容清空。
  6. 第 15 行將下一次輸出的開始位置設定為  (0, 0),也就是第一行的第一個字元。
  7. 第 16 行顯示今天的日期。
  8. 第 17 行將下一次輸出的開始位置設定為  (1, 0),也就是第二行的第一個字元。
  9. 第 18 行顯示現在的時間。
  10. 第 19 行暫停程式一秒鐘,之後再重新執行顯示時間的動作。
  11. 第 23 行指令的目的是當程式關閉時,LCD 顯示器上面的文字都會被清空,而不會有殘留的文字。
  12. 跟之前範例不同的是,我們不需要在程式定義 LCD 顯示器所連結的腳位編號。因為 I2C 介面所使用的 SDA / SCL 兩個接腳在 Raspberry Pi 的腳位位置是固定的,所以程式不需要另行定義。而在連結元件時,也必須遵守腳位規範而無法自由選擇。

程式完成後,輸入下列指令執行程式

順利的話,就可以在 LCD 顯示器上看到目前的日期與時間,並且持續每秒更新一次,如下方影片中所示。

問題排除

  • 無法取得 I2C 裝置的位址
    確認四支接腳皆已正確連結。雖然 I2C 介面僅使用四支接腳,接線上並不複雜,但是因為連結的 Raspberry Pi 四個腳位緊靠在一起,所以很容易造成錯置。請務必使用四種不同顏色的杜邦線加以連結,以方便區分各個接腳。
  • 程式無法順利執行
    依序進行下列確認:

    • 如果出現 Remote I/O error 錯誤,請使用指令 i2cdetect -y 1 確認裝置的位址與程式內所使用的位址一致。
    • 如果出現無法引入的錯誤,請使用指令 pip list 確認 RPLCD, smbus2 已經正確安裝。
    • 如果程式出現錯誤訊息而無法順利執行,請仔細檢查每一行指令。必要時,可以直接複製程式碼並貼進你的編輯器。
  • 無法顯示資訊
    依序進行下列確認:

    • 使用後方之旋鈕控制螢幕之亮度,亮度設定太低將造成無法正常顯示。
    • 再次確認四支接腳皆已正確連結。雖然 I2C 介面僅使用四支接腳,接線上並不複雜,但是因為連結的 Raspberry Pi 四個腳位緊靠在一起,所以很容易造成錯置。請務必使用四種不同顏色的杜邦線加以連結,以方便區分各個接腳。

在這個範例中,我們了解到 Raspberry Pi 如何與 I2C 介面的元件進行互動。同樣的,即使是透過 I2C 介面 (smbus2),要直接控制 LCD 顯示器仍是一件複雜的工作,所以我們進一步使用 RPLCD 套件來簡化我們的程式。在下一篇文章中,我將介紹 Raspberry Pi 如何同時控制多個 I2C 介面的裝置,敬請期待。

如果對文章的內容有任何疑問或建議,歡迎與我聯絡。

Facebook 留言
Print Friendly, PDF & Email
Summary
Raspberry Pi 3 Model B 與 I2C LCD 點矩陣液晶顯示器之應用
Article Name
Raspberry Pi 3 Model B 與 I2C LCD 點矩陣液晶顯示器之應用
Description
在這篇文章中,我將介紹如何使用 Raspberry Pi 連結具備 I2C 介面的 LCD 點矩陣液晶顯示器 (型號 LCD1602),並且在 Python 3.6 的虛擬環境下控制 LCD,使其成為 LCD 時鐘。
Author
Publisher Name
Everlearn Studio
Publisher Logo