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
- リアルタイムクロックモジュール
・時計モジュールを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チカ…」
温度センサーのデータをグラフにしてみた ― 2015年06月13日
Raspberry Pi 2 B、B+で1-wire温度センサー
Raspberry Pi2 B、B+にdigitempという1-wire温度センサーのデータを読み取るアプリをインストールしました。Intelサーバーにもインストールしていました。1-wireは2線式のBUS接続インターフェースです。個々のセンサーが固有のIDを持っていてこれを使用してデータを読み出します。
使用しているセンサーはデジタル温度センサ(1wire)DS18B20+です。このセンサーを2個接続しているので室温と外気温度をそれぞれグラフ化しています。Raspberry PiはSDカードで、容量も8GBなのでうかつにデータ保存が出来ません。Thingspeak.comというフリーのopen data platformを利用します。このサイトにデータを送信するだけでグラフを作成してくれます。
Raspberry Piへのインストール手順です。
- 0.Thingspeak.comにアカウントを作成
Thingspeak.comでアカウントを作成する。
Write API Keyを取得し、アップロードスクリプトの中に記述
- 1.ソフトウエアのインストール
sudo apt-get install digitemp
- 2.初期設定、digitemp.confの作成
sudo digitemp_DS9097U -i -s /dev/ttyUSB0 -c /home/pi/digitemp.conf
- 3.テスト、動作確認
sudo digitemp_DS9097U -a -s /dev/ttyUSB0 -c /home/pi/digitemp.conf
- 4.データフォーマットを変更
digitemp.conf内のデータフォーマットを変更
LOG_FORMAT "%.2C"
- 5.データアップロードの実行スクリプトの作成
以下の内容を/home/pi/mytempscriptに保存する。
#!/bin/bash
temp1=$(digitemp_DS9097U -q -t 0 -c /home/pi/digitemp.conf)
temp2=$(digitemp_DS9097U -q -t 1 -c /home/pi/digitemp.conf)
url="http://api.thingspeak.com/update?key=[API Key]&field1=$temp1&field2=$temp2"
wget $url -q -O /dev/null
- 6.cronにスクリプトを登録
この登録で温度データを5分間隔で登録しにいきます。
*/5 * * * * root /home/pi/mytempscript
サーバーがダウン ― 2015年06月01日
Raspberry Pi 2 BでSoftEther VPNサーバー
長年使っていたCentOSのIntelサーバーがCPU温度の異常でダウンしてしまいました。IP PBX(Asterisk)はRasPBXに移行中だったので幸いにも復旧しています。SoftEtherサーバーはせっかく調子よく動き始めたところでしたのでちょっとショックです。5年以上動いてくれたでしょうか。SofutEther VPNが動いてくれればいいので早々RSにRaspberry Pi 2 Bを注文しました。折を見てIntelサーバーは復旧させることとしましょう。Raspberry Pi 2 BはRaspberry Pi B+とサイズや部品の配置は殆ど変わりませんが、レジストのロゴが小さい、CPUが700 MHz / ARM1176JZF-S 1コアから900MHz / ARM Cortex-A7 4コアに強化変更され、メモリーも倍の1GBに増強されたバージョンです。MicrosoftもWindows10でサポートを表明しているバージョンになります。
このボードコンピューターにOSとしてLinux Raspbian、SoftEther VPNサーバー、node.jsをインストールしました。DDNSの定期更新shellも入れています。BBルーターの変更とVPNサーバーの稼働で外からインターネット経由で自宅のネットワークに入れるようになりました。IP電話も接続OKですし、これでネットワーク接続の機器制御も可能です。
SDカードをストレージとしている機器でサーバーは無茶だとは思いますがSDカードイメージをバックアップしておけば簡単に復旧できるので手軽さを優先しています。Intelサーバーの修理が終わるまでと割り切っていますが、Raspberry Piだとファンレスなので静かなんです。裸では不安なので一緒にクリアケースも注文しました。
Raspberry Pi は起動ディスクとしてSDカードを使用します。東芝製の8GB SD Class10 40MB/sを使用していますが、ノーブランドの8GB Class10 SDカードではShutdown後にSDカードを取り出しているにもかかわらずファイルが破損するという事象が発生しています。書き込み速度が遅いことが原因?
BBルーターをBUFFALO製の無線LANルーターWHR-1166DHPに交換しました。SSL VPN、L2TP IPsec両接続に対応させるためでしたが、結果としてはインターネットアクセスも速くなりました。無線LANも2.4GHzと5GHz帯両対応になり、11acにも対応しました。これで目標のLANとVPN環境は整ったかな。
我が家の電話機 ― 2015年05月24日
SIP対応IP電話機
古い機種です。製造は終わっていますが今でも現役です。Raspberry Pi B+にインストールされているFreePBXにネットワークで接続して外線への発着信、内線間通話、保留や転送、ボイスメールもボタン操作できます。IP電話機は電話専用の配線をしなくて良いので助かります。接続する機種もSIPに対応していれば統一する必要はありません。電話機によって使用方法が異なるのが気になりますが我慢です。
Raspberry Piを電話交換機にする。 ― 2015年05月24日
Raspberry Pi B+とRasPBXでIP電話交換機
Raspberry Piの詳細はウィキペディアなどを参照してください。85.60 mm × 56.5 mmサイズの手のひらに乗るワンボードコンピューターです。数種類のLinux OSが用意されていますのでSDカードを作製して電源を入れると立ち上がります。HDMI端子にLCDを接続すればXwindowも起動します。有線LAN、USB 4個、その他GPIO端子もあります。
今回はRasPBXというプロジェクトのLinux OS (Raspbian) に contains Asterisk 11 と FreePBX 12 がプレインストールされたものを使用します。PBXの設定と管理はFreePBXで行い、インストール後は外線設定と電話機設定を入れるだけ使用することができます。実際には自宅の環境にマッチした設定しなければなりません。configファイルを直接いじってきた身としてはFreePBXの設定は慣れるまで結構大変です。
- 内線電話機を設定する
5台分の内線電話機を設定します。FreePBXの内線設定はApplications - ExtensionsでGeneric CHAN SIP Deviceを追加します。Voice Mailを使用する場合はここで設定します。
- NTTひかり電話を設定する
一番肝心なところです。これができないとPBXを容れる意味無いですから。しかし、ひかり電話を収容するにはもう一つLANが必要ですのでUSB接続のNICを探してきました。ELECOMのLAN-TXU2Cというアダプターです。/etc/network/interfacesにeth1を追加してRebootすると簡単に認識します。
FreePBXの設定はConnectivity - TrunksでSIP(chan_sip) Trunkを追加します。PR-200NE側で設定したusername、内線番号、パスワードを設定します。
また、本機のMACアドレスをPR-200NEの使用する内線番号に設定します。
- InBound RoutesとOutBound Routesの設定
0発信設定などはOutBound Routesに設定します。
- ダイヤルプランを設定する
一番難しいところですがとりあえず外線からの着信は200番台の内線電話機をCallするようにRingグループを作成し、InBound Routesに設定します。
- 参照したサイト
Raspberry Piでひかり電話を持ち歩こう①~③
voip-info.jp FreePBX
FreePBX:5:トランク:ひかり電話(ホーム)
コントローラ基盤 Vol.2 ― 2014年11月01日
ちょっと、光もので遊んでいます。
aitendoで見つけたI2C接続のLEDコントローラドライバ[HT16K33-28W] を使ったモジュールを作成するためのICと基板の2点セットです。
アノード側(ROW0~ROW15)16ビット、カソード側(COM0~COM7)8ビットのLEDコントローラーです。8x8matrixLEDなら2個までコントロールできます。7セグLEDや14セグLEDもコントロール可能(カソードコモン)です。使用しているコントローラーICはHOLTEK社のHT16K33というICです。このコントローラは16x8ビットRAMデータストレージを持っていますのでI2Cへはアドレスデータ(通常00H)、16ビット表示データ(通常8行分)、表示コマンドの順にデータを送信することで表示を行います。adafruitからはHT16K33を使用した8x8 matrix LEDや7セグLED、Dual Alphanumeric Displayを表示させる基板がいくつか発売されています。国内ではスイッチサイエンスで取り扱いがあります。コントローラー基板は秋月でも扱っいます。
MPUとはI2C接続です。ArduinoやRaspberry PiとI2Cバス接続して使用することができます。Arduinoライブラリーも公開されています。
Adafruit-LED-Backpack-Library
Adafruit-GFX-Library
最近のコメント