JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Raspberry Pi Pico MicroPython RTC I2C LCD2004表示

2021-12-20 18:34:07 | Raspberry Pi Pico
 Raspberry Pi Pico MicroPythonプログラミングで、RTC(リアルタイムクロック)をI2C LCD2004に表示してみます。

 LCD2004の表示は、今回はライブラリを使います。I2C LCD1602/2004用のライブラリは、ネットやYouTubeで調べると複数あるようです。
 その中で、T-622 /RPI-PICO-I2C-LCDというライブラリを使ってみます。GitHubのこちらのページにアクセスします。 
 lcd_api.py とpico_i2c_lcd.py を開いて、Raspberry Pi Picoに同じファイル名でコピペします。
 回路図です。LCD1602/2004は5V動作ですが、直接I2Cバスに接続することもできるのですが、安全のため、3.3V/5VのレベルコンバータモジュールPCA9306を入れています。(秋月電子のモジュールで、3.3V側、5V側両方にプルアップ抵抗が入っています)I2Cは、id=1,sda=Pin(14),scl=Pin(15)を使います。

 スクリプトです。main.pyとして保存します。1secごとにTimer割込みを発生させて、RTCの表示を更新しています。Pico内蔵LEDは、1secごとに点滅します。Thonnyを経由して、パソコンの時計の値が書き込まれますので、Picoをパソコンに接続している場合は、現在の時刻が表示されます。
 Thonnyを使わないで、電源だけを入れると2021/01/01 00:00:00と表示され、カウントアップしていきます。
-----------------------------------------------------------------------------------------------------
from machine import I2C,Pin,Timer
import utime
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd

I2C_ADDR      = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20

i2c = I2C(1, sda=Pin(14), scl=Pin(15), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
timer=Timer()
led = Pin(25,Pin.OUT)

lcd.move_to(3,0)
lcd.putstr("Real Time Clock")

def clock(t):
     global led
     led.toggle()
     lcd.move_to(0,2)
     time=utime.localtime()
     lcd.putstr("{year:>04d}/{month:>02d}/{day:>02d} {HH:>02d}:{MM:>02d}:{SS:>02d}".format(
             year=time[0], month=time[1], day=time[2],
             HH=time[3], MM=time[4], SS=time[5]))

timer.init(freq=1,mode=Timer.PERIODIC,callback=clock)

while True:
     pass
-----------------------------------------------------------------------------------------------------
ブレッドボードです。