Raspberry PiのGPIO利用 ― 2015年06月21日
Raspberry Pi2 B、B+でI2C接続LCD、RTC
Raspberry PiならIntel PCにはないGPIO(汎用入出力)端子があります。その中には単なるON/OFF動作だけではなく特定の用途に特化した端子があります。1-wire、I2C、SPI、シリアルインターフェースです。詳細はこちらで。1-wire温度センサーで取得した温度データでグラフがかけましたがやっぱり現在の温度をキャラクターLCDに表示したくなりました。Raspberry Piなら簡単にキャラクターLCDを接続することができます。
- 16桁2行のキャラクターLCD
- リアルタイムクロックモジュール
Raspberry Piはボード上にはクロックモジュールを持っていないためNTPサーバーから正確な時刻データを取得してシステム時間を合わせています。Arduinoに接続していた秋月のリアルタイムクロック(RTC)モジュールを接続してみました。これでネットワークに接続されていない状態でも正確にシステム時間を合わせられます。時刻合わせはhwclockコマンドでできるように設定します。・時計モジュールをRaspbian OSで管理する
・Raspberry Pi2 Bではhwclockが素直に動いてくれません。
こちらを参照してください。コンパイルしたhwclockは
エラーなく動作しました。
- GPIO(汎用入出力)端子を使う
GPIOを操作したり、GPIOから状態を読み取ったりするソフトウエアはファイルにアクセスする要領でアクセスできます。
// GPIO24 を使うという指示 $ echo 24 > /sys/class/gpio/export // 入出力の設定 $ echo out > /sys/class/gpio/gpio24/direction // ONは1 OFFは0をvalueに書き込む $ echo 1 > /sys/class/gpio/gpio24/value $ echo 0 > /sys/class/gpio/gpio24/value // GPIO24の開放 $ echo 24 > /sys/class/gpio/unexportshellで直接実行させる場合の例です。GPIO24に接続したLEDを点灯させ、そして消灯しています。このような具合です。
echo 22 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio22/direction
echo "low" > /sys/class/gpio/gpio22/direction
#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt 5 ] ; do
data=`cat /sys/class/gpio/gpio22/value`
if [ "$data" -eq "1" ] ; then
cnt=`expr $cnt + 1`
else
cnt=0
fi
sleep 1
done
echo "End of script...."
$ echo 22 > /sys/class/gpio/unexport
スイッチを読み取る場合はもうちょっと複雑です。サンプルプログラムは5秒の長押しを検出して終了します。でも通常はアプリが必要とするあいだ常時、スイッチのON/OFF状態を監視し状態に応じた処理を行う必要があります。ArduinoならLoopさせれば済みますが、Raspberry PiではLoopさせたら他のプログラムに影響が出てしまいます。割り込み→イベント→非同期フロー処理ができると良いのですが。node.js + onoff.js + async の環境で実現できそうです。onoff.jsのサンプルフォルダーの中にlight-switch.jsというのがありました。
"use strict";
var Gpio = require('../onoff').Gpio,
led = new Gpio(25, 'out'),
button = new Gpio(21, 'in', 'both');
function exit() {
led.unexport();
button.unexport();
process.exit();
}
button.watch(function (err, value) {
if (err) {
throw err;
}
led.writeSync(value);
});
process.on('SIGINT', exit);
このスクリプトはGPIO#21にプルダウンしたタクトスイッチをGPIO#25に電流制限抵抗とLEDを接続して、スイッチが押された時だけLEDを点灯させるといったスクリプトになっています。LEDの代わりにソリッド・ステート・リレー(SSR)キットなどを接続すればAC100Vの機器をON/OFFできます。あると便利なアイテムを探してみました。
- GPIO(汎用入出力)端子の早見表
Raspberry Pi Model B+のGPIO早見シートを作りました
ピンアサインはこちらです。 - ブレッドボードには必須アイテム
Raspberry Pi B+用T型I/O延長基板
ブレッドボード接続キット こっちのほうが少し安い。
40P変換基板キット こっちのほうがもっと安い。
ブレッドボードの電源接続にポリスイッチを入れると
Raspberry Piの保護に役立ちます。 - Raspberry PiでLチカ
第9回「ラズベリーパイで電子工作!Lチカ…」
コメント
トラックバック
このエントリのトラックバックURL: http://azss.asablo.jp/blog/2015/06/22/7677997/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
最近のコメント