【Python】毎月300円かかる時計を作った話。
注意
普通こんなにかかりません。
どんな手順で作ったのかを書いていきます。
環境
- 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で書き方が違うみたい。
修正して、再度実行。
動いた!!
では、一度SSH側の実行は停止し、実機を操作して、実行。
ヨシ!!
では、ズレないかの検証を兼ねて、適当なとこに置いておいて、ついでに電力計を刺しておいてっと。
~24時間後~
電力メーターが10円を刺している...
うせやろ..
ただの時計なのに、1日で10円。1ヶ月で300円。
毎月DAISOで時計買えるやんけ...
Discussion