2013年6月15日

Raspberry PiのGPIOで7セグメントLEDとLCDを使う

Raspberry Piで、NTPでコントロールされたディジタル時計とNCIDサーバからのフィードを受けてCallerID(日本で言う「ナンバーディスプレイ」)の表示できるガジェットを作るというプロジェクトを考えている。ファミリールームのAVラックの上、テレビの前に置いて、普段は時計、電話がかかってきたら発信元を表示させる構想。色々考えたが、時計表示には大型(1.5")の7セグメントLED、CallerID部分は16x2のLCDを使う予定。

まだ構想段階だから何もできていないが、ソフトウェアのリソースを調べた結果を書いておく。

GPIO全般

こちらのサイトに詳細がある。

LEDのドライバ

こちらのサイトにPerlで書いた例がある。Device::BCM2835が必要。下記GPIOドライバと共存できるかどうかはやってみないと分からないが、できるだけコンパイラは使いたくないのでPerlでいけるなら行きたい。

LCDのドライバ

WiringPiというプロジェクトがGPIO全般を扱うライブラリを提供している。LCDはこちら

WiringPiからダウンロードできるソースコートはセルフ開発しか考慮しておらずコンパイラの速度やソースコード管理に問題があるので、クロス開発できるようにするパッチを作った。ダウンロードはこちら
  • 環境変数「RPiCC」にクロスGCCのフルパスをセットしておく
  • buildを編集して以下の変数をカスタマイズする
    • RPi : 最終的にライブラリをインストールするRaspberry Piのホスト名とログインできるユーザ名(root)
    • INSTALL_DIR : 開発ホスト上に作成するインストールイメージのルートディレクトリ(../wiringPi-install
  • おまけとしてbuildスクリプトをそのまま使うMakefileも作った。
LCDのドライバをもう一つ見つけた。こちらはPerlのモジュールDevice::BCM2835:LCD。 上記LEDドライバと同じ系統のようなので、多分こちらを使うことになるだろう。
 

明るさセンサ

ガジェットが家族に受け入れられるためには「プロっぽい」仕様が必要。CdSセンサで周囲の明るさを計測してLEDとLCDのバックライトの明るさを自動調節する機能も計画の一部。Raspberry PiはArduinoと違いアナログポートがなくすべてのGPIOはディジタル入出力しかできないが、こちらのサイトでGPIOのピンの1本を入力と出力に切り替えながら一種の積分型オームメータを実現する方法を紹介している。

Perlのモジュールはパッケージとしてインストールできればよいのだが、apt-cache searchで探してもBCM2835関係は見当たらない。仕方ないのでcpanでインストールするが、ネイティブでコンパイラが走るので数時間かかる。

0 件のコメント:

コメントを投稿