Raspberry Pi で LCD モジュールを使う

f:id:sea_mountain:20130916184120j:plain

LCD モジュールを使って文字を表示する

"Raspberry Pi で遊ぼう!" にやり方・どのモジュールを買って使ったかが書かれていますが、今回はそれとは違うものを買いました。

書籍に載っている ストロベリー・リナックス I2C 液晶 SB1602BW
http://strawberry-linux.com/catalog/items?code=27021

間違っていること・改善したほうが良い所、ぜひ教えて下さい!

購入品

  1. I2C接続キャラクタLCDモジュール 16x2行 白色バックライト付 ACM1602NI-FLW-FBW-M01
    http://akizukidenshi.com/catalog/g/gP-05693/

  2. I2C接続小型LCDモジュールピッチ変換キット AE-AQM0802
    http://akizukidenshi.com/catalog/g/gK-06795/

  3. の ACM1602NI はちょっと特殊なモジュールらしく、うまく動きませんでした…。
    秋月I2C LCDをmbedで
    秋月I2C LCDをRaspberry Piで

ということで、AE-AQM0802 を使います。

Raspberry Pi で AE-AQM0802 を使う

ピッチ変換基板にはんだづけする

AE-AQM0802 はピンサイズが合わず、ブレッドボードで使えません。そこで、ピッチ変換基板というものを用いて、ブレッドボードのピンサイズで使えるようにします。

  • LCDモジュール(文字を表示するモジュール)
  • ピッチ変換基板
  • 1x7細ピンヘッダ(ブレッドボードに刺す部分)

サイト上にも書いてあるように、ピッチ変換基板には、LCD モジュール動作に必要なコンデンサと I2C プルアップ抵抗付きです。自分で用意しない場合は、これを有効にします。

  1. ピッチ変換基板と1x7細ピンヘッダをはんだづけ
    5箇所 + 2箇所はんだづけします。

    f:id:sea_mountain:20130916234224p:plain

    • ピッチ変換基板には、5つしか刺す所が無いため、1x7 細ピンヘッダが 5 になるようにします。ペンチで黒い部分を持って、ポキっと折ります。
    • ブレッドボードに挿した状態ではんだづけするとやりやすいです。
    • PU と書かれている部分の2箇所をはんだ付けします。
      今回ピッチ変換基板に付いているコンデンサとプルアップ抵抗を使うためです。
  2. ピッチ変換基板と LCD モジュールをはんだづけ

f:id:sea_mountain:20130916231508p:plain

  • かなり細かいのですが、9箇所頑張ってはんだづけしました… うまく…なりたい…

配線する

ピッチ変換基板

f:id:sea_mountain:20130917233349p:plain

上から、

  • VDD -> 電源 (+ につなぐ)
  • RESET
  • SCL
  • SDA
  • GND -> グラウンド ( - につなぐ)

の5つがあります。これを Raspberry Pi とつなぎます。

Raspberry Pi の GPIO ポート

f:id:sea_mountain:20130917232852j:plain f:id:sea_mountain:20130917232859p:plain

以下サイトでピンの並び方が分かります。
http://elinux.org/RPi_Low-level_peripherals

右側の蛍光グリーンが背景の図(以下画像リンク)が、Raspberry Pi の GPIO ピンの配置を示しています。 http://elinux.org/images/2/2a/GPIOs.png

今回は上記で上げた5つを使うので、VDD・SCL・SDA・GNDの場所を確認します。
VDD (電源)は今回使う LCD モジュールが電源電圧 3.3 V のため、"3V3 Power" と書いてあるピンを使います。

SCL と SDA は1箇所ずつしかないので、左の列・上から3番目と2番目をそれぞれ使います。

配線例

  • 簡単な図で書くとこんな感じ

f:id:sea_mountain:20130918000225p:plain

  • 写真で取るとこんな感じ

f:id:sea_mountain:20130921154317j:plain

f:id:sea_mountain:20130921154339j:plain f:id:sea_mountain:20130921154431j:plain

赤と黒のジャンパワイヤしか使ってないですが、本来は色を分けたほうがわかりやすいです。

  • 電源 -> 赤
  • GND -> 黒

それ以外は好きな色で、と聞いたことがあります。

接続確認する

i2cdetect コマンドで確認します。

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

これで接続確認と、デバイスのアドレスがわかります。 今回の使っている AE-AQM0802 では、3e という事がわかりました。

文字を表示させる

f:id:sea_mountain:20130921220230j:plain

序盤でも述べた、以下の本のコードを参考にしています。

Raspberry Piで遊ぼう!

Raspberry Piで遊ぼう!

$ sudo ./6-lcd-1.sh

sudo 権限が必要なので、忘れずに sudo で実行します。
コードは以下です。

#!/bin/sh

# LCD の初期化
i2cset -y 1 0x3d 0 0x38 0x39 0x14 0x78 0x5f 0x6a i
sleep 0.3
i2cset -y 1 0x3d 0 0x0c 0x01 i
sleep 0.3
i2cset -y 1 0x3d 0 0x06 i
sleep 0.3

# a. 1行目の文字を出力 "ハロー"
i2cset -y 1 0x3d 0 0x80 b
i2cset -y 1 0x3d 0x40 0xCA 0xDB 0xB0 i

# b. 2行目の文字を出力 "ワールド"
i2cset -y 1 0x3d 0 0xc0 b
i2cset -y 1 0x3d 0x40 0xDC 0xB0 0xD9 0xC4 0xDE i

a と b の部分で文字を描画する命令を送っています。
a の命令では、
i2cset -y 1 0x3d 0 0x80 b i2cset -y 1 0x3d 0x40 0x48 0x65 0x6c 0x6c 0x6f 0x2c i

文字の指定は 2行目の 0x40 0x48 0x65 0x6c 0x6c 0x6f 0x2c の部分です。
モジュールのデータシートに書いてある、文字のパターンをみて、それを ASCII コードに直します。

http://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf http://www.hamradio.cc/computer/ascii_table.php

例: ハ -> (データシートを見ると) 01000000 -> (ASCII コード変換テーブルを参照して) 0x40

f:id:sea_mountain:20130921220230j:plain

今回色々やって思ったこと

  • 電子工作楽しい
  • インターネット上の情報少ない

  • 部品揃えるの大変

    • 1つ買い忘れただけで何もできなくなる
    • 人に聞いたほうがいい。ただし、実物とか現実の環境がないと説明できない。(プログラムなら持ち運べるが…)
  • モジュール壊れやすい・壊れたのか判断できない。組み合わせによって動く場合もあるらしい。
    • ACM1602NI はドライバの挙動が特殊らしく、Raspberry Pi だとそのままでは動かない。Arduino では大丈夫らしい。

総じては、とても楽しいのですが、コストが高いかつ一人で学ぶのが困難なのでとてもむずかしく感じます。
画面の中だけではなく、実際に現実のものが光ったり動いたりするのは、とても感動するのでちまちま続けたいと思います。