Skip to content

Instantly share code, notes, and snippets.

@t114
Created August 28, 2017 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t114/c6943200803a920c7295ce94c8219e98 to your computer and use it in GitHub Desktop.
Save t114/c6943200803a920c7295ce94c8219e98 to your computer and use it in GitHub Desktop.
https://sakura87.net/archives/2155 のglcd.cをPythonに翻訳させていただきました。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wiringpi as w
import sys
import time
# データ線以外のポート定義
# データ線はw.digitalWriteByteコマンドを使いたいので
# GPIOの0~7番に接続する。
# ※ R/WはL時書き込みモードなので接続しない。
# もし万一読み込みモードに設定してしまった場合
# パイが焼けてしまうので絶対に繋がない。
LCD_RS = 13 # データ・コマンド切り替え信号
LCD_EN = 12 # イネーブル信号
LCD_C1 = 10 # コントローラ切り替え信号(右半分)
LCD_C2 = 11 # コントローラ切り替え信号(左半分)
LCD_RE = 14 # リセット信号
# BMPデータ転送関数
# 128x8バイトの配列を「末尾 ex: array[127][7]」から転送する
def lcd_bmp(BMPData):
lcd_set(1,0,0x3E);lcd_set(2,0,0x3E);
# 転送 BMPファイルは左下から記録されているので後ろから読み込む
for d in range(0, 128):
for n in range(0, 8):
lcd_set(1+(d>=64),0,0x40+(d%64));lcd_set(1+(d>=64),0,0xB8+n);lcd_set(1+(d>=64),1,BMPData[127-d][7-n]);
lcd_set(1,0,0x3F);lcd_set(2,0,0x3F);
# LCD制御命令
# CntSel=コントローラセレクト
#  1 =CS1  2 =CS2
# rs=データ・コマンド切り替え
#  0 =コマンド 1 =データ
# Data = 8bit制御データ
def lcd_set(CntSel, rs, Data):
chip_sel = [LCD_C1, LCD_C2]
w.digitalWrite(chip_sel[0],0);w.digitalWrite(chip_sel[1],0);
w.digitalWriteByte(0);
w.digitalWrite(LCD_EN,0);#time.sleep(0.00045);
w.digitalWrite(LCD_RS,rs);#time.sleep(0.002);
w.digitalWrite(chip_sel[CntSel-1],1);
w.digitalWrite(LCD_EN,1);#time.sleep(0.00045);
int_data = Data if isinstance(Data, int) else ord(Data)
w.digitalWriteByte(int_data);
#time.sleep(0.002);
w.digitalWrite(LCD_EN,0);
w.digitalWrite(LCD_RS,0);
w.digitalWriteByte(0);
w.digitalWrite(chip_sel[0],0);w.digitalWrite(chip_sel[1],0);
def lcd_display(display_filename):
if w.wiringPiSetup() < 0:
print("GPIO Err...")
#データbit用ポートを出力に設定
for i in range(0, 8):
w.pinMode(i,w.OUTPUT)
#time.sleep(0.002)
# データ以外のポートを出力に設定
w.pinMode(LCD_RS,w.OUTPUT)
w.pinMode(LCD_EN,w.OUTPUT)
w.pinMode(LCD_C1,w.OUTPUT)
w.pinMode(LCD_C2,w.OUTPUT)
w.pinMode(LCD_RE,w.OUTPUT)
w.digitalWrite(LCD_RE,1)
#time.sleep(0.05)
w.digitalWrite(LCD_RE,0)
#time.sleep(0.05)
w.digitalWrite(LCD_RE,1)
# 液晶初期化
lcd_set(1,0,0xC0);lcd_set(1,0,0x3F);
lcd_set(2,0,0xC0);lcd_set(2,0,0x3F);
# モノクロ2値 1bit 64x128サイズのBMPファイル読み込み
# 液晶の入力端子がある方を「下」にした場合
# Windows標準のペイントで「右90度回転」させればOK。
# 入力端子を「上」にした場合は「左90度回転」
BMPData = []
f = open(display_filename, "rb")
# 読み込み ファイル形式が(1bit BMP 64x128px)だと前提して
# 色々と端折ってデータ読み込み。↑の形式じゃないとエラー
buf = f.read()
for i in range(0, 128):
BMPData.append(buf[62+(i*8):62+(i*8)+8])
f.close()
# 読み込んだデータを転送
lcd_bmp(BMPData);
if __name__ == '__main__':
args = sys.argv
if len(args) != 2:
sys.exit
#lcd_display(args[1]) # Python 3.5.3
lcd_display(args[1].decode("utf-8")) # Python 2.7.13
@t114
Copy link
Author

t114 commented Aug 28, 2017

python glcd.py test.bmp で指定したビットマップイメージをTG12864B-02WWBVに表示させるプログラムです。回路図など詳細はhttps://sakura87.net/archives/2155 の記載の通りです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment