ラズベリーパイに興味がなく買ったこともなかった当方が、「7.9インチ高精細IGZO液晶ディスプレイ」と組み合わせてデジタルフォトフレームを作りました。
市販のフォトフレームにはない機能が欲しくて以前から自作のものを使っていたのですが、先日壊れてしまい今度は何を使おうかと考えてたどり着いたのが本作です。
ネットで見るラズパイと高精細液晶の記事では、買ってみたとか、とりあえず表示させてみたで終わっている記事が大半で、具体的な製作に及んでいる例はあまり見かけません。
同様の製作をしたいがラズパイ素人だし液晶マニアでもないし、どうやればいいのかよくわからないという方の参考になれば幸いです。
こんな感じのです
デジタルフォトフレーム自作のきっかけとしては、こういうのが欲しかったためです。
秋月電子で売っている「7.9インチ高精細IGZO液晶パネルセット」を使い、設計開始時点で最新の「Raspberry Pi 3 Model B」を使いました。
注意点として、このセットでは横長表示にした場合、ラズパイ側の制約により本来「2048×1536」サイズの液晶パネルであるにもかかわらず「1920×1536」の大きさでしか表示することができないという欠点があります。
仕方がないので、当作では「1536×2048」の縦長(ポートレート)表示モードのまま、液晶を右に90°倒し、表示する画像は左に90°回転して表示させることで、表示エリアをフルに使うようにしました。こういった使い方でなんとかできたのは、静止画像の表示しかやらないフォトフレームがゆえです。
それから、PIC(PIC16F1827)を使った制御基板を自作。コンデンサマイクとCDSによって生活音と光量を検知し、自動ON/OFFの制御を行わせています。
フォトスタンド(ケース)もアクリルのフリーカットを利用して自作したものです。
ラズパイには独自に開発したフォトフレームアプリをセットアップ。スケジュールや各種設定に従って、写真や天気予報のサイクル表示、時報の再生などを行います。
日めくりカレンダー
・平日:黒色
・土曜:青色
・日曜:赤色
・祝日:緑色
PM2.5、黄砂予報(※2021/02/14追加)
・6時間ごとの予報
・週間予報
RTCに内蔵されている温度補償用のデジタル温度計を利用して、カレンダー表示の時に画面の左下に小さくシステム温度を表示します。
本製作例では、室温28℃の連続稼働時、ラズパイのケース内は約43℃になりました。
フォトフレームアプリは、NetBeans IDE(C/C++)で開発しました。SDL2(Simple DirectMedia Layer)を使って画像表示や音声再生などを行っています。
表示内容の切り替えは、3パターンのアニメーションで行うようにしてみました。
回転扉(左から右に流れる)
小分けにされたブロックエリア一つ一つが忍者屋敷の扉のように回転しながら次々に切り替わります。
回転扉(ランダム)
こちらは忍者屋敷の扉がランダムで高速に切り替わっていきます。
SDL2によってグラフィックのハードウェアアクセラレーションが効いているようで、思ってたより滑らかに表示できました。切り替えアニメーションのバラエティーは市販品には及びませんが、ソコはあまり重要でないのでこの程度です。
そして、次のいずれかの条件で自動的にOFF(待機モード)に入ります。
・部屋の物音がしなくなって15分経過した場合
・部屋の明るさが真っ暗になって5秒経過した場合
・次のスケジュール実行までに5分以上ある場合
待機中の消費電流は約200μA。引き続き監視を継続し、条件復帰で稼働状態に戻ります。
全体の回路図
ラズパイと制御基板の接続を含む全体の回路図です。
まず、ラズパイのI/Oについて。
GPIO 3本を使ってPICと通信します。通信とはいっても、HIとLOで意図を伝え合うだけの簡単なものです。
また、ラズパイとエプソンのRTC(RX8000)をI2Cで接続し、所定の日時にPICに対してアラーム割り込みを伝えるようにしているほか、温度レジスタ値の読み込みも行います。
ラズパイへの電源供給は、USBからではなくGPIOコネクタから給電します。非公式ですが結構メジャーな方法らしいです。
そして、液晶パネルとラズパイの電源ON/OFFを、MOSFET(Q1, Q2)のハイサイドスイッチを使って、PICから制御できるようにしています。
PIC自身の電源は、3.3V LDOである NJM2863F33(IC1) のCTRL端子を使ってON/OFFします。タクトスイッチを押すとCTRL端子がHIになり3.3V系がON、PICのファームウェアからRA4をHIにして電源ONをラッチします。組み込みでよくやる方法ですね。
先のMOSFET(Q1, Q2)によるハイサイドスイッチは、立ち上がりが物理的なスイッチよりも鋭いため、5V電源ラインに一瞬ディップが生じます。これによりPICにリセットが生じる可能性があるため、電源供給ラインにCRフィルタ(R17とC12)を入れています。
生活音の検知は、コンデンサマイクで拾った信号を NJM2732 で数百倍に増幅します。
その出力をD3とC10でピークホールドし、D3の漏れ電流とR15とIC3-8の入力バイアス電流(50nA typ)で少しずつ抜いていくことによって、音量の起伏をなめらかに検知するようにしています。
マイクアンプの周波数特性。
(IC3-A 1pin)
高低域のゲインを下げ、中音域を重視する特性にしてあります。
10畳くらいまでの広さを想定していますが、もう少しゲインを上げても良いかも知れません。
明るさの検出にはCDSを使いました。単純にPICのADCを使ってCDS電圧を読み取り、明暗を判断します。
あと、小信号の汎用MOSFETである BSS138(Q5, Q6)を使って、PICから液晶パネルのスタンバイ操作とバックライト操作を行えるようにしています。この端子はスイッチに接続することが想定されていて、ON抵抗10Ωでも操作することができます。
パーツと入手先
今回の部品は、ほとんど秋月電子のネット通販で入手しました。ただ、チップコンデンサと抵抗については、手ハンダしやすい2012サイズが秋月にはあまりないので、以前MOUSERで買いだめしておいたものを使いました。
主要パーツ
LQ079-IGZO-LCD-SET(秋月電子) 取扱説明書
これがないと始まらない。高精細IGZO液晶ディスプレイセットです。SHARPはもう液晶の会社ではなくなってしまいましたが、自作の電子工作品にIGZOブランドが使えるのは嬉しいですね。
Raspberry Pi 3 Model B(秋月電子) 回路図
これもないと始まらない。RS版とelement14版があるようですが、発売元が違うだけで中身は同じものとのこと。amazon(Raspberry Pi 3 MODEL B)でも同じ値段で売ってます。
え~~~~~っ!と思ったんですが、制作をしている間に Raspberry Pi 3 Model B が性能アップしたRaspberry Pi 3 Model B+が発売になりました。マイナーアップな感じで性能が上がっただけなので、変わりなく使えると思います。
3ple Decker(amazon)
無数にあるラズパイ用ケースの中から、基板を完全に覆う形のケースで一番小型のものを探した結果、見つけたのがこれです。年中部屋においておくフォトフレームは、こういうケースじゃないとホコリが蓄積していきます。本作では、この中に制御基板も格納します。
PIC16F1827T-I/SS(秋月電子) データシート
超低消費電力の8ビットPIC、SSOPパッケージ。今回はADCとI2CとTIMER以外の機能は使っていませんが、ほぼ全てのピンを使います。
AE-RX8900(秋月電子) 取扱説明書
エプソンの高精度RTC RX8900のDIP化モジュール。本作では、フォトフレームの稼働日時になったらPICにINT信号を入れて、システムの電源を入れています。また、内臓のデジタル温度計も利用します。
DMG3415U(秋月電子) データシート
PチャンネルのMOSFETで、VGS約1.2Vで4A流せます。典型的な大電流スイッチング用のFETですね。液晶パネルとラズパイのハイサイド電源スイッチとして使用します。
J03S 2336(秋月電子)
ノートパソコンなどで使われるというマイクロスピーカーです。長穴加工が少々面倒ですが、小型なので本作には手頃の品。音質はあまり良くない、というかこのサイズだと普通か?という感じです。
GPE024C-050400-5(amazon)
5V4AのACアダプタ。ラズパイは2.5A電源が推奨されており、液晶パネルセットは最大750mA。安くて小型で電流に余裕のあるモノを探しまくって見つけたのがコレです。さらに、DCプラグは音叉型のものに交換します。「たまにおかしくなる」のは嫌ですからね。
2DC-G213-D42(秋月電子)
10A流せる2.1mm標準DCジャック。ただし、音叉型のプラグが必要です。本作では4A近い電流容量を確保しますので、必ずコレと音叉型プラグを使ってください。あまり知られていませんが、マル無線のMJシリーズなどは、せいぜい0.5Aが仕様上の上限なんです。
MP-121CF(秋月電子)
4A流せる音叉形の2.1mm標準DCプラグ。音叉形プラグはノートパソコンなどでよく使われている形式で、コンタクト部分がフォークのようになっていて端子を挟み込むので電流容量が大きいんですね。ACアダプタのデフォルトのDCプラグと交換します。
スーパースリム HDMIケーブル 0.3m(amazon)
多分、現時点で最もスリムなHDMIケーブル。一般的なHDMIケーブルでは無駄にかさばってしまうので、本作のような小型のフォトフレームを作るのは難しくなります。
極スリム 3.5mmオーディオステレオケーブル(amazon)
小型薄型のフレームに収めるために、このようなスリムでL型のステレオプラグが必要です。もったいないですが、カットしてL型の部分だけを使います。
フリーカットアクリル板(はざいや)
アクリル板はフリーカット(オーダーメイド)で用意しました。価格はさほど高くはありません。「photoframe_outline.zip」に含まれるアクリルオーダー図面を参考にしてください。はざいやでは自動見積りできますし、フォトスタンド脚なども売ってます。
化粧飾止 8mm クローム(amazon)
フォトフレームスタンドでよく見るピカピカしたやつです。
今の時代、何でもありますね。
それから、本作ではなるべく薄型するために一部で低頭ビスを使っています。
写真はハンズで売っている超低頭ビス。
最初のセットアップ
初めて液晶パネルを表示させるまでと、ラズパイの設定などについてまとめておきます。
液晶パネルセットの動作確認
必要な手順は全て取扱説明書に書かれていて、その通りにやれば表示できます。
SHARP 7.9インチ高精細IGZO液晶パネルセット 1536×2048ドット ラズパイ用
準備するもの
フォトフレームとしてはACアダプタを使用しますが、それまでの電源としてUSB充電器などを用意します。液晶パネルと合わせて2ポート必要ですね。
USB充電器2ポート合計4.8A この容量では恐らく現時点で一番小型のものです。価格も安く、ラズパイ実験用の電源としてオススメです。 |
マウスは無くても表示はできますが、やはり少しは操作してみたくなるというもの。また、後でリモート接続する場合でも、一度は必要になるので用意しておきます。
液晶パネル表示までの手順
OSのイメージやインストール方法はいくつかありますが、本作では下記のページからダウンロードできる「RASPBIAN STRETCH WITH DESKTOP」を使います。[Download ZIP]でZIPファイルをダウンロードしてください。
Download Raspbian for Raspberry Pi
次に「Win32DiskImager」を下記のページからダウンロード、インストールします。このツールを使って、先程のZIPファイルを解凍して出てくる「YYYY-MM-DD-raspbian-stretch.img」というイメージファイルをSDカードに書き込みます。
(イメージは不定期に更新されています。当方の場合 2018-04-18 でした)
Win32 Disk Imager download
秋月電子から液晶パネル用の設定ファイル「config.txt」をダウンロードして、SDカードのルートディレクトリにある config.txt と置き換えます。念のため元のファイルはリネームしておくと良いでしょう。テレビ等で表示させる時は元のファイルを使います。
秋月電子の設定ファイル:7.9インチ Raspberry Pi用 config
それから、秋月の config.txt(2017.05.02 rev1.0)には凡ミスがありますので、下記の修正が必要です。
19行目の「dmi_force_hotplug=1」を「hdmi_force_hotplug=1」に修正。
先頭の「h」が抜けていますね。この影響は次で…
SDカードをラズパイにセットします。取説では、その後
→液晶パネルにDC5Vを給電し、青色LEDが点滅するまで約8秒待ちます。
→ラズパイにDC5Vを給電します。
→映像が表示されます。
となっています。
config.txt がミスったままでは、先に液晶パネルを起動しないとダメなんですが、先程の修正をしてやると液晶パネルが後でもちゃんと表示されるようになります。
ラズパイのセットアップ
液晶パネルの表示ができたら、普通はとりあえず有線のUSBマウスとキーボードを接続して各種設定などを行うんですが、7.9インチ1536×2048の高精細液晶パネルでは文字が小さくて見にくいし、不安定な状態でゴソゴソやっているとパネルやフレキシブルケーブルなど、デリケートな部分を傷つけてしまうかもしれません。
ですので、普段使っているPCからリモート接続して操作することを強くオススメします。ラズパイ内蔵のWi-Fiを使うと、本体にはUSBケーブルを一本つないで電源供給するだけで済みますし、断然やりやすいです。
テレビやモニターのHDMIを利用する手もありますが、リモートに比べると不便です。
ラズパイ(WITH DESKTOP)の初期状態
・デフォルトユーザー名:pi
・パスワード:raspberry
・rootのパスワード:未設定(ログインできない)
・起動時はpiユーザーで自動ログイン
・ロケールは英語圏になっている
・Chromiumブラウザ(Chromeの前身)がインストール済み
予備知識
・sudoコマンド… root権限でコマンドを実行するコマンド
・nanoコマンド … シンプルなテキストエディタ
・raspi-config … ラズパイ設定コマンドツール
起動は、コンソールから sudo raspi-config と入力します。
raspi-configのGUI版。スタートメニュー→[設定]→[Raspberry Pi の設定]で起動できます。VNC接続後はこちらの方もどうぞ。
以下の設定は、フォトフレームとしてだけでなく、ラズパイを使う前にやっておいた方が良いこととして一般的なものも含むので参考にしてください。
・WiFi設定
・リモート接続(SSH)
・システムアップデート
・ロケールの設定
・NTPの設定
・リモート接続(VNC)
・完全日本語化
・ホスト名の変更
・パソコンとファイル共有
・音声出力先の設定
・GPIOの設定
・I2Cの設定
・カメラをOFFにする
・無操作ブランク画面の無効化
・SDカードの未使用領域の開放
・メディアプレイヤー
・ライブラリのインストール
・アプリ用フォント
・その他
WiFi設定
リモート接続する前に、まずはラズパイ内蔵のWiFiを使えるようにします。もちろんLANケーブルでもOKですが、いずれにせよWindowsと同じくらい簡単です。しばらくLinuxを触っていなかった身からすると「ここまで来たか」という感じです。
タスクバーのネットワークアイコンをクリックして、目的のSSIDを選択し、暗号化キーを入力するとすぐに接続されます。
ネットワークアイコンを右クリックすると、IPの設定ができます。
IPアドレスはデフォルトでは自動(DHCP)になっていますが、固定に変えてもOK。
自動の場合は、ホスト名の後ろに「.local」を付けた名前でアクセスできます。
(デフォルトのホスト名だと「raspberrypi.local」になる)
パソコンから、pingコマンドで接続を確認できます。
ping raspberrypi.local
今年中頃のWindows10のアップデートによりmDNS周りの仕様が変更されたため、そのままでは「.local」を付けたホスト名でアクセスすることができなくなっている模様です。今後のことも考慮し、固定のIPを割り当てることをおすすめします。
リモート接続(SSH)
SSHを使うとコマンドベースのリモート操作ができます。まずはこれで接続します。
ラズパイのコンソール画面で sudo raspi-config と入力。[5 Interfacing Options]からSSHをEnableにします。
または、ラズパイのスタートメニューから[Preferences]→[Raspberry Pi Configuration]と進み、[Interfaces]タブでSSHをEnableにします。
次にパソコン側からアクセスします。ターミナルは「Tera Term」がオススメ。
Tera Term(窓の杜)
Tera Termを起動して新しい接続からSSHを選び、以下を入力すると接続できます。
・ホスト名:raspberrypi.local
・ユーザー名:pi
・パスフレーズ:raspberry
これ以降はラズパイ側での操作は不要になります。USBで給電するだけでOK。
Tera Termのデフォルトの表示は見にくいので、フォントや色などを適当に設定します。
もう一つ、SSHを有効にすると、ラズパイの起動時にpiユーザーのパスワード変更を促すWarningが表示されるようになります。
公開されているデフォルトパスワードのままでは危険というわけですが、とりあえず passwd コマンドでパスワードを変更しておきます。(sudo raspi-config からでも可能)
システムアップデート
次のコマンドを続けて実行し、システムのアップデートを行います。これをやっておかないと、以後のインストール作業でエラーが出ることがあります。また、早い段階でやっておかないと設定が上書きされてしまうものもあるようです。
sudo apt-get update …パッケージリストの更新
sudo apt-get dist-upgrade …ディストリビューションの更新
ディストリビューションの更新はWindows Updateのようなもので10分程かかります。
ロケールの設定
SSH接続から sudo raspi-config を実行し、[4 Localisation Options]から次の3つの項目を日本用に設定します。
・[I1 Change Locale]→ ja_JP.UTF-8 UTF-8
・[I2 Change Timezone]→ Asia Tokyo
・[I4 Change Wi-fi Country]→ JP Japan
設定を終了して再起動します。
ちなみに[I3 Change Keyboard]はラズパイにキーボードを接続して設定しますが、今回はSSHを使うので基本不要です。
NTPの設定
ラズパイはRTCを持っていないので、起動の度に日時を設定する必要があります。しかし、常時稼働させておくわけではないので、定期的な時刻同期までは必要ありません。つまり、起動時に一度だけ時刻を同期するように設定します。
ネット上では、ntpデーモンをインストールする方法が多く見られますが、これは無駄にNTPサーバーを稼働してしまうことになるためオススメしません。ここでは、軽量なNTPクライアント(ntpdate)を使うようにします。
sudo apt-get install ntpdate
利用するNTPサーバーを設定します。デフォルトでは海外のサーバーになっているので、これをNICT(ntp.nict.jp)へ変更します。
NICTとは、国立研究所が公開している無料のNTPサービスです。
NICT公開 NTPサービス
sudo nano /etc/default/ntpdate
1 2 3 4 | #NTPSERVERS="0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org" NTPSERVERS="ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp" |
元々ある NTPSERVERS の行頭に”#”を付けてコメントアウトし、新しい行を追記保存。
次に、ntpdateを起動するスクリプトを作ります。
sudo nano /usr/local/bin/ntpdate.sh
スクリプトの内容はこちら。ntpdateの実行前にsleepを入れないと、WiFiの接続が完了していないので”name server cannot be used”というエラーが発生します。
1 2 3 4 5 6 7 8 | #!/bin/bash sleep 10 /etc/network/if-up.d/ntpdate exit 0 |
保存したら実行属性を付けます。
sudo chmod 700 /usr/local/bin/ntpdate.sh
次に、起動時にスクリプトを実行するように設定します。
sudo nano /etc/rc.local
rc.localファイルの最後の方、”exit 0″ の直前に次の一行を追記します。
1 2 3 | /usr/local/bin/ntpdate.sh & |
保存したら、ラズパイを再起動してntpdateのログが記録されているかを確認します。
sudo reboot
cat /var/log/syslog | grep ntpdate
問題なく実行できている場合は、最後に次のようなログが出ているはずです。
“ntpdate[744]: step time server 133.243.238.244 offset 9.178031 sec”
リモート接続(VNC)
コマンドベースではなくGUIベースのリモート接続で、これができると結構便利です。
①ラズパイのコンソール画面で sudo raspi-config と入力。[5 Interfacing Options]からVNCをEnableにします。
②続けて解像度を設定します。[7 Advanced Options]から[Resolution]で1280×720くらいに設定した後再起動します。
③パソコン側にVNC Viewerをダウンロードしてインストールします。
Download VNC Viewer
③VNC Viewerを起動し、Fileメニューの[New connection]を選択、VNC Serverにホスト名(raspberrypi.local)かIPアドレスを入力してOKします。
接続をダブルクリックして開始すると、最初に暗号化されていないという警告が出ますが、そのままContinueして、ユーザーpiとそのログインパスワードを入力すると接続できます。
タスクバーにVNCアイコンが表示されるので右クリックでオプション設定ができます。
以後は raspi-config の代わりに、GUIの「Raspberry Pi の設定」もリモートでOK。
完全日本語化
①日本語フォント
デフォルトのままでも一応日本語は表示されますが、一部文字化けするので有名なフリーの日本語フォント(IPAフォント)をインストールします。(インストール後再起動)
sudo apt-get install fonts-ipafont fonts-ipaexfont
sudo reboot
VNCビューアからデスクトップを右クリック、[デスクトップの設定]→[System]にて、Fontを「IPAexゴシック」へ変更します。
②日本語入力システム
こちらも名の知れている日本語入力のようです。インストール後再起動します。
sudo apt-get install fcitx-mozc
sudo reboot
これで変換システムは使えるのですが、このままではVNC Viewer からの半角/全角キー操作が効かないので次の設定をします。
タスクバーにあるキーボードのアイコンを右クリック、[現在の入力メソッド]をクリックして[全体の設定]タブを表示します。
「入力メソッドのオンオフ」の右側をクリックして半角/全角キーを押すと、「Zenkakuhankaku」から「Hankaku」に変化します。ラズパイにキーボードを直接つないでいるときは前者なんですが、VNCからの操作だと後者になるんですね。
これでOKです。テキストエディタで日本語変換を試してみてください。
ホスト名の変更
デフォルトの「raspberrypi」から「photoframe」へ変更しました。
VNCを使ってスタートメニュー→[設定]→[Raspberry Pi の設定]を起動すると、ホスト名の入力欄が出ているのですぐに分かります。
当然ですが、SSHやVNCの接続先ホスト名も「photoframe.local」へ変更になります。
パソコンとファイル共有
パソコンのファイルマネージャーから、ラズパイのファイル操作ができるようにします。
まず、お決まりのsambaをインストール。
sudo apt-get install samba
設定ファイルを編集します。
sudo nano /etc/samba/smb.conf
ファイルの最後に下の内容を追記して保存します。
1 2 3 4 5 6 7 8 9 10 11 | [photoframe] path = /home/pi public = Yes read only = No writable = Yes guest ok = Yes force user = pi directory mode = 0777 create mode = 0666 |
[photoframe]は共有名で、ファイルマネージャーで表示されるフォルダ名になります。
pathは共有したいディレクトリです。
以降、パソコンのエクスプローラーのアドレス欄にホスト名(\\photoframe.local)を入力すると「/home/pi」の内容が表示されることを確認します。
音声出力先の設定
音声デバイスは、ラズパイ本体と、IGZO液晶パネルセット(HDMI経由)にもありますが、どちらで出力するかを設定します。
タスクバーにあるオーディオアイコンを右クリックすると選択できます。本作では液晶パネルに付いているオーディオプラグを利用しますのでHDMIを選択します。
ボリュームもここですね。
GPIOの設定
本作では3本のGPIOを使っています。フォトフレームアプリの中からでもGPIOの設定はできるのですが、アプリを起動していなくても制御基板との通信が行えるよう、ラズパイを起動した時にもGPIO設定を行うようにします。
GPIOのそもそもの初期値を変える方法もありますが、ここではラズパイ起動時に実行されるスクリプトを作り、その中からgpioコマンドを使って設定する方法をとります。
sudo nano /usr/local/bin/gpio_init.sh
スクリプトの内容はこちら。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash gpio -g mode 9 out gpio -g write 9 0 gpio -g mode 10 out gpio -g write 10 0 gpio -g mode 11 in exit 0 |
保存したら実行属性を付けます。
sudo chmod 700 /usr/local/bin/gpio_init.sh
次に、起動時にスクリプトを実行するように設定します。
sudo nano /etc/rc.local
rc.localファイルの最後の方、”exit 0″ の直前に次の一行を追記します。
1 2 3 | /usr/local/bin/gpio_init.sh & |
保存したら、ラズパイを再起動してGPIOの設定がされているかを確認します。
sudo reboot
起動したら、gpio readallを実行。
すると、このように全てのGPIOの現在の状態が表示されるので、GPIO.9(BCM=9)とGPIO.10(BCM=10)のモードがOUT、GPIO.11(BCM=11)のモードがINになっていることを確認します。
なお、gpioコマンドの使い方は次の通りです
(※GPIO.10を操作する場合の例)
・gpio -g mode 10 out … I/Oを設定(in or out)
・gpio -g write 10 1 … ポートへ出力(0 or 1)
・gpio -g read 10 … ポートから入力して表示
I2Cの設定
RTC(RX8900)と通信するための12Cを設定します。
VNCを使ってスタートメニュー→[設定]→[Raspberry Pi の設定]を起動し、インターフェイスからI2Cを有効にします。この設定は再起動しても保持されるので、以降は触る必要はありません。
なお次のコマンドで、接続しているI2Cデバイスを確認することができます。
sudo i2cdetect -y 1
制御基板を接続した状態で実行したところ。
RX9800(Slave ID=0x32)と接続できていることが確認できます。
カメラをOFFにする
ラズパイのデフォルトではカメラが有効になっていますが、それだけでメモリを消費するとのことなので無効にします。
VNCを使ってスタートメニュー→[設定]→[Raspberry Pi の設定]を起動し、インターフェイスからカメラを無効にします。
無操作ブランク画面の無効化
ラズパイのデフォルトでは、10分間操作がなかったらブランク画面になるのですが、これを抑止します。
sudo nano /etc/lightdm/lightdm.conf
このファイルに、次の内容を追記します。
1 2 3 4 | [SeatDefaults] xserver-command=X -s 0 -dpms |
保存して再起動します。
sudo reboot
SDカードの未使用領域の開放
これは、念のため実行しておきます。
sudo raspi-config を入力、[7 Advanced Options]から[A1 Expand Filesystem]を実行。その後、ラズパイを再起動します。
多分、NOOBSを使ってインストールした場合に意味があるんじゃないかと思います。
メディアプレイヤー
メディアプレイヤーをインストールすることで、ラズパイでも動画ファイルやAACやMP3などの音声ファイルが再生できるようになります。当作では、よく知られるプレイヤーの一つ「VLC」をインストールし、フォトフレームアプリ内部から利用する形で音声ファイルを再生します。
ただし当作では、フォトフレームとして画面を横にして使っているため、残念ながら動画再生の利用は(画面の向きが違うため)できません。
sudo apt-get install vlc
ライブラリのインストール
フォトフレームアプリに必要なライブラリです。
①WiringPi
よく知られるラズパイのGPIO制御ライブラリ。
ネット上では、WiringPi を使うためにはいくつかのインストールやビルドが必要とされていますが、何もしなくても使える状態でした。(OS(Raspbian)のバージョンによるのかも知れません)
gpioコマンドが使えるなら WiringPi が使えるということになるようですが、もし入っていないようであればインストールします。
②SDL2.0
本作では、SDL(Simple DirectMedia Layer)使って描画などの各機能を実現します。
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-net-dev
③OpenSSL
天気予報や黄砂予報をWebサイトから取得する際、サイトによっては「https」でないとアクセスできないことがあります。今作では黄砂情報の取得先がそうでしたので、OpenSSLを使ってC言語のソケット通信にてhttps接続を行っています。
ラズパイには、元々OpenSSLのバイナリは含まれていますがヘッダは入っていないので、OpenSSLの開発パッケージをインストールしてヘッダファイルを取得します。
sudo apt-get install libssl-dev
アプリ用フォント
デスクトップは先のIPAフォントで良いのですが、フォトフレームアプリで表示する書体としては標準的すぎてイマイチなので、もう少し洒落っ気のあるフォントを使います。
M+FONTS
このフォントのインストールでは apt-get は使えないので、上記サイトからフォントファイル(mplus-TESTFLIGHT-*.tar.xz)をダウンロードして解凍し、出てきたファイルを次のディレクトリに置きます。
/usr/share/fonts/truetype/mfont/
実際使っているのは「mplus-2p-regular.ttf」と「mplus-2p-bold.ttf」の二つ。
なお、これ以外のフォントを使うには、フォトフレームアプリのソースコードの変更とビルドが必要になります。表示位置の微調整も必要かも知れません。
その他
・Bluetoothを無効にした。
→タスクバー上のアイコンからOFFにできます。
・アプリ起動アイコン「Mathematica」と「Wolfram」を消した。
→アイコンを右クリック→アプリ起動バーを編集できます。
後はデザイン的なもの、タスクバーを下にしたり背景を変えたりテーマを変えるなどして、最終的なVNCからのデスクトップの見た目はこんな感じに。
この後、アプリケーション開発環境をセットアップしてフォトフレームアプリの開発を行いました。ソフトウェア
製作手順
制御基板を作る
ガラスコンポジット感光基板を使って、小型の制御基板を作ります。
より詳しく⇒プリント基板の自作!感光基板を使った作り方で簡単製作
緑色は銅箔、灰色はジャンパーなどを表す補助線です。黄色は裏側(パターン面)の部品外形、青色は表側の部品外形です。
サンハヤトの感光基板専用インクジェットフィルムPF-3R-A4にパターンを印刷。
「photoframe-board.pbf」をmikanで開いて、外形、hole、solder、裏B、裏C の5つのレイヤを印刷します。
今回は裏面から見たデザインですので、必ず反転印刷するようにしてください。
エッチング液が少々古くてチョット汚い…
穴あけとカッティングを終えたところ。
薄くて加工しやすいガラスコンポジット基板なので楽勝です。
PICをハンダ付けするパターン。
今回のPICは、SSOP-20パッケージ(0.65mmピッチ)ですが、さほど難しくはありません。
最初に、一番端のピンをハンダ付けして固定し、その後全ピンを一気に処理します。
次は表面ですが、タクトスイッチとマイク、ピンソケット(40P)の、3つ以外の部品を全てハンダ付けします。
設計上は、制御基板から2mm程浮かせてハンダ付けすれば良いんですが、念のため現物合わせをします。
まず、制御基板を仮止めします。
スペーサーは、M3x3mmを2つ。
※写真ではタクトスイッチも付いていますが、本来はまだ付いていません。
ピンソケットをラズパイに挿入したら、ケースを完全に閉じてハンダ付けします。
これで高さが合いますね。
ソケットとラズパイ基板側も、2mmほど隙間を開けておきます。
制御基板を外して軽く洗浄し、ハヤコートを吹き付けます。そしたらタクトスイッチとマイクをハンダ付けして、裏面完成です。
AE-RX8900は、J1端子をハンダ付けしてプルアップを有効にします。J2/J3は未接続。
最後にジャンパー線も配線して表面完成です。
ここまで来たら、PICのファームウェアをビルドして書き込みます。
ラズパイを接続しなくてもPICKit3からのパワーサプライで動作するので、各I/Oやマイクアンプなどの動作確認をしておきます。
ラズパイケースを加工する
「photoframe_outline.zip」に含まれる、参考用の加工図面を参照してください。
まず、ケース上面の穴から6.5mm離れた位置にタクトスイッチ用の穴(Φ4)を開けます。
次に、基制御基板を仮止めしてマイクとボリュームの位置にキリで印を付けて穴を開けます。マイク穴はΦ5。
奥に見えるDCジャックの中心をケーブルが通るように、幅10mmほどの切り欠きを入れます。
ドリルやリーマーや精密ノコ、ヤスリなどを駆使して仕上げます。
まぁこの部分は下部にあって見えない部分なので適当で良いでしょう。
この大きさでは自由に抜き差しできませんが、年中通電する使い方をするので良しとします。
最後に、ケース下部に冷却気流を作るための穴あけを行います。6.5Φで適当に開けました。
これをやらないと、結構熱がこもります。
これで、ラズパイケースの加工は完了です。
フォトスタンド(ケース)を作る
まず、リアパネルの加工。
「photoframe-case.pbf」を印刷し、キリで印を付けて穴あけを行います。
・液晶基板用:Φ2.5下穴(M3タップ)×4
・ラズパイ用:Φ2.5下穴(M3タップ)×4
・スピーカー用:Φ8 ×4(穴二つ接続加工)
・スタンド脚用:Φ3.5 ×2
・ケーブル用:Φ8 ×2(穴二つ接続加工)
8箇所の穴はタッピングします。(後ろにナットを付けるスペースがないため)
工具がないとかでタッピング加工ができない場合は、タッピングネジを使うとか工夫次第でなんとかできると思います。
スピーカーとケーブル用の穴は、ニッパーやヤスリなどを使って仕上げました。
結構疲れます。
次からアクリル板の接着を行っていきます。ポイントはアクリル接着を使うこと。他の接着剤ではハミ出たりして仕上がりが悪く、見た目も強度も弱いので失敗の元です。
アクリル接着剤 30ml 注射器付き。水のようにサラサラした液体で、隙間に染み込ませて使います。アクリルだけでなくABS樹脂などにも使えます。 |
本などの重しを乗せて枠を固定し、アクリル接着剤を隙間に染み込ませていく感じで接着します。数分で結構強く固着します。
以上で、ケースは完了。
全体を組み立てる
最初に準備作業です。
QIコネクタ(6Pin)ケーブルを用意しておきます。
より詳しく⇒コネクタの自作!電子工作の圧着工具と圧着方法
PA-09を使って、芯線部は1.6mmダイス、被覆部は1.9mmダイスで圧着します。
液晶基板の電源ラインはAWG24、他の信号線はAWG28を使いました。
配線の長さはとりあえず25cmくらいにしておきます。
精密圧着ペンチ PA-09 小型コネクタ向けの圧着ペンチです。ダイスのサイズは1.0mm~1.9mmで、PH、EH、XH、QIコネクタ等が圧着可能です。 |
この時点では、まだハウジングには挿入しません。
今考えると、圧着作業は後で配線の長さが確定してからにした方が良いかも知れません。
音叉型プラグ用のジャックを使いますので、普通のプラグのままだと触っただけで電源が切れたりと、接触がかなり悪いです。
液晶基板の加工。
HDMIコネクタの端が無駄に出っ張っているのでカットします。カットしないと液晶に当たると思われます。
それから、表にある青LEDが明るすぎるので黒マジックで塗りました。
HDMIケーブルコネクタの片方の保護カバーをカットしておきます。スペース的にギリギリなので、やっとかないと結構きついです。
液晶パネルの裏面に、200×150 にカットした0.1mm厚のプラ板を貼り付けて絶縁します。
その後、変換基板をマスキングテープで固定。実際に組み立てると少し押さえられる形になるのでこれで十分かと思います。
液晶パネルを後ろから軽く押さえる1cm角のスポンジを用意。
アクリルケース側に、両面テープで隅っこと真ん中付近に貼り付けます。
液晶基板の5V電源入力と、KEY1/2端子にコネクタケーブルをハンダ付け。
KEY端子のGND側は配線不要です。
CDSにもハンダ付けしておきます。
このケーブルは思った以上に高品質だったので少々もったいない。配線の色と内容は次のようになっていました。
赤:GND、青:R、銅:L
液晶基板とスピーカーを取り付けて配線し、ラズパイを取り付けます。配線のハンダ付け部分は熱収縮チューブを使います。
コネクタケーブルにハウジングを取り付けて、制御基板にこんな感じで接続します。
確認のためACアダプタのプラグも挿入。
CDSは宙ぶらりん状態にしましたが、何かで固定した方が良いかもしれません。
いよいよ液晶パネルの取り付けです。FFCケーブルを接続してパタンと閉じる感じですね。
見ての通り、液晶基板を固定するビスは低頭ビスじゃないと液晶パネルに当たります。
FFCケーブルは多少折り曲げても大丈夫。
フォトスタンド脚の取り付けもしておきます。
液晶パネルのフチを隠す枠紙を作り。
「photoframe-frame.pbf」を、厚手のマット紙に印刷して切り抜きます。0.22mm厚の両面つや消しを使いました。
四辺のビス穴は穴あけポンチを使いましたが、デザインナイフとかでもできそう。
秋月でも売っている丸型両メネジ(10mm)と3mmの中空スペーサー、化粧飾止とM3x10mmの皿ビスを使います。(こういった物もパーツリストに記載しています)
化粧飾止のインナー。後ほど、これにキラキラしたキャップを取り付けます。
制御基板が歪んでますが、仮止め的に適当に挿入しているからです。
底部はこんな感じです。
なんとかいい具合にケーブルを引けました。
ラズパイケースの上部のフタを外している状態だと、こんな感じでICSPできます。
通電&起動。
タクトスイッチを押して電源を入れます。SSHからgpio -g write 9 1と入力して液晶パネルをONにして、VNCで操作。
とりあえずRadioTunesで音楽を視聴してスピーカーのテストです。
背中にラズパイを付けている姿は二宮金次郎スタイルとでもいいましょうか。
後、ラズパイの赤色LEDが明るすぎる気がしています。これもマジックで塗ったほうが良いかもしれませんね。
マイク感度調整用のボリューム(VR1)は、左に回すと感度が上がりますので感度最大(数Ω)にしておきます。後のマイク閾値設定と合わせて、必要に応じて感度を下げるようにします。
インスペクションルーペ SL-54 電子工作、特に表面実装部品のハンダ付けに超オススメ!というか、これがないと作れないと言ってもいいんじゃないでしょうか。 |
T型ラチェット式タップハンドル ちゃんとしたものを作るには必ず必要になるといっても良いアイテム。使用頻度は高くないですが、あるととても助かります。 |
精密のこぎり S120-K 電子工作のケース加工やヒートシンクの加工などに重宝するのこぎり。折り畳めるので、省スペースで収納できるところも良い。 |
アプリをセットアップする
ハードウェアが完成したら、フォトフレームアプリのインストールと設定を行います。
フォトフレームアプリは、画像処理だけでなくGPIOを介して制御基板と連携しますので、これを起動しないと(手動でGPIOの操作をしない限り)LCDの電源も入らないし、タクトスイッチを長押ししてもシャットダウンや電源OFFができません。
アプリは、公開しているものをそのまま利用してもかまいませんし、必要に応じてカスタマイズすると良いです。次章ソフトウェアを参照してください。
インストール
ラズパイ側のファイルマネージャを使ってビルド済みのアプリを解凍し、出てきたファイル一式を「/home/pi/PhotoFrame/」ディレクトリ下にコピーするだけです。
設定や画像ファイルは、実行時のカレントディレクトリに置く必要があります。
標準では、実行ファイル(photoframe)を実行するときは、その位置をカレントディレクトリとします。
このビルド済みのアプリファイル一式では、サンプルとしてフリー素材によるいくつかの画像や鳥の鳴き声が、一定間隔で再生されるようにしてあります。
ちなみに、実行ファイルは、共有ディレクトリ経由でコピーしても属性が引き継がれないため、実行ファイルではなくなってしまいます。Windows上で解凍せずに、SSHやVNCを使ってラズパイ上で解凍&コピーしてください。
起動と終了
通常は自動起動になりますが、テストやデバッグなどで手動で起動したい場合。
VNCを使って、ラズパイ側のファイルマネージャから実行ファイルをダブルクリックで起動できます。この場合、カレントディレクトリは実行ファイルと同じ位置になります。
終了は、アプリ画面を右クリックです。
もしうまく動作しない場合は、最初のセットアップ-ラズパイのセットアップにある手順を全て実行しているかを確認します。
自動起動の設定
GUIアプリの起動なので、Windowsのスタートアップに相当する、デスクトップの autostart を利用します。
SSHより次のコマンドを入力し、
sudo nano ~/.config/autostart/photoframe.desktop
次の内容を記載します。
1 2 3 4 5 6 7 | [Desktop Entry] Type=Application Name=PhotoFrame Exec=/home/pi/PhotoFrame/photoframe /home/pi/PhotoFrame/ Terminal=false |
ここでは、コマンドライン引数で実行時のカレントディレクトリを指定しています。
この引数が指定されていると、ラズパイの電源ONによる自動起動とみなし、システムが安定するまで20秒待機してから動作を開始するようになっています。
保存したらsudo rebootで再起動し、次のように動作することを確認。
・OS起動後、20秒ほどで液晶パネルが表示されること。
・タクトスイッチ長押し後、15秒ほどで電源OFFすること。
スケジュールがない場合は、すぐにシャットダウンして待機モードに入ります。
動作を設定する
アプリケーションの設定
アプリ一式に含まれる設定ファイル「Setting.ini」を編集します。また、表示させたい画像ファイル(JPG or PNG)や音声ファイル(MP3)を所定の位置に配置します。
設定ファイル(Setting.ini)
・稼働時刻(1時間単位で有効無効を設定)
・画像表示時間(秒)
・カレンダー表示時間(秒)
・天気予報表示時間(秒)
・天気情報クエリ設定 ※制限事項を参照のこと
・黄砂/PM2.5予報表示時間(秒)
・黄砂/PM2.5情報クエリ設定 ※制限事項を参照のこと
・特別画像表示設定(ファイルパスとワイルドカード日時)
・特別画像表示時間(秒)
・サウンド再生設定(ファイルパスとワイルドカード日時)
・スタートアップ時に再生する効果音
各ディレクトリにファイルを置きます。
calender ディレクトリ
日めくりカレンダーの1月~12月までの背景画像ファイル。2048×1536サイズを配置します。ファイル名は、image01.jpg~image12.jpg です。
photo ディレクトリ
任意の通常表示画像ファイル。中にサブフォルダを作って置いてもOK。画像は 2048×1536サイズを、左に90°回転させた 1536×2048 で配置します。
たくさんある場合は一括で変換しないと大変です。当方ではフリーの画像編集ソフト XnView を使いました。XnView(窓の杜)
XnView 一括変換設定ファイル
special ディレクトリ
任意の特別表示画像ファイル。配置方法はphotoと同じです。
sound ディレクトリ
任意の音声ファイル。
制御基板の設定
タクトスイッチを操作して、次の設定を行います。
マイク閾値設定(誰もいないと判断する検知音量)
人が居ないくらい部屋を静かにして、その時の検知音量を記録させます。その音量以下の時は誰も居ないと判断されます。
通常稼働している時に、制御基板のLEDで音の検知状態がわかるので確認してください。静かな時は消灯していますが、喋ったり物音がすると点灯します。
光量閾値設定(就寝消灯したと判断する光量)
夜間に部屋の電気を消して、その時の光量を記録させます。その光量以下の時は就寝したと判断されます。
最大光量設定(バックライトを最も明るくする光量)
部屋の中を一日で一番明るい状態にして、その時の光量を記録させます。バックライトの自動調整で使います。
バックライト操作原点
バックライトの明るさ調整の現在の設定値について、液晶パネル側と制御基板側との間で認識のズレをなくすために行う設定です。
液晶パネルは、バックライト操作によって設定された値を不揮発性メモリに記録しているため、一度ズレると電源を切ってもズレたままになるんですね。
デフォルトは当方環境での大体の値になっていますので、正式設定する必要があります。設定操作の方法はソフトウェア-制御基板-設定操作についてを参照してください。
ソフトウェア
制御基板側
開発環境は C言語(MPLAB XC8)です。
PICのクロックは、内蔵OSCで500KHz駆動。
タイマ割り込み処理にて、マイクの音量検知やCDSの光量検知、LEDのブリンク処理を行っています。メインループでは、ウェイトなしでグルグル回っています。
フロー図
稼働モード(通常稼働時)
待機モード(スタンバイ時)
状態遷移図
制御基板の状態遷移です。操作遷移も表しています。
設定操作について
稼働モード又は待機モードの時にタクトスイッチを押すと、設定モードに入ります。その後、希望の項目を選び、そこで長押しするとその設定が実行されます。
※上の状態遷移図を参考にしてください。
設定モードでは、LEDの点滅で状態を確認できます。
マイク閾値
長押しすると、約11秒後に4秒間、音量検出と記録の処理が行われます。11秒は長いですが、操作音が影響しないようにするためです。
CDS閾値、最大光量:
長押しすると、約3秒後に4秒間、光量検出と記録の処理が行われます。
バックライト原点
長押しすると、約3秒後に設定実行中になります。バックライトが最大の明るさになるまでタクトスイッチを押した後、再度長押しすると設定が記録されます。
なお、設定値はPIC内臓のEEPROMに記録されるので、電源を断っても保持されます。
ソースとビルド
ソース一式を解凍し、出てきた Controll フォルダをパソコン上の適当な場所にコピーして、MPLAB X で開けばビルドできます。
使用したIDEのバージョンは下記の通り。以降のバージョンでも問題ないでしょう。
MPLAB X IDE:v4.15
XC8:v1.45
MPLAB- X IDE | Microchip Technology Inc.
最近、XC8コンパイラがv2.00にバージョンアップし、デフォルトがC99になっています。そのため、v2.00以降でそのままコンパイルすると割り込みハンドラの記述でエラーになりますので、C90に設定するか、次のように変更する必要があります。
これまで:void interrupt Interrupt(void)
v2.00以降:void __interrupt() Interrupt(void)
書き込みやデバッグには PICkit3 を使いました。
PICkit3 Microchip正規品。PICへのプログラムの書き込やデバッグができます。最近では安い中国製の互換品も出回っていますが微妙です。 |
定数値の調整
「部屋が静かになって何分したら待機モードになる」とか、そういったパラメータはソース上で #define していますので、必要に応じて調整します。
ラズパイ側
フォトフレームアプリは C/C++ で開発し、SDL2を使っています。
SDL2には、基本機能に加えて4つの拡張機能(SDL_image, SDL_mixer, SDL_net, SDL_ttl)が用意されていますが、全ての拡張機能を使っています。
利用している主なSDL2のAPI
SDL_GetWindowSurface()…ウィンドウのサーフェイスを取得
SDL_CreateRGBSurfaceWithFormat()…サーフェイスの作成
SDL_FillRect()…サーフェイスを塗りつぶす
SDL_BlitSurface()…サーフェイスのコピー
SDL_UpdateWindowSurface()…ウィンドウの全体を更新
SDL_UpdateWindowSurfaceRects()…ウィンドウの一部を更新
SDL_CreateSoftwareRenderer()…2Dレンダラの作成
SDL_CreateTextureFromSurface()…サーフェイスからテクスチャを作成
SDL_RenderCopyEx()…テクスチャをレンダラにコピー
IMG_Load()…画像ファイルのロード
TTF_OpenFont()…フォントのロード
TTF_RenderUTF8_Blended()…テキストのレンダリング
Mix_LoadMUS()…音声ファイルのロード
Mix_PlayMusic()…音声ファイルの再生
SDLNet_ResolveHost()…ホスト名解決
SDLNet_TCP_Open()…ソケット接続
SDLNet_TCP_Send()…ソケット送信
SDLNet_TCP_Recv()…ソケット受信
フロー図
全体の処理を大まかに表したフローです。
クラス構成
全部で8つの小規模クラスで構成されています。
CApplication | メインメッセージループ処理を含んでいて、各処理の呼び出しの起点となるクラスです。サウンド再生も含まれます。 |
---|---|
CDisplay | 全ての描画処理を含んでいます。フォントや表示をカスタマイズする場合は、このクラスを改修します。 |
CWeather | 天気予報を取得するクラス。天気情報の取得方法を変更したり、別の実装にする場合は、このクラスを改修します。 |
CKosa | PM2.5や黄砂予報を取得するクラス。https接続にて取得します。別の実装にする場合は、このクラスを改修します。 |
CCtrlBoard | 制御基板を抽象化したクラス。 GPIOへのアクセス処理を記述しています。 |
CScaduler | スケジュール管理。 次の予定時間の算出や、RTCアラームをセットしたりします。 |
開発環境のセットアップ
NetBeans を使って、普段使っているパソコン上からラズパイのリモート開発が簡単にできます。(内部的にはSSHを使って実現されている)
コンパイルやデバッガはラズパイ上で動作しますので、それをリモート操作する感じになります。
※追記(2021/03/21)NetBeans は2016年にOracleからApacheに譲渡されています。現在リリースされているもの(NetBeans 9以降)は、本作で使った NetBeans 8.2 とは若干仕様が異なっていて、日本語環境も整っていません。
Oracle、統合開発環境「NetBeans IDE」をApacheソフトウェア財団へ譲渡
今のところ、NetBeans8.2 はOracleの次のページからダウンロード可能なようですが、いつ消えるかわらないですね。
>NetBeans8.2のダウンロードページ
NetBeans 9以降で本作の開発ができるかどうかは試していませんが、多分大丈夫・・?
①NetBesans のダウンロードとインストール。
サポートテクノロジーを選べますが、本作では最低限C/C++があれば大丈夫です。
※サポートテクノロジーの選択が出ないインストーラの場合は、インストール後プラグインの設定で「C/C++」を有効にします。
②リモート開発に必要な設定。
ビルドホストにラズパイを登録するだけで、リモート開発ができるようになります。
新規ホストの追加で、「PHOTOFRAME」を追加します(ホスト名を RaspberryPi → Photoframe へ変更してあるので)
この時、設定を済ませた(少なくともSSHを使えるように設定した)ラズパイを起動しておけば、接続リストに自動的に表示されるので選択するだけでOKです。
piユーザーとパスワードを入力していくと、最終的にこのように登録が完了します。
これで、リモート開発の準備はできました。後はプロジェクトで、今追加したビルドホストを選択するだけです。
ビルドホストはプロジェクトのプロパティーで設定することもできますが、このように右クリックすることでも、そのホスト上にプロジェクトを作ることができます。
ホストとの接続が切れると、プロジェクト内のファイルはリードオンリーになって編集できなくなります。左のコンテキストメニューの「接続」で再接続します。
デフォルトでは、プロジェクトは「/home/pi/NetBesansProjects/{ProjectName}/」に作られ、ソースコードもそこに格納されます。
ビルド後の実行ファイルは、/home/pi/NetBesansProjects/{ProjectName}/dist/」下に出力されます。
ソースとビルド
ソース一式を解凍し、出てきた PhotoFrame フォルダをファイル共有を使って、/home/pi/Projects/下に配置します。
※NetBeans のデフォルトのプロジェクト置き場は「/home/pi/NetBesansProjects/」ですが、長いので「Projects」に変更しました。
「build」と「dist」はビルドすると自動的に作られます。
NetBeans を起動し、登録したビルドホストを右クリックして「プロジェクトを開く」を選択。
/home/pi/ 以下のファイルリストが表示されるので、先程コピーした PhotoFrame を選択してプロジェクトを開きます。
ビルドすると「dist」下に実行ファイルができます。
デバッグ方法
NetBeans でリモートデバッグできるんですが、一つ問題があります。
それは、普通にデバッグを開始すると、コンソールベースで起動されるためか、SDL_Init() によるビデオの初期化でエラーになってしまうということです。
なので、VNCを使いファイルマネージャからダブルクリックで普通に起動した後、[デバッグ]メニューにあるデバッガのアタッチを使ってデバッグしました。
GDBの起動設定あたりでなんとかできる?とは思うんですが、よく分かりません。
制御基板とラズパイの連携
制御基板とラズパイ間の制御シーケンスです。
ラズパイの起動
ラズパイ側からのパネル制御
ラズパイ側からの終了
制御基板側からの終了
制限事項など
当然ですが、環境音が大きい環境、例えば、交通、ペット、家電、近隣騒音などある場合には、生活音検知による自動スタンバイは、うまく動作しないかもしれません。
でも、自動でスタンバイにならないというだけで、フォトフレームとしては普通に動作します。使い方によっては稼働時間の設定だけで事足りるでしょう。
天気予報や黄砂予報の取得について
当記事で公開しているソースに含まれる天気予報や黄砂情報の取得機能は、当方が個人的に利用するために作成したプログラム例を紹介するものです。特定の地域以外での動作確認も行っておりませんし、HTMLの仕様変更があるとコードの改修も必要になるかも知れません。
ですので、情報取得のための設定(URLのクエリ部分)は空文字としています。
このような目的のために、天気情報を取得できる無料のサービスがありますので、ある程度のスキルは必要ですが、そういったところを利用されることをおすすめします。
ダウンロード・ツール
製作に使用した全ファイルです。無断で二次配布することはご遠慮ください。ご紹介いただく場合は当記事へのリンクを張ってください。連絡は不要です。