🎉

【Python】毎月300円かかる時計を作った話。

2025/03/10に公開

注意

普通こんなにかかりません。
どんな手順で作ったのかを書いていきます。

環境

  • Raspberry Pi Model.B
    • OS: Raspberry Pi Lite
    • Program: Python

経緯

普段作業しているデスクの周りに時計がなく、いつもPCの時計を見ていたが、それでは味気ないと思って作るに至った。
使えるものとしては、余っていたラズパイ一台と、17インチの液晶パネル。

制作

まずは、ラズパイにOSを入れる。
以前GUI版のOSを入れたが、まともに動作せずすぐに墓の中へ。
今回は反省し、CUI版のRaspberry Pi Liteをインストール。
まずは、imagerを公式サイトからダウンロードし、Modelを選択、LegacyOSから、Liteをダウンロードする。
SDカードに入れ、ラズパイに挿す。

次に、ラズパイの設定を行う。
基本的に全てデフォルト設定で進めていく。言語はENで、キーボードはJapaneseLayoutを選択する。
適当にアカウントを作成したあと、SSHで作業が進められるように設定を変更する。
raspi-configから、systemsetting>SSHを選択して、有効にするか尋ねられるのでYes。
これで、SSHで接続できるようになる。
デフォルトではDHCPの設定だが、時計なので、SSHで開発が終了したら、あとは動かしておくだけなので、IPを固定する必要もない。

次に、Windows側の設定を行う。
時計の開発用にvenvを新たに作成し、そこで開発を進めていく。
今回は、CUIでの表示に、アスキーアートを使おうと思っているので、入力した文字が、アスキーアートとして表示されるようになるartというライブラリをインストールしておく。

pip install art

ここから、コードを書いていく。
今回は、時計を作成する。

  • 要件
    • 時:分 表記
    • 秒針/日付などの情報は不要。
    • CUIでの実行

今回は時刻の取得にdatetimeを使用する。

参考
https://note.nkmk.me/python-datetime-now-today/#unix-timetime
https://note.nkmk.me/python-datetime-usage/

import datetime
import art
while True:
    now = datetime.datetime.now()
    tprint(now.strftime("%H:%M"))

一旦これで実行。

止まらん。

これではいかん。
とりあえず、sleep関数を程よく入れる。

import datetime
import art
while True:
    now = datetime.datetime.now()
    tprint(now.strftime("%H:%M"))
    sleep(10)

時間がいっぱい表示されるのは気持ち悪いので、画面表示をするたびに、画面がクリアされるように修正。

import datetime
import art
while True:
    now = datetime.datetime.now()
    tprint(now.strftime("%H:%M"))
    sleep(10)
    system('cls')

これで、結構見やすくはなったが、時計がチカチカするので、1分ごとに、切り替わるようにしよう。

import datetime
import art
while True:
    now = datetime.datetime.now()
    tprint(now.strftime("%H:%M"))
    sleep(60)
    system('cls')

これでよし。しばらく、windows側で実行させておこう。
~5時間後~
なんか時間ズレてる~

sleepのわずかな誤差が響いてるっぽい。
てことで修正。

import datetime
import art
while True:
    now = datetime.datetime.now()
    tprint(now.strftime("%H:%M"))
    sleep(60-now.seconds)
    system('cls')

これで、毎分誤差蓄積されることはないはず。
ちょっと待とう。
~5時間後~
多分ズレてないし、ヨシ!!

てことで完成。
では、SSHでアクセスして、ラズパイにこのコードをコピーして、venvの環境を作って、artライブラリをインストールして、テスト実行。
ERROR
あれ...
どうやら、clearはwindowsとLinuxで書き方が違うみたい。
https://qiita.com/ad2009/items/944150e3a8d3b37c7b21

修正して、再度実行。
動いた!!
では、一度SSH側の実行は停止し、実機を操作して、実行。
ヨシ!!

では、ズレないかの検証を兼ねて、適当なとこに置いておいて、ついでに電力計を刺しておいてっと。

~24時間後~
電力メーターが10円を刺している...
うせやろ..
ただの時計なのに、1日で10円。1ヶ月で300円。
毎月DAISOで時計買えるやんけ...

Discussion