これまでのあらすじ
前回#1(2021年)、Raspberry Pi3に3.2インチ液晶パネルを付けてモニターとしてコマンドラインの画面が表示できて、めでたしめでたしでした。
ですがその後まったくRasberry Piと液晶パネルは使われず、時代は2024年、生成AIの時代を迎えたのでした。
今回のミッション
今回のミッションは、この使われていない液晶パネルにRaspberry Piのデスクトップを綺麗に表示し、GUIの時計アプリを作って表示します。
方針としては、
①液晶パネルにRaspberry Piのデスクトップを表示させる
②GUI時計アプリを作り、①で全画面表示する
です。
それでは開発開始
①のデスクトップを表示することはすぐにできました。/boot/config.txtファイル内の画像解像度を、液晶パネルの解像度800×480にあわせればいいだけでした。
この画面内でGUIアプリを動かすことになるのですが、かなり厳しいのでVNCで操作して作業しました。
なんせラズベリーボタンをクリックするとメニューはでるのですが、こんなことに。
②のGUI時計アプリ開発ですが、Pythonで「tkinter」というライブラリを使うと、PythonでGUIアプリを作れるとのことで、Pythonで開発を開始ぃぃん。
ここからが生成AI時代。Copilotに
・Pythonで時計のアプリを作りたい
・画面の中央に大きく表示して
・実行後画面を最大化して
・マウス操作が5秒間なければマウスポインタを非表示にして
・ダブルクリックしたら終了して
などお願いしながら試行錯誤。
ちょこちょこ暇な時間作りこんで、やっと全画面表示の時計ができました。
うまくCopilotに通じないところとか、説明がめんどくさいときは自分でコーディングをいじりました。
やっぱり音が欲しい
欲を出して毎正時(0時00分とか1時00分とか)に音を鳴らしたい。ネットでRaspberry Piで音を出す方法を調べました。GPIO(Raspberry Piの基板上のピン)に接続することでPythonで周波数(音階)を指定して音を鳴らせることがわかりました。本当にたまたまですが、何かの故障した機器の小さなスピーカーがあったので、それを付けて毎正時にピッってなるようにしました。
GPIOのピンの中に、PWM(パルス幅変調)が可能なピンが数本あり、これはプログラムで周波数と何秒間出力するかを指定するだけで、「ピー」とか鳴らせるようにできるピンなのです。
たまに聞く時報を調べたら440Hzと880Hzだったので、880Hzにしました。
温湿度、気圧計をつけたい!
時計のほかに温湿度と気圧が表示されているとかっこいいと思い、付けたくなりました。「BME280」というセンサーをRaspberry Piに接続すると、温湿度と気圧を数値で取得できるそうで、2千円未満で購入できるのですが、すぐ購入して失敗することが多いので数日色々調べました。(あまり関係ないですが、「BME80」という廉価製品をBME280として売っているサイトがありました。BME80ですと千円未満で買えます。気を付けましょう。)
結構調べた結果、この液晶パネルがセンサーとつなぐピンを使っていて、I2Cという方式が使えなくなっていることがわかりまして、温湿度と気圧センサーは断念しました。
速攻で買わなくてよかった・・・・
カレンダーをつけたい!
やはり時計だけだと面白くないので、カレンダーも表示させようとCopilotに依頼してtkinterライブラリを使ったカレンダー表示プログラムを追加しました。
・日曜始まりの今月のカレンダーを表示させたい
・土曜日は青文字、日曜日、祝日は赤文字にして
などなどCopilotにお願いして作成。
Googleカレンダーの情報も出したい!
カレンダーができると、わたしはいつもGoogleカレンダーを使っているので、このイベント情報を取得して画面に表示したくなります。ということでネットで調べてGoogle Calendar APIを使って直近のイベントを5つ表示するようにしてみました。これはネットで調べてGoogle Cloudのアカウントを取得したり色々しています。
ミッション終了
暇な時間にCopilotと相談し、ネットも調べ、1週間ぐらいで時計とカレンダーとGoogle Calendarのイベントを取得して表示する時計ができました。
(横7.07cm×縦3.98cm)
ピッって音も鳴ります。
2021年の時点でも同じことはできたのでしょうけど、生成AIのCopilotのおかげでかなり効率的に作れたと思います。
まずはミッション終了。
この2年で生成AIがでてくるとは、この先数年でまた激変するかもです。
時代にあわせて、この時計も進化させて行きたいです。
お読みいただきありがとうございました。