ナルシーNote

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

<Python>Raspberry Pi でLCDを使う 秋月AE-AQM0802+PCA9515

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

 

秋月電子通商さんで下記のものを購入しました。

akizukidenshi.com

 

Raspberry Pi のGPIO端子に合わせたピン配置となってますので、

直接GPIOにさすこともできます。

f:id:Cars_Narcy:20210321074524j:plain

接続場所

f:id:Cars_Narcy:20210321074559j:plain

取付例

これだと配線図もいらないですね。

 

参考にしたコードはここです。

WiringPi-Pythonを使ってAQM0802A / ST7032i LCD表示 - Qiita

  • カタカナへの変換

I2C 16×2 LCDで日本語(カタカナ)を表示する(pythonプログラムあり) | 空飛ぶラズベリーパイ

 

こんなに便利な情報がいつでも手に入るなんてありがたいです。

素人でも使えました。

本当にありがとうございます。

 

 参考にしたコードをちょこっと変更しました。

内容はさっぱりわかりませんけどね~😅

lcd_aqm0802a.py
# -*- coding:utf-8 -*-
import wiringpi as wp
import time

class LCD_AQM0802A:

    def __init__(self, i2c_addr):
        self.i2c = wp.I2C()
        self.fd = self.i2c.setup(i2c_addr)
        self._init()

    def _init(self):
        self.i2c.writeReg8(self.fd, 0x00, 0x38) # function set: 8 bit, 2 line
        self.i2c.writeReg8(self.fd, 0x00, 0x39) # function set: 8 bit, 2 line, IS=1
        self.i2c.writeReg8(self.fd, 0x00, 0x14) # internal OSC freq
        self.i2c.writeReg8(self.fd, 0x00, 0x70) # contrast set
        self.i2c.writeReg8(self.fd, 0x00, 0x56) # Power/ICON/Constrast
        self.i2c.writeReg8(self.fd, 0x00, 0x6c) # Follower control
        time.sleep(0.2)      # wait time > 200 ms
        self.i2c.writeReg8(self.fd, 0x00, 0x38) # function set: 8 bit, 2 line, IS=0
        self.i2c.writeReg8(self.fd, 0x00, 0x06) # Entry mode set
        self.i2c.writeReg8(self.fd, 0x00, 0x0c) # Display on/off
        self.clear()                            # Clear display

    def set_contrast(self, contrast):
        """ Set contrast (0 - 15). """
        if contrast < 0:
            contrast = 0
        if contrast > 0x0f:
            contrast = 0x0f
        self.i2c.writeReg8(self.fd, 0x00, 0x39)
        self.i2c.writeReg8(self.fd, 0x00, 0x70 + contrast)

    def clear(self):
        """ Clear display and return to home position. """
        self.i2c.writeReg8(self.fd, 0x00, 0x01) # clear display
        time.sleep(0.01)   # wait time > 1.08 ms
        self.i2c.writeReg8(self.fd, 0x00, 0x02) # return home
        time.sleep(0.01)
    
    def set_entry_mode(self, increment, shift):
        mode = 0x04
        if (increment): mode = mode + 2
        if (shift): mode = mode + 1
        self.i2c.writeReg8(self.fd, 0x00, mode)

    def set_cursor(self, y, x):
        """ set cursor location (address counter)."""
        if x < 0: x = 0
        if y < 0: y = 0
        ddram_addr = y * 0x40 + x
        self.i2c.writeReg8(self.fd, 0x00, 0x80 + ddram_addr) # set DDRAM address

    def print(self, str, wait = 0):
        for c in str:
            self.i2c.writeReg8(self.fd, 0x40, ord(c))
            if (wait > 0): time.sleep(wait)

    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

上のコードをlcd_aqm0802a.pyに保存して、下のコードを適当な名前で保存すればLCDが使えます。

GPIOやI2Cを初めて使う方はインストールが必要です。

バックライトも点けてみました。

import RPi.GPIO as GPIO 
import time
from lcd_aqm0802a import LCD_AQM0802A
if __name__ == '__main__':
    
    lcd = LCD_AQM0802A(0x3e)  #addr
    
    GPIO.setmode(GPIO.BCM)    
    GPIO.setup(4,GPIO.OUT)   #Backlight
    
    # show characters in 2 lines
    lcd.set_cursor(0, 0)
    lcd.print(lcd.katakana("ナルシーNote"))
    lcd.set_cursor(1, 0)
    lcd.print('Sample')
    time.sleep(2)

    GPIO.output(4,GPIO.HIGH) #Backlight
    
    #set contract
    contracts = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]
    for num in contracts:
        lcd.set_contrast(num)
        time.sleep(0.05)
    time.sleep(2)
    
    # LCD clear
    lcd.clear()

    # ticker
    lcd.set_entry_mode(True, True)
    lcd.set_cursor(0, 8)
    lcd.print('cars-narcy.hatenablog.com', 0.3)
    
    lcd.clear()
    GPIO.output(4,GPIO.LOW) #Backlight   
    GPIO.cleanup()   

 

ご使用に関しては自己責任でよろしくお願い申し上げます。


2021年2月にpaizaラーニングでPythonを受講しました。
コメントでアドバイスをいただけると幸いです。

 

ほしい物リスト

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