ナルシーNote

2020年12月からC#、2021年2月からPythonを51歳で始めました。学んだことを備忘録として残してます。そろそろN88BASICは卒業しようかな😱

<Python>Raspberry Pi でLCDを使う Longruner LK51

Raspberry PiLCDを使うサンプルです。

 

アマゾンで下記のものを購入しました。

Longruner ディスプレイ R3 Mega2560適応 2004 LCD ディスプレイ モジュール IIC/I2C/TWI ブルースクリーン パネル拡張 ボード 4ピン ジャンパーワイヤーが付き LK51

価格: ¥1,299

VKLSVAN 10個セット 双方向ロジックレベル変換モジュール 4チャンネル 3V~5V IIC I2C ロジックレベル変換器

 価格:¥660(10個入り)

  

表示サンプル

f:id:Cars_Narcy:20210403124458p:plain

表示サンプル

双方向ロジックレベル変換モジュールを使ってこんな風に配線しました。

f:id:Cars_Narcy:20210403123756p:plain

回路図

 

参考にしたコードはこちら。

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を受講しました。
コメントでアドバイスをいただけると幸いです。

 

ほしい物リスト

ナルシーのほしい物リストはこちら