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
-----------------------------------------------------------------------------------------------------
ブレッドボードです。
すばらしく わかりやすいサイトをありがとうございます
下記の部分で うまくいかなかったのでご指導を仰ぎたいと思い 投稿いたしました
********
その中で、T-622 /RPI-PICO-I2C-LCDというライブラリを使ってみます。GitHubのこちらのページにアクセスします。
lcd_api.py とpico_i2c_lcd.py を開いて、Raspberry Pi Picoに同じファイル名でコピペします
********
1 JH7UBC様 の書かれたプログラムをフォルダを作っていれました
2 GITHUB で lcd_api.py とpico_i2c_lcd.pyの書かれたコードを raw ボタンを押して ファイル保存してから 作ったフォルダに
入れました
3 フォルダには JH7UBC様のプログラムとlcd_api.py pico_i2c_lcd.py の3つがありますが thonnyから実行すると
>> %Run -c $EDITOR_CONTENT
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
ImportError: no module named 'lcd_api'
>>>
と表示されます
何がおかしいのかご教授お願いいたします
******************************************************
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
*********************************
この記事を書いてから半年以上たっていますので、回路を再現しながら、確認テストをしましたので、返信が遅れました。
ライブラリの保存場所ですが、Pico本体です。ただし、Thonny IDEでPicoに保存してください。
つまり、IDE上でlcd_api.py とpico_i2c_lcd.py開き、それぞれ同じファイル名で保存します。IDEのメニューから「ファイル」→「名前を付けて保存」で保存してください。
以上、やってみてください。
pico本体に 保存していませんでした
早速 やってみます
ありがとうございました