在玩Raspberry Pi的時候,常常會有需要顯示一些簡單文字訊息的需求。像是開機抓到動態IP位置的時候顯示出來,方便遠端ssh登入。
這個時候用LCD螢幕線得太大又太笨重,用UART又需要準備一條USB-TTL的轉接線用電腦來登入,整個弄得非常的繁雜。所以這種時候就需要下面這個東西--兩行十六字的 LCD 顯示模組:
在電子材料行裡可以用便宜的價格輕易買到,去Google的話常常會被提到的型號或關鍵字不是 HD4478 就是 1602 (16x2十六個字兩行)。雖然型號上有點小差異但是控制指令都一樣。而傳輸資料介面除了基本款的 16 pin腳的版本外還有I2C介面。網路上也有人利用位移暫存器來間接控制基本款的 16 pin腳,這種的方式就以後有時間再來寫了。
下面預計會分三個部分介紹如何在 Raspberry Pi B+版上用 Python 透過 GPIO 針腳控制這個LCD模組.
--part1: 硬體設定篇
--part2: 基本指令介紹
--part3: 初始化動作
--part4: 自訂字形
開機順序和資料傳輸基本動作
硬體接腳設定:
從LCD模組的Datasheet上面會知道有十四根接腳是控制LCD的主要接腳,而有附帶背光模組(通常都會有)的會多兩根接腳負責給電給LED發光。LCD模組通常會提供兩種模式:4-bit 和 8-bit。
8-bit模式會使用8支接腳來傳輸在資料或指令,可以一個動作送出/讀入完整的 8 個 bit(1 byte) 數據。
4-bit模式則只需要使用4支接腳來傳輸在資料或指令,但是一個動作只能送出/讀入4個bit的數據,所以要送出/讀入完整的一個 byte 要多花一個動作。不過由於可以省下4個GPIO腳位,所以現在大多使用這種操作模式。
接下來說明程式的接腳設定。可以參考下圖的Pi B+版的GPIO腳位圖:
---------------------------------------------
(LCD模組電源和顯示對比度控制)
1 : VSS --> 接地 (下圖有圈圈的號碼6,9,14,20,25,30,34,39任選一個)
2 : VDD --> LCD模組的電源, 接+3.3V或+5V (買的時候問老闆是吃哪個電壓)
3.3v 接圈圈1或17, +5V 接圈圈2或4
3 : V0 --> 這地方給的電壓大小決定LCD顯示對比度的高低, 建議接個可變電阻.
V0---(可變電阻)---GND (圈圈號碼6,9,14,20,25,30,34,39)
(訊號功能控制接腳)
4 : RS --> 接 圈圈號碼 38 控制 "指令" 或 "資料" 讀寫模式
5 : R/W --> 接 圈圈號碼 40 控制 "讀出" 或 "寫入" 模式
6 : EN --> 接 圈圈號碼 29 通知LCD模組執行動作
( 低 4bit 接腳,使用4 bit 操作模式時這四根接腳不用接,省下寶貴的GPIO)
7 : D0 --> X
8 : D1 --> X
9 : D2 --> X
10: D3 --> X
( 高 4bit 接腳)
11: D4 --> 接 圈圈號碼 31
12: D5 --> 接 圈圈號碼 33
13: D6 --> 接 圈圈號碼 35
14: D7 --> 接 圈圈號碼 37
(有附帶背光模組的LCD模組才會有這兩根電源接腳)
15: A --> 背光LED的電源, 接+3.3V或+5V...問老闆或查datasheet...
3.3v 接圈圈1或17, +5V 接圈圈2或4
16: K --> 背光LED的接地
當然這麼多條線和pin腳常常會接錯,而且接下來在LCD還沒做出正確的初始化動作之前是部會正常動作的。常常會搞不清楚是哪邊出問題。
比較好的選擇,可以去買下面這塊艾鍗學院設計的多功能IC擴充子版,在小小一塊板子內整合了I2C-EEPROM, SPI-FlashRAM, 紅外線接受器, 繼電器模組,兩個按鈕開關,USB-Serial模組,蜂鳴器,兩個LED, LCD2016連接埠。
非常適合拿來做各種常用通訊介面以及GPIO的程式練習。(天瓏書局有在販售)
電源打開背光LED應該就會亮了起來。然後就可以開始寫程式做練習了。
# 使用 RPi.GPIO 模組
import RPi.GPIO as GPIO
# pin 的編號直接使用 40 pin 上的物理編號(1~40)也就是上圖的圈圈裡的號碼。
GPIO.setmode(GPIO.BOARD)
# pin 的設定為 ittraining 的教育子板新版的設定
RS = 38
RW = 40
E = 29
D4 = 31
D5 = 33
D6 = 35
D7 = 37
# 設定指定的pin為 output
GPIO.setup(E, GPIO.OUT) # E
GPIO.setup(RS, GPIO.OUT) # RS
GPIO.setup(RW, GPIO.OUT) # RW
GPIO.setup(D4, GPIO.OUT) # DB4
GPIO.setup(D5, GPIO.OUT) # DB5
GPIO.setup(D6, GPIO.OUT) # DB6
GPIO.setup(D7, GPIO.OUT) # DB7
# 初始化這些pin的輸出電位為low
GPIO.output(LCD_RS,0)
GPIO.output(LCD_RW,0)
GPIO.output(LCD_E,0)
GPIO.output(LCD_D4,0)
GPIO.output(LCD_D5,0)
GPIO.output(LCD_D6,0)
GPIO.output(LCD_D7,0)
下一篇 part2: 基本指令介紹
--part1: 硬體設定篇
--part2: 基本指令介紹
--part3: 初始化動作
--part4: 自訂字形
Python 控制 LCM模組的Code 可在 Github 下載。
https://github.com/itrobotics/python_LCM_control
Thanks for sharing, nice post!
回覆刪除Chia sẻ các bạn tổng hợp những hình xăm nhỏ đẹp hay cách làm cánh gà tẩm bột chiên xù hay cách trị thâm quầng mắt hiệu quả nhất hay bạn muốn câu cá thì cách làm mồi câu cá rô phi sông hiệu quả hay những câu đố vui hay nhất có đáp án hay giảm mỡ bụng sau sinh bằng rượu gừng nghệ cực hiệu quả hay mách mẹ những thực phẩm giàu axit folic hay cách chữa hóc xương cá hiệu quả nhất hay những điều không nên chia sẻ trên Facebook hay nháy mắt trái có điềm gì mang đến xui xẻo gì những món ăn kỵ nhau gây chết người bạn nên biết hay những cách gặp ma đầy thú vị hay những điều kiêng kỵ khi hôn đàn ông nên biết hay giải mã giấc mơ thấy rắn là điềm gì xui hay không hay bà bầu nên ăn gì trong 3 tháng đầu thai kỳ hay uống nước thì cách uống nước đúng cách hay tác dụng của cây chùm ngây thần kỳ.