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
-----------------------------------------------------------------------------------------------------
ブレッドボードです。



最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
ライブラリの保管場所について (吉田純造)
2022-08-29 17:23:48
Raspberry Pi Pico MicroPython RTC I2C LCD2004表示
すばらしく わかりやすいサイトをありがとうございます
下記の部分で うまくいかなかったのでご指導を仰ぎたいと思い 投稿いたしました
********
その中で、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
*********************************
返信する
RE:ライブラリの保管場所について (JH7UBC)
2022-08-31 13:17:03
 吉田さん こんにちは JH7UBC畠です。
 この記事を書いてから半年以上たっていますので、回路を再現しながら、確認テストをしましたので、返信が遅れました。

 ライブラリの保存場所ですが、Pico本体です。ただし、Thonny IDEでPicoに保存してください。
 つまり、IDE上でlcd_api.py とpico_i2c_lcd.py開き、それぞれ同じファイル名で保存します。IDEのメニューから「ファイル」→「名前を付けて保存」で保存してください。
 以上、やってみてください。
返信する
Unknown (吉田純造)
2022-09-01 10:18:02
JH7UBC様 ご指導 ありがとうございました
pico本体に 保存していませんでした
早速 やってみます
ありがとうございました
返信する

コメントを投稿