matuconとマイコン

ITガジェットが好物です

RaspberryPiとミニディスプレイでシンプル卓上カレンダー作ってみた

f:id:mazcon:20201129011110j:plain

はじめに

普段、仕事デスクにカレンダー付きの時計を置いているのですが、最近接触不良なのか表示がおかしくなってしまいました。

f:id:mazcon:20201129011101j:plain

半分閉じると表示される。。

f:id:mazcon:20201129011105j:plain

カレンダーは仕事中にちょいちょい確認するのですぐ見れるとこにないと不便です。 100均の小さいカレンダーでもいいのですが、せっかくなのでラズパイとミニディスプレイで卓上カレンダーを作ってみようと思います。

環境

リソース 内容
本体 Raspberry Pi4 4GB
OS BerryBoot 上のRaspberry Pi OS
カレンダーソフト MagicMirror2
ディスプレイ OSOYOO 5インチDSIタッチスクリーン

ディスプレイ裏側にラズパイ本体を固定してます。

f:id:mazcon:20201129011944j:plain

カレンダーツール

カレンダー機能として以下を目標にしてみます。

  • できるだけシンプルで見やすいカレンダー
  • タブレットなどでバッテリーを気にせずAC電源で使いたい
  • 月次カレンダーで表示できる
  • 日本の祝日を反映させたい
  • できればフォトフレームにもしたい

カレンダーツールをいろいろ調べてみましたが、今回はMagicMirror2を使ってみようと思います。

magicmirror.builders

鏡をダッシュボード化するツールとしてよく使われているようですが、鏡はいらないので単純にカレンダーを表示するだけで利用します。

「module」と呼ばれる追加機能が豊富でいろんな機能を自由にカスタムできるようです。

3rd Party Modules · MichMich/MagicMirror Wiki · GitHub

表示内容の設定はJSON形式で正確にテキスト編集する必要があるので、ちょっと難易度高めです。

MagicMirror2インストール

公式ドキュメントの通りコマンドコピペでインストールできました。とりあえずホームディレクトリ直下にインストールします。

https://docs.magicmirror.builders/getting-started/installation.html

$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt install -y nodejs
$ git clone https://github.com/MichMich/MagicMirror
$ cd MagicMirror/
$ npm install
$ cp config/config.js.sample config/config.js
$ npm run start

# (リモード接続で起動する場合はディスプレイ番号を指定する)
$ DISPLAY=:0 npm run start

起動すると突然フルスクリーンでデフォルト設定の情報が表示さます。 マウスカーソルは表示されないようです。

f:id:mazcon:20201128162601p:plain

キーボードの右altキーでメニューが表示されます。

f:id:mazcon:20201128162605p:plain

ズームの調整ができるので見やすいサイズに合わせておきます。

f:id:mazcon:20201128162613p:plain

カレンダーとして使うにはラズパイ起動直後にすぐ表示して欲しいので、サービス設定してスタートアップされるようにしておきます。

$ sudo touch /etc/systemd/system/magicmirror2.service

内容は以下で保存します。「WorkingDirectory」は絶対パスでインストールしたフォルダを指定します。

[Unit]
Description=Magic Mirror2

[Service]
Type = simple
Restart=always
WorkingDirectory=/home/pi/MagicMirror
ExecStart=/bin/bash -c 'npm run start'
StandardOutput=syslog
StandardError=syslog
User=pi
Environment=DISPLAY=:0

[Install]
WantedBy=multi-user.target

自動起動の設定と起動の確認をしてみます。

$ sudo systemctl daemon-reload
$ sudo systemctl enable magicmirror2
$ sudo systemctl start magicmirror2

サーバモードで起動すると突然真っ黒画面にはならずブラウザで見れるようになります。

$ npm run server

起動後にブラウザで「http://localhost:8080」にアクセスすると同じ画面が表示されます。 今回は直接起動した方が便利なのでこちらは利用しません。

また、DockerHubにもコンテナが用意されているので、Docker環境を作られてる方はインストールの手間が省けそうです。

不要なデフォルトmoduleを削除

Magic Mirror 2 の表示内容は以下の設定ファイルを編集してカスタムします。

~/MagicMirror/config/config.js

表示内容をいったん時計のみにしてみます。上記ファイル内の「modules」の配列に表示内容が列挙されてるので、alert, updatenotification, clock 以外を消してしまいます。

...
  modules: [
    {
      module: "alert",
    },
    {
      module: "updatenotification",
      position: "top_bar"
    },
    {
      module: "clock",
      position: "top_left",
      config: {
        showDate: false // 日付を消す場合の設定
      }
    },
  ]

};
/*************** DO NOT EDIT THE LINE BELOW ***************/
...

編集はMacからsshで入ってviで編集しました。 保存したらメニューバーからView>Reload あるいはショートカットキーで Ctrl+R で更新するとすぐに反映されます。MagicMirror本体の再起動は不要です。

f:id:mazcon:20201128162617p:plain

時計だけになりました。カンマが抜けてたりカッコが閉じられてなかったり設定ファイルにミスがあると

f:id:mazcon:20201128162621p:plain

こんな感じになります。

カレンダーの表示

サードパーティのカレンダーmoduleを使ってみます。

MMM-CalendarExt2 は高機能なカレンダーでgoogleカレンダーの予定などを表示できます。

github.com

これだとちょっとサイズが大きいので、もう少しシンプルなMMM-CalendarExtMinimonth を使ってみます。

github.com

MMM-CalendarExtMinimonthはMMM-CalendarExt2のプラグインで両方インストール、設定が必要とのことです。

インストール手順は各moduleのGitHubに説明があるので、コマンドコピペで導入します。

$ cd ~/MagicMirror/modules
$ git clone --depth=1 https://github.com/eouia/MMM-CalendarExt2
$ git clone https://github.com/eouia/MMM-CalendarExtMinimonth
$ cd MMM-CalendarExt2
$ npm install

設定はまた「config.js」のmodules 内に追記します。

...
  modules: [
    {
      module: "alert",
    },
    {
      module: "updatenotification",
      position: "top_bar"
    },
    {
      module: "clock",
      position: "top_left",
      config: {
      }
    },
    {
      module: 'MMM-CalendarExt2',
      config: {
        calendars : [{url: "https://www.google.com/calendar/ical/ja.japanese%23holiday%40group.v.calendar.google.com/public/basic.ics"}],
        views: [
            // ここを空にするとMMM-CalendarExt2本体のカレンダーが非表示になる
        ],
        scenes: [{name: "DEFAULT"}],
      },
    },
    {
      module:"MMM-CalendarExtMinimonth",
      position:"bottom_right",
    },
  ]
...

calendars キーにはiCalendarのURLを指定します。途中で切れてしまってますが以下を入力しています。ブログの書き方がまだわかってなく。。すみません。

https://www.google.com/calendar/ical/ja.japanese%23holiday%40group.v.calendar.google.com/public/basic.ics

自分のGoogleカレンダーを指定すれば予定が反映されるようになります。今回は祝日のみ表示したいので一般公開されている日本の祝日用icalを利用させていただきます。 上記URLの他にもいくつか公開されてるようです。

これで画面を更新すると、

f:id:mazcon:20201128163222p:plain

ちょっと小さいのでズームインします。

f:id:mazcon:20201128163227p:plain

私の環境ではicsを読み込むせいか表示までに若干時間がかかりました。ちなみにOSのタイムゾーンが東京になってないと、時間がずれて休日が2日にまたがってしまいます。

f:id:mazcon:20201128162634p:plain

画面スリープ設定

私は仕事中しか見ないので8時間でスリープにしてスクリーンセーバーは止めておきます。

メニューから「スクリーンセーバー」で設定します。

f:id:mazcon:20201128162626p:plainf:id:mazcon:20201128162630p:plain

メニューに出てこない場合は以下のコマンドでインストールします。コマンドでも変更できるようですが割愛します。

$ sudo apt install xscreensaver

写真表示

MMM-ImageSlideshowのmoduleでスライドショーができるようになります。

github.com

インストールはclone のみのようです。

$ cd ~/MagicMirror/modules
$ git clone https://github.com/AdamMoses-GitHub/MMM-ImageSlideshow

「config.js」には以下のように記述しました。写真は左下に表示されるサイズに設定しています。

{
  module: 'MMM-ImageSlideshow',
  position: 'bottom_left',
  config: {
    fixedImageWidth: 320,
    fixedImageHeight: 240,
    imagePaths: ['modules/photos/'],
  }
},

設定したらMagicMirror2自体を再起動しないと反映されなかったのでやっておきます。

$ sudo systemctl restart magicmirror2

こんな感じになりました。スライドショーで切り替わります。トランジションはなくパッと切り替わります。

f:id:mazcon:20201129003354p:plain

「imagePaths」に写真を置くディレクトリを指定しますが、MagicMirror2のインストールパスからの相対パスでないと読み込めませんでした。

しばらく表示させておくと、CPU温度は45℃から50℃程度でした。

リッチに写真表示

MMM-BackgroundSlideshow は写真を背景にするmoduleです。スライドショーもトランジションが設定できます。

github.com

インストールはclone & npm install です。こちらもインストール後にMagicMirror2の再起動が必要でした。

$ cd ~/MagicMirror/modules
$ git clone https://github.com/darickc/MMM-BackgroundSlideshow
$ cd MMM-BackgroundSlideshow
$ npm install
$ sudo systemctl restart magicmirror2

「config.js」の設定です。「position」はfullscreen_belowでないと表示されませんでした。

{
    module: 'MMM-BackgroundSlideshow',
    position: 'fullscreen_below',
    config: {
      imagePaths: ['modules/photos/'],
      transitionImages: true,
      randomizeImageOrder: true,
      backgroundAnimationEnabled: true,
      transitionImages: true,
    },
},

写真を背景にできました。

f:id:mazcon:20201129003340p:plain

カレンダーのデザインと合わない写真も出てきそうです。カレンダーはCSSでデザインを変えられるようで上の写真は透明度を少し下げてみました。

CPU温度は55℃から60℃くらいまで上がりました。

その他の便利module

  • MMM-Cursor

MagicMirror2 はマウスカーソルが表示されないようになってますが、こちらを入れると動かした時だけ表示されるようになります。
いくつか他のmoduleを試した時にボタンなどクリック操作が必要なものがあり、カーソル見えないとクリック不可です。。カレンダー表示のみであれば不要です。

  • MMM-MagicMover

一定時間ごとに表示位置をちょっとだけずらしてくれるmoduleです。焼き付き防止?ですかね。

最後に

卓上カレンダーとしてMagicMirror2をカスタムしてみました。moduleはたくさんありますし、デザインもある程度はカスタムできそうなのでゆっくり作り上げていくのも楽しそうです。