<Python>Raspberry Pi でLCDを使う Longruner LK51
Raspberry Pi でLCDを使うサンプルです。
アマゾンで下記のものを購入しました。
価格: ¥1,299
VKLSVAN 10個セット 双方向ロジックレベル変換モジュール 4チャンネル 3V~5V IIC I2C ロジックレベル変換器
価格:¥660(10個入り)
表示サンプル
双方向ロジックレベル変換モジュールを使ってこんな風に配線しました。
参考にしたコードはこちら。
- LCD表示
http://osoyoo.com/driver/i2clcda.py
- カタカナへの変換
I2C 16×2 LCDで日本語(カタカナ)を表示する(pythonプログラムあり) | 空飛ぶラズベリーパイ
こんなに便利な情報がいつでも手に入るなんてありがたいです。
素人でも使えました。
本当にありがとうございます。
あとで自分で使いやすいようにClassにしておきました。
lcd_lk51.py # -*- coding:utf-8 -*- import smbus import time class LCD_LK51: LINE_1 = 0x80 # LCD RAM address for the 1st line LINE_2 = 0xC0 # LCD RAM address for the 2nd line LINE_3 = 0x94 # LCD RAM address for the 3rd line LINE_4 = 0xD4 # LCD RAM address for the 4th line # Define some device constants CHR = 1 # Mode - Sending data CMD = 0 # Mode - Sending command BACKLIGHT = 0x08 # On #BACKLIGHT = 0x00 # Off LCD_ENABLE = 0b00000100 # Enable bit # Timing constants E_PULSE = 0.0005 E_DELAY = 0.0005 #Open I2C interface #bus = smbus.SMBus(0) # Rev 1 Pi uses 0 bus = smbus.SMBus(1) # Rev 2 Pi uses 1 def __init__(self, i2c_addr, lcd_width): # I2C device address self.i2c_addr = i2c_addr # Maximum characters per line self.lcd_width = lcd_width self._init() def _init(self): # Initialise display self.lcd_byte(0x33,self.CMD) # 110011 Initialise self.lcd_byte(0x32,self.CMD) # 110010 Initialise self.lcd_byte(0x06,self.CMD) # 000110 Cursor move direction self.lcd_byte(0x0C,self.CMD) # 001100 Display On,Cursor Off, Blink Off self.lcd_byte(0x28,self.CMD) # 101000 Data length, number of lines, font size self.lcd_byte(0x01,self.CMD) # 000001 Clear display time.sleep(self.E_DELAY) def clear(self): self.lcd_byte(0x01, self.CMD) def lcd_byte(self, bits, mode): # Send byte to data pins # bits = the data # mode = 1 for data # 0 for command bits_high = mode | (bits & 0xF0) | self.BACKLIGHT bits_low = mode | ((bits<<4) & 0xF0) | self.BACKLIGHT # High bits self.bus.write_byte(self.i2c_addr, bits_high) self._lcd_toggle_enable(bits_high) # Low bits self.bus.write_byte(self.i2c_addr, bits_low) self._lcd_toggle_enable(bits_low) def _lcd_toggle_enable(self, bits): # Toggle enable time.sleep(self.E_DELAY) self.bus.write_byte(self.i2c_addr, (bits | self.LCD_ENABLE)) time.sleep(self.E_PULSE) self.bus.write_byte(self.i2c_addr, (bits & ~self.LCD_ENABLE)) time.sleep(self.E_DELAY) def print(self, message,line): # Send string to display message = message.ljust(self.lcd_width," ") self.lcd_byte(line, self.CMD) for i in range(self.lcd_width): self.lcd_byte(ord(message[i]),self.CHR) def katakana(self, text): list1a = u"「。、」ヲ・ィァェゥォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜" list1b = u"アァイィウゥエェオォカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ" list2a = u"ガギグゲゴザジズゼゾダヂヅデドバビブベボ" list2b = u"ザシジスズセゼソゾタダチヂッツナニヌネノ" list3a = u"パピプペポ" list3b = u"ナニヌネノ" text_changed = "" for l in text: if list1a.find(l) >= 0: # カタカナを変換 text_changed += list1b[list1a.find(l)] elif list2a.find(l) >= 0: # 濁音を清音+濁点に text_changed += list2b[list2a.find(l)] text_changed += u"マ" elif list3a.find(l) >= 0: # 半濁音を清音+半濁点に text_changed += list3b[list3a.find(l)] text_changed += u"ミ" else:#その他の文字はそのままにする text_changed += l return text_changed
使い方
# -*- coding:utf-8 -*- import time from lcd_lk51 import LCD_LK51 if __name__ == '__main__': lcd = LCD_LK51(0x27,20)#addr=0x27,width=20 try: while True: lcd.print(lcd.katakana("ナルシーNote"),lcd.LINE_1) lcd.print("Sample",lcd.LINE_2) lcd.print("https://cars-narcy.",lcd.LINE_3) lcd.print("hatenablog.com/",lcd.LINE_4) time.sleep(1.0) lcd.clear() time.sleep(1.5) except KeyboardInterrupt: pass lcd.clear() print ("end")
ご使用に関しては自己責任でよろしくお願い申し上げます。
2021年2月にpaizaラーニングでPythonを受講しました。
コメントでアドバイスをいただけると幸いです。
↓ほしい物リスト↓