[メモ] ラズパイで、16x2桁のキャラクタLCD(1602A)をPythonから使う

![Qiita_LCD16x2-1.JPG](https://qiita-image-store.s3.amazonaws.com/0/75594/d2761af1-21d2-09db-2e74-5eeacd2ca8b8.jpeg)

## 概要
- AdafruitのPythonライブラリを使って、1602で知られる、16x2桁のキャラクタLCDに文字を表示。<br>https://github.com/adafruit/Adafruit_Python_CharLCD
- I2C接続のやつ**じゃないよ**
- ラズパイでGPIOとして使えるピンなら、どれにつないでもOK.

## 環境
- Raspberry Pi 2
- `2017-04-10-raspbian-jessie` 
- `sudo apt-get update && sudo apt-get upgrade`して、<br> `Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux`


## 手順
### 接続
```
LCD Pin : Raspberry Piのピン
 1 VSS * GND
 2 VDD * 5.0V
 3 V0  * (10KΩの可変抵抗の真ん中のピンへ。可変抵抗の両端は5.0VとGND)
 4 RS  : GPIO22 (15番Pin)
 5 RW  : GND (H=Read/L=Write なので、Write Only)
 6 E   : GPIO26 (37番Pin)
 7 D0  -  NC 使わない
 8 D1  -  NC 使わない
 9 D2  -  NC 使わない
10 D3  -  NC 使わない
11 D4  : GPIO5  (29番Pin)
12 D5  : GPIO6  (31番Pin)
13 D6  : GPIO13 (33番Pin)
14 D7  : GPIO19 (35番Pin)
15 A   * 5.0V
16 K   * GND
```
1. ラズパイに、電源を接続しない。
2. 5.0V、GND、可変抵抗を**<font color='red'>慎重に</font>**配線する。
3. よ～く、確認する。
4. SDカードを抜いたラズパイに電源を挿して、5.0V供給してみる。
5. LCDのバックライトが点いて、可変低をまわすと、コントラストが変わる。
6. 電源入れると、上の段に　■が表示されてて、下は、何も表示されてない
7. 電源を抜いて、のこりの配線をする。
7. ラズパイに、SDカードを挿して、電源を入れなおして、起動する。

![Qiita_LCD16x2-2.JPG](https://qiita-image-store.s3.amazonaws.com/0/75594/e94dfe39-c930-315d-9b2e-c3d2abaf29d9.jpeg)


### ライブラリのインストール

```bash
sudo apt-get update
sudo apt-get install -y build-essential python-dev python-smbus python-pip git
sudo pip install RPi.GPIO
#
cd $HOME
# ぎっと、くろ～ん.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
#
cd Adafruit_Python_CharLCD
# インストール
sudo python setup.py install
```


### 軽く使ってみる
1. `python` [Enter]で、Python起動
2. コード、こぴぺ

    ```py
# コイツをインポートする。
import Adafruit_CharLCD as LCD
# ピンの設定. GPIO番号を入れる　
lcd_rs        = 22
lcd_en        = 26
lcd_d4        = 5
lcd_d5        = 6
lcd_d6        = 13
lcd_d7        = 19
#
# 16x2桁.
lcd_columns = 16
lcd_rows    = 2
#
#
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                           lcd_columns, lcd_rows)
# 液晶クリア.
lcd.clear()
# メッセージ表示.
lcd.message('Hello World!16x2\nQiita.com/mt08/')
# カーソル表示して、ブリンク
lcd.blink(True)
```

3. `Ctrl-D` で抜ける



## その他
- `Adafruit_Python_CharLCD/examples/char_lcd.py` を実行する場合、テキストエディタで開いて、ピンの設定をうまいのに変更すること。
- 5V入れてるけど、GPIO大丈夫なの??<br> ... たぶん。。。 RWピンをGNDにして、ラズパイからみて書き込み専用になってるので、LCD側から出力されないよね...
- [`Adafruit_CharLCD/Adafruit_CharLCD.py`](https://github.com/adafruit/Adafruit_Python_CharLCD/blob/master/Adafruit_CharLCD/Adafruit_CharLCD.py) を見れば、使えそうなコマンドがわかるかと...`def`で、定義してるよね？
- WiringPiのとこ(http://wiringpi.com/dev-lib/lcd-library/)みると、Cでサポートしてる？っぽい

### 実行例

```py
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> # コイツをインポートする。
... import Adafruit_CharLCD as LCD
>>> # ピンの設定. GPIO番号を入れる　
... lcd_rs        = 22
>>> lcd_en        = 26
>>> lcd_d4        = 5
>>> lcd_d5        = 6
>>> lcd_d6        = 13
>>> lcd_d7        = 19
>>> #
... # 16x2桁.
... lcd_columns = 16
>>> lcd_rows    = 2
>>> #
... #
... lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
...                            lcd_columns, lcd_rows)
>>> # 液晶クリア.
... lcd.clear()
>>> # メッセージ表示.
... lcd.message('Hello World!16x2\nQiita.com/mt08/')
>>> # カーソル表示して、ブリンク
... lcd.blink(True)
>>> 
pi@raspberrypi:~ $ 
```