以前トラ技の付録のApple Piを作ったのだが、LCDの表示が8桁×2行と少ない。
また、自分では赤外線リモコン機能や温度・湿度・気圧センサはあまり使うことがなさそうだったので、カスタマイズしてみようと思った。
改めて8月号を買って、早速カスタマイズしてみる。
まず、LCDは16桁×2行にしたかったので、I2C低電圧キャラクタ液晶モジュール(16x2行)[バックライト付]を使うことにした。
上記のように接続すれば、ハイレゾリューションオーディオDACモジュール MM-5102
に干渉することなく取り付け可能なことがわかった。
LCDを取り付けるため、3端子レギュレータとトランジスタを表面実装タイプに変更。
3端子レギュレータを低損失CMOS三端子レギュレータ 3.3V150mAに変更。
それに合わせて、C3,C4を1μFに変更し、C1,C2は未使用とする。
赤外線LED用の回路をLCDのバックライト用に流用している。
バックライトも3.3Vから取ればこの辺のトランジスタも不要になるのだが、バックライトのVFが2.7~3.15Vと3.3Vに近いことから、5Vから電源を取っている赤外線LEDの回路を流用することにした。トランジスタは2SC2712-GRに変更し、R4を10KΩ、R7を470Ωに変更した。
LCDの/RSTを基板上で10KΩのチップ抵抗でプルアップ。
若干無理やりな感じで、バックライト用の配線を行う。
もう少し細い線を使ってもよかったかも。
LCDを取り付けたら、AppliPi側でNC端子を利用してVDDとGNDを接続。
合わせてSCL,SDAを10KΩのチップ抵抗でプルアップする。
起動時にホスト名とIPアドレスを表示させるスクリプトを実行させるようにした。
以前書いた/etc/network/*.dにスクリプトを置く方法がうまくいかなくなったので、/etc/rc.localにIPアドレスを表示させるスクリプトを実行させている。
ただ、/etc/rc.localで表示させようとしてもタイミング的にIPアドレスを取得できないので、別途IPアドレスを表示させるスクリプトを準備して、バックグラウンドでスクリプトを実行するようにした。
バックライトのON/OFFは既にあるonLED1.*とoffLED1.*をコピーして使用するポートをGPIO13に変更したonLED3.*とoffLED3.*を作成。
他にもinit.shにLED3用の設定を加えたり、LCD関連のスクリプトなどを16桁対応に書き換えたりいろいろ修正している。
/etc/rc.localに以下の内容を追加
ちなみに/root以下にもApplePiを展開してある。
# ApplePi GPIO init cd /root/ApplePi ./init.sh ./onLED3.sh # print host infomation cd /root/script ./ipdisp.sh &
/rootにscriptディレクトリを作って、そこにipdisp.shを作成。
16回IPアドレスの取得を試みて、取得できなかった場合はno ip addressと表示するようにしてある。i2c-disp.shは以前作ったスクリプト。
#!/bin/sh /root/script/i2c-disp.sh -ic `uname -n` /root/script/i2c-disp.sh -p 0x40 for i in `seq 16` do ipaddr=`hostname -I` case "$ipaddr" in "") /root/script/i2c-disp.sh "." ;; *) break ;; esac sleep 1 done case "$ipaddr" in "") /root/script/i2c-disp.sh -p 0x40 " " /root/script/i2c-disp.sh -p 0x40 "no ip address" ;; *) /root/script/i2c-disp.sh -p 0x40 " " /root/script/i2c-disp.sh -p 0x40 ${ipaddr} break ;; esac
ただ、LCDを16桁対応しただけではつまらないので、今度はRTCを乗せてみることにした。
まずは以前買ったミニRTCモジュール(販売終了)で動作を確かめる。
RTCをつないでハードウエアクロックとして使う方法はまた別途説明することにする。
ただ、これだとApplePiの基板には乗せられないので、他にいいものがないか探してみる。
DS1307というRTCがあり、ピンの数も少なくバックアップ用の電源と32.768KHのクリスタルさえあればすぐ使えるという優れもの。
クリスタルは秋月で買ったのだが、標準の物より小さいサイズで今回のように小さめにまとめるのにちょうどよかった。
まず、試作基板を使って動作の確認。
ディップスイッチでプルアップ抵抗の有無を選択できるようにして、ブレッドボードに刺さるように作ったので、ほかの工作の試作にも流用ができる。
ところでこのDS1307の動作電圧が5Vなのだが、信号は2.2V以上あればHとして認識してくれるので、電源は5Vから取って、I2CはそのままつなぐだけでOK
RTCを取り付ける前の状態。
LCDの基板でI2Cの端子が隠れてしまうため、空きスペースのパターンを削ってI2C用の端子を取り出している。
I2Cの配線はこれまでの動作の確認のため、仮に配線してある。
RTC用のバックアップ電池はCR1220を使用して、それ用のホルダを本来のLCD用のバックライトをつなげるパターンを利用して取り付けた。
問題ないと思うけど、本来のLCD接続用のパターンをポリイミドテープで養生している。
RTCとボタン電池用ホルダーを取り付けたところ。
よく見ると、パスコンをつけ忘れているので後日直すことにしよう。
ICのGNDの部分のレジストをはがし半田付けしているのだが、ICをGNDのピンでしか固定されていない状態なので、ハックルーをつかってクリスタルとIC付近の配線を固定した。
ただ、このハックルーなのだが、これを使うとこて先に溶けたハックルーが焦げ付いてなかなか拭き取れず、以降の半田付けに支障が出てきそうだ。
まぁ、ともかくこれでネットワークにつながっていない状態でも、正しく時間を取得することができるようになった。
次はオリジナルのApplePiにもRTCを取り付けてみることにする。