# LCD I2C操作
### Arduino
一般專案使用的1602LCD液晶螢幕, 必需接許多線, 往往令人卻步。
{%youtube U2bLikIYz6A%}
影片來源https://www.youtube.com/watch?v=U2bLikIYz6A
由於接線複雜, 於是[買了這個I2C介面的轉接板](https://item.taobao.com/item.htm?spm=a1z09.2.0.0.68a92e8dp1LZ6C&id=40809855965&_u=k2fdfpsf250a),發現實在太方便了, 這樣用在專案的顯示上電路接線會容易許多!!
電路接法:

上頭一整排的控制Pin腳對齊LCD, 轉接板與Arduino的接法:
| 轉接板 | Arduino |
| -------- | -------- |
| VCC | 5V |
| GND | GND |
| SDA | SDA |
| SCL | SCL |
打開Arduino開發環境, 先下載函式庫

輸入LiquidCrystal I2C 搜尋, 安裝LiquidCrystal I2C (by Frank de Brabander)

開始寫程式
```
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//宣告LCD的位址, 通常為0x27, 1602LCD 為 16個字元, 2列
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hello World!!");
lcd.setCursor(0, 1);
lcd.print("GoodJob!!");
}
void loop() {
}
```
其中, 需要注意的是I2C的位址要正確, 1602LCD通常為0x27, 可以用[掃描](https://hackmd.io/Iw7mov2oTfqZugWm6Wm6pA/)的方式取得。
上傳後, 搭拉~

### 樹莓派RaspberryPi
同樣的方法, 用在樹莓派上也行


先找出 1602LCD 的位址
```
#i2cdetect -y 1
```

開始寫程式吧~ 首先, 要先安裝RPLCD套件
```
#pip3 install RPLCD
```

```
import sys
import time
from RPLCD.i2c import CharLCD
lcd = CharLCD('PCF8574', address=0x27, port=1, backlight_enabled=True)
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string("Hello World!!")
lcd.cursor_pos = (1, 0)
lcd.write_string("Time: {}".format(time.strftime("%H:%M:%S")))
```
執行程式
```
#python3 1602LCD_I2C.py
```

#### 後記
1. 顯示時需先以 lcd.clear() 清除螢幕, 以免產生亂碼。