ラズパイでキャラクタLCDに文字を表示させてみる
こんばんは。らずべりーです。
今日は旦那ちゃんの協力でラズパイさんとキャラクタLCDを繋いで、文字列を表示させてみました。なんとか完成したので備忘録として。
目次
1. 動作環境
- Raspberry Pi3 ModelB
- Raspbian Jessie
- Python3.4.2
- 16文字x2桁のキャラクタLCD (SC1602BS-B: 秋月電子で購入)
- Adafruit_Python_CharLCD (キャラクタLCDを動かすためのPythonモジュール)
2. ラズパイとキャラクタLCDのつなぎ方
私がやったのではないので、詳細は割愛しますが、このあたりが参考になりそうです。
3. キャラクタLCDの動かし方
Adafruitの方がGitHubで公開されているAdafruit_Python_CharLCDというモジュールを使いました。
コードの中身をみてみると、LCDやらPINの設定、初期化、文字列の変換などを良い感じにしてくれているみたい。Python2、Python3どちらでも動くところもGOOD。(どちらも動作確認済み)
このモジュールの使い方は先程ご紹介したページも併せて参考に。
3-1. インストール方法
以下、ラズパイのLXTerminalで入力。
$ sudo pip install Rpi.GPIO $ git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
Python2で使う場合は
$ cd Adafruit_Python_CharLCD $ sudo python setup.py install
Python3で使う場合は
$ cd Adafruit_Python_CharLCD $ sudo python3 setup.py install
これで導入完了です。
3-2. 文字列表示のためのPythonプログラム
今日の日付と現在時刻を表示してみます。
まずはじめに時刻の確認と時計合わせ。
LXTerminalで
$ date $ sudo timedatectl set-timezone Asia/Tokyo $ date
次に、プログラムを書いていきますが、基本的にはexamples
に入っている.py
ファイルやAdafruit_CharLCD.py
ファイルの中身をみるとなんとなく何をやっているかはわかるようになっています。(Beautiful code万歳!!)
Adafruit_CharLCD.py
の中身を参考に、表示する文字列のコードも表示できるようにしてみました。
GPIO番号(d4-d7)はつなぎ方によって違う番号になるので注意です。(これをまちがうと、思ったのと違う文字が出ます!)
#!/usr/bin/python3 # coding: utf-8 import Adafruit_CharLCD as LCD from datetime import datetime dt_now = datetime.now() # GPIO番号 lcd_rs = 23 lcd_en = 24 lcd_d4 = 22 lcd_d5 = 27 lcd_d6 = 4 lcd_d7 = 17 # 16文字x2行 lcd_columns = 16 lcd_rows = 2 # Adafruit_CharLCDクラスのインスタンス化(初期化も同時に行われている模様) lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows) # 液晶をリセット lcd.clear() # 文字列の表示(時刻を表示してみます。) message_text = dt_now.strftime("%Y/%m/%d\n%H:%M:%S") lcd.message(message_text) # 文字列のコードをターミナルで表示 for i in message_text: value = ord(i) ud4 = ((value >> 4) & 1) > 0 ud5 = ((value >> 5) & 1) > 0 ud6 = ((value >> 6) & 1) > 0 ud7 = ((value >> 7) & 1) > 0 ld4 = ((value) & 1) > 0 ld5 = ((value >> 1) & 1) > 0 ld6 = ((value >> 2) & 1) > 0 ld7 = ((value >> 3) & 1) > 0 print("Char:", i, "->", value) print(" Upper -", int(ud7), int(ud6), int(ud5), int(ud4)) print(" Lower -", int(ld7), int(ld6), int(ld5), int(ld4))
このコードをファイル名lcd_test_3.py
という名前で/home/pi/Adafruit_CharLCD
フォルダに保存し、LXTerminalにて
sudo python3 lcd_test_3.py
で実行すると、、、表示されました!!
ちなみに、LXTerimalに表示させた2017/までの文字列コードの結果は以下の通りです。Char:の後がUnicode 文字1つ分、その後ろはその文字の Unicodeポイントを表す整数に置き換えた数字です。Upper, LowerはキャラクタLCDに送るためのコード8桁に対応します。
""" Char: 2 -> 50 Upper - 0 0 1 1 Lower - 0 0 1 0 Char: 0 -> 48 Upper - 0 0 1 1 Lower - 0 0 0 0 Char: 1 -> 49 Upper - 0 0 1 1 Lower - 0 0 0 1 Char: 7 -> 55 Upper - 0 0 1 1 Lower - 0 1 1 1 Char: / -> 47 Upper - 0 0 1 0 Lower - 1 1 1 1 """
視覚化すると理解が進みますね。
とりあえず表示できるようになってよかったです(^ ^)ノ