サーバ構築・運用・監視のネットフォース

raspberry pi で卓上時計を作ってみました


2016/06/17
Jessieバージョンではうごきませんでした。ゴメンナサイ

2016/02/22
※若干ソースコードを修正したのと、GitHubで管理するようにしたので、ダウンロードは
https://github.com/sibira/PiTime
の左上あたりにあるDownloadZipをクリックしてダウンローしてください。
(ついでに、最高気温~最低気温の表示もつけました)

なにか面白そうな事が出来ないかなと思って購入したRaspberryPiですが
mosquittoでMQTTとかを検証し、特にやる事もなくなってすっかりほこりをかぶってしまいました。

せめて何かしようと思い、卓上時計を作ってみました。
そのソースコードと構築方法を載せておきます。

raspberry pi 卓上時計 写真

 

通常画面

raspberry pi 卓上時計 説明画面

 

ステータス異常画面

raspberry pi 卓上時計 エラー画面

 

機能は
・日時と時計表示
・システムリソースを円グラフで表示
・休日対応カレンダー表示
・お天気情報表示
・簡易コマンドのショートカット
です。

 

使った機材
・Raspberry Pi 2 Model B
・cocopar 5インチ USBタッチディスプレイHDMI LCD ※とりあえずプログラムは800×480用の表示用になっています。
・PLANEX 無線LAN子機 (USBアダプター型) 11n/g/b 150Mbps MacOS X10.10対応 GW-USNANO2A (FFP)
・OS:raspbian wheezy 7.8
・microSDカード
・キーボード等その他諸々

midoriブラウザのフルスクリーンモードを使用し
・時計としての日時表示
・livedoor天気情報のWeather Hacksをjsonで取得しお天気も表示
・jqueryとjquery.knobのライブラリを使用し、ステータスをグラフィカル表示
http://jquery.com/
http://anthonyterrien.com/knob/

時計表示デザインとフルスクリーンには以下のサイトを参考にさせて頂きました。
参考サイト http://blog.o24.me/?p=749

ちなみに使っているRaspberryPi用HDMIの5インチディスプレイはEDID情報が取得出来ないので、そういう方は
/boot/config.txt に
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
config_hdmi_boost=4

みたいな記述を追加しないとそもそもモニターに映らないので一応ここだけ記述しときます。

調理方法
(文中のnanoはviでも別のエディタでもお好きな方で。)

・OSセットアップ
まずRaspberryをつかってraspbian wheezyをセットアップします。jessieでもいけると思ってますが、未確認。
外部とネットワーク接続できるところまで行ってください。(名前解決も)

・ファイルをダウンロード
※記事の先頭に移動しました

・スクリプト設置(設置がわからんという方はUSBメモリ経由とかでもいいかもしれません。)
/usr/lib/cgi-bin/にtime.cgiを置く。
sudo chown pi:pi time.cgi
sudo chmod 755 time.cgi
で権限とユーザを変更

sudo mkdir /var/www/js
sudo chown pi:pi /var/www/js
sudo chmod 755 /var/www/js
でディレクトリ作成、権限とユーザを変更

先ほど作った/var/www/jsに jquery-2.1.4.min.js と jquery.knob-1.2.12.min.js を置く
sudo chown pi:pi /var/www/js/jquery-2.1.4.min.js
sudo chown pi:pi /var/www/js/jquery.knob-1.2.12.min.js
sudo chmod 644 /var/www/js/query-2.1.4.min.js
sudo chmod 644 /var/www/js/jquery.knob-1.2.12.min.js
で権限とユーザを変更

・raspbianをとりあえずアップデート(容量拡張しないと足りませんので注意)
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
再起動
sudo apt-get autoremove

・perlのモジュールインストール
sudo cpan (yes/noを聞かれたら、とりあえずエンター)
install JSON
install Calendar::Japanese::Holiday
exit

・その他必要なパッケージインストール
sudo apt-get install apache2
sudo apt-get install unclutter
sudo apt-get install midori
sudo apt-get install ethtool

・apacheの起動ユーザ変更
sudo nano /etc/apache2/apache2.conf(178行目あたり)

User ${APACHE_RUN_USER}

User pi
(サーバ用途としてはよろしくないのですが、諸々の都合上)

・フルスクリーン設定
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart で以下を追加
@/usr/bin/midori -e Fullscreen -a http://localhost/cgi-bin/time.cgi
@unclutter
@xset s off
@xset s noblank
@xset -dpms

・起動時、xwindowでデフォルト起動設定
raspi-config
3 Enable Boot to Desktop/Scratch
Desktop Log in as user ‘pi’ at the graphical desktop を選択

・再起動後、時計の画面になっている筈。

とりあえず表示が可能になったら、次にCGIの設定を行います

■CGI設定

#ネットワークインターフェース(wlan* or eth*)
my $para_wlan0 = “wlan0”;

#再生デイバス番号(番号 or none)
my $para_int_vol1 = “0”;
#録音デイバス番号(番号 or none)
my $para_int_vol2 = “1”;
ここの番号は、amixer -c ● の黒丸の番号になります。

#お天気の地域設定
my $weather_area = “130010”;

地域の番号を入力しないといけません(設定されているのは東京です)
http://weather.livedoor.com/weather_hacks/webservice

番号わからないという方は
http://weather.livedoor.com/
から各地の天気のページにいったURLのアドレスが各都道府県になっている様子

例)長野だと以下のURLになるのでパラメーターは200010
http://weather.livedoor.com/area/forecast/200010

設定が終わったら、キーボードのF5を押して画面をリロードしてみてください。

その他
CGI部分のパラメータ変更部分を変えれば配色やある程度の画面サイズは変えられます。
円の大きさを変更したい場合はソースを解析して頑張ってみてください。

仕様書
初期値では一時間毎にページがリロードされます。

指定された閾値を超えた値があった場合、該当項目の円グラフは赤に表示されます。
たとえば温度上がりすぎとか。

画面上の情報は、左から
TMP⇒CPU温度
VOLT⇒CPU電圧
LOAD⇒ロードアベレージ
MEM⇒メモリ使用率(空き容量はMemAvailable値を参照しています)
DISK⇒ディスク使用率(ターゲットは/dev/rootのパーティション)
Quality⇒無線LAN:接続品質(有線の場合は別)
Signal⇒無線LAN:信号レベル(有線の場合は別)
Noise⇒無線LAN:ノイス・レベル(100%でノイズ無し)(有線の場合は別)
です。
その下のMessageは、dmesgに特定のエラー行があった場合に出力されます。
グラフ真ん中の数値はボリューム表示です。
これらの値はリアルタイム表示ではないので、1時間毎ごとの更新になります

一番下のコマンドは、マウスやタッチパネルで押すと以下動作をします
Reload⇒ページをリロードします
BClose⇒ブラウザを終了します
Reboot⇒Raspberrypi自体を再起動します
Pw-off⇒Raspberrypi自体を停止します

本当はもっとグリグリ動かしたり、もうちょっとシステムの値をすぐ反映できればいいのですが
CPUリソース消費するのでやめました。

今後の改良次第ということで。

© netforce