Raspberry pi + piface=home electronics-security

50
リモートハンド クーラー IRKit 赤外線リモコン Tocos 無線DIO PepoLinux Raspberry PiPiface=Home ElectronicsSecurity Raspberry PiPiface Gmail連携で動物監視 外部機器の監視と制御 トラが脱走したらパトライト点灯と画像メール同時通知 音声で外部機器をON/OFF(電気をつけて・クーラーつけて) 防犯センサーでパトライト点灯と動画メール同時通知

Transcript of Raspberry pi + piface=home electronics-security

Page 1: Raspberry pi + piface=home electronics-security

リモートハンド

クーラーIRKit赤外線リモコン

Tocos無線DIO

PepoLinux Raspberry Pi+Piface=Home Electronics&Security

Raspberry Pi+Piface Gmail連携で動物監視 外部機器の監視と制御

トラが脱走したらパトライト点灯と画像メール同時通知 音声で外部機器をON/OFF(電気をつけて・クーラーつけて) 防犯センサーでパトライト点灯と動画メール同時通知

Page 2: Raspberry pi + piface=home electronics-security

http://www.pepolinux.comTwitter@kujiranodanna

山内

Raspberry Pi + PifaceHome-Electronics&Security

Page 3: Raspberry pi + piface=home electronics-security

Raspberry Piは持っているけど◆勢いで買ってしまった◆使い道に悩んでいる◆Lチカで終わってる

◆ 40年前はランプ、パカパカ◆あこがれのPDP11とピアノスイッチ

◆机や押入れで眠らせている

Raspberry piで遊んだ後はPifaceを買ってホームエレクトニクスとホームセキュリティで実用しよう

Page 4: Raspberry pi + piface=home electronics-security

ところでRaspberry Pi ◆ raspberry piとは・・・

Vmplayer+PepoLinux+シリアルDIO代替

Page 5: Raspberry pi + piface=home electronics-security

Raspberry Piの拡張ボードPiface◆ PifaceとはデジタルI/O拡張ボード  

Raspberry Pi用の入出力8ビットの拡張ボード

◆ 5Vリレー×2の出力でAC100V/DC24V5A迄外部スイッチング

Page 6: Raspberry pi + piface=home electronics-security

Raspberry Pi + Piface=Remote-Hand

Raspberry Pi and Case:£29.99 PIFACE:£19.99 Samsung 8GB Debian1:£8.33 USB to Micro USB Cable 2m:£1.66 Royal Mail Airmail:£10.98 Total:£75.94 発注後1W 2013年2月末入手OS当初Pidora、現在Raspbian

Page 7: Raspberry pi + piface=home electronics-security

DIOコアプログラム● pepopiface:DIOの読み書きをマルチユーザー動作● pepopifaced:DIOから1秒毎に入力信号の変化に合わせたアクションを実行

● pepogmail4dio:gmail経由でDIOの入出力操作と情報を返信

● pepogmail4pic:gmail経由でUSB接続カメラの動画を数秒記録して添付返信

Page 8: Raspberry pi + piface=home electronics-security

pepopifaceはpiface(Gpio)を制御

Page 9: Raspberry pi + piface=home electronics-security

pepopifaceはpiface(Gpio)を制御入力8ポート監視と出力8ポートのon/offを5分間制御

** Welcome to pepopiface Version-0.6 Copyright Yamauchi.Isamu compiled:Sep 20 2015 **

usage:pepopiface port:0-8 [0|1] [timer:0-300000ms] # pepopiface 0 1 → 1 port0へwrite

# pepopiface 0 1 1500 → port0へ1.5秒 1 write

# pepopiface 0 → 1 # pepopiface 8 → 00ff 上位8:出力・下位8:入力

Page 10: Raspberry pi + piface=home electronics-security

pifaceを使い込むと不具合が◆マルチプロセス環境ではpifaceで競合◆点けたはずの灯りが点かない◆消したはずの灯りが消えてない◆排他制御が必要

Page 11: Raspberry pi + piface=home electronics-security

排他制御セマフォ◆ semaphoreはプロセス間でリソースの排他制御

◆ Raspbian Linuxとpepopifaceで実装◆セマフォはflagの加算/減算処理◆ flagがマイナスでロック◆ flagがプラスでアンロック

Page 12: Raspberry pi + piface=home electronics-security

排他制御セマフォセマフォを使うには初期化が必要 union semun { int val; struct semid_ds *buf; unsigned short *array; struct seminfo *__buf; void *__pad; }; union semun my_semun;

Page 13: Raspberry pi + piface=home electronics-security

排他制御セマフォ◆共有ロックは各プロセスで共通のkeyが必要

◆予め任意パス+‘S’の8ビットでkeyを作成#define PIFACE_SEMA "/var/run/pepopiface.semaphore" key = ftok(PIFACE_SEMA, 'S');

◆パスを元に作成したkeyで1個のセマフォIDをget

mysemun_id = semget(key, 1, 0666 | IPC_CREAT);

Page 14: Raspberry pi + piface=home electronics-security

排他制御セマフォvalを各プロセスが減算/加算しロック/アンロックmy_semun.val = 1; semctl(mysemun_id, 0, SETVAL, my_semun); これでセマフォが操作出来るようになりましたリソースを使う時は優先ロックを掛けますsem_op=-1を設定してsemop関数を呼びますsemop関数はvalをマイナスして結果が正でreturn、負でlock

Page 15: Raspberry pi + piface=home electronics-security

排他制御セマフォvoid mysem_unlock(int sid){ struct sembuf mysemop[1]; mysemop[0].sem_num = 0; mysemop[0].sem_op =

UNLOCK; mysemop[0].sem_flg =

SEM_UNDO; if(semop(sid, mysemop, 1)

== -1){ perror("semop: semop

unlock failed"); exit(1); }LOCK UNLOCK

void mysem_unlock(int sid){ struct sembuf mysemop[1]; mysemop[0].sem_num = 0; mysemop[0].sem_op =

UNLOCK; mysemop[0].sem_flg =

SEM_UNDO; if(semop(sid, mysemop, 1)

== -1){ perror("semop: semop

unlock failed"); exit(1); }

void mysem_lock(int sid){ struct sembuf mysemop[1]; mysemop[0].sem_num = 0; mysemop[0].sem_op =

LOCK; mysemop[0].sem_flg =

SEM_UNDO; if(semop(sid, mysemop, 1)

== -1){ perror("semop: semop

lock-1 failed"); exit(1); }

void mysem_unlock(int sid){ struct sembuf mysemop[1]; mysemop[0].sem_num = 0; mysemop[0].sem_op =

UNLOCK; mysemop[0].sem_flg =

SEM_UNDO; if(semop(sid, mysemop, 1)

== -1){ perror("semop: semop

unlock failed"); exit(1); }

Page 16: Raspberry pi + piface=home electronics-security

libpifaceに難ありpfio.cへpatch

pepopifaceコマンドはpiface(Gpio)を制御する libpifaceに難あり pfio_init()を最初にcallが必要、しかし毎回出力ポートが初期化

patchを作成 ../piface/c/src/piface/pfio.c // spi_write(GPIOA, 0x00); // turn on port A spi_write(IODIRA, 0); // set port A as an output spi_write(IODIRB, 0xFF); // set port B as an input spi_write(GPPUB, 0xFF); // turn on port B pullups // initialise all outputs to 0 // int i; // for (i = 1; i <= 8; i++) // pfio_digital_write(i, 0); //

Page 17: Raspberry pi + piface=home electronics-security

libpifaceを少しhttps://docs.google.com/folder/d/0B-UAZ9CyJCLGQjJ3RDlqa2pqaDg/edit?pli=1

pfio_digital_read(pin_number) Returns the binary value of the specified input pin. pfio_digital_write(pin_number, value) Sets the binary value of the specified output pin to the given value. pfio_read_input() Returns the input port information as a list. Index 2 contains the port data (binary status of the input pins). pfio_read_output() Returns the output port information as a list. Index 2 contains the port data (binary status of the input pins).

Page 18: Raspberry pi + piface=home electronics-security

pepopifacedはdaemon◆定周期でpepopiface 8を投げ入力8ポートを監視◆たとえば入力ポート0の変化によりコマンドを起動

High→Low:dio0high2lowコマンドを実行

Low→High:dio0low2highコマンドを実行

Page 19: Raspberry pi + piface=home electronics-security

火災報知システム大阪ガス・ピコピコ感知器接続

火災報知器が発報するとメールと電話で通知

Page 20: Raspberry pi + piface=home electronics-security

防犯システム人感センサーが働くと動画メールと電話で通知

センサーライト人感センサー 無線送信器

人感センサー 無線受信器

Page 21: Raspberry pi + piface=home electronics-security

動物監視(ペット)

Gmail経由カメラで動画子供達の顔を確認

Page 22: Raspberry pi + piface=home electronics-security

ソリッドステートスイッチAC100Vコンセント

DIO出力0-5VでAC100V/5Aをオフ/オンさせるソリッドステートスイッチ内蔵コンセントBOX2,000円程度

Page 23: Raspberry pi + piface=home electronics-security

podcastを自動取得デバイスに保存

定時に電灯や散水ポンプを自動オン/オフ

PepoLinux Raspberry Pi+Piface=Home Electronics&Security

Page 24: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

家庭菜園の自動散水

Page 25: Raspberry pi + piface=home electronics-security

Gmail経由でコマンドpifaceの1番を5秒間オンにする

Subject: dio 1 1 5000

Gmail経由で制御ユーザーとキーワード登録

Page 26: Raspberry pi + piface=home electronics-security

Gmail経由で制御とらが脱走したらメール

Page 27: Raspberry pi + piface=home electronics-security

• ==input list==

• 1:火事です=high

• 2:防犯センサー=high

• 3:出力1と接続=high

• 4:Input4=high

• 5:Input5=high

• 6:Input6=high

• 7:Input7=high

• 8:Input8=high

• 9:Input9=none

• 10:Input10=none

• 11:Input11=none

• ==output list==

• 1:入力3と接続=low

• 2:CPUファン=low

• 3:窓の電気=low

• 4:Outnput4=low

• 5:散水ポンプ=low

• 6:ななちゃん電気=low

• 7:扇風機=high

• 8:玄関あかり=low

• 9:ななろく天井照明

• 10:クーラー運転

• 11:クーラー停止

• 12:スイング

• 13:首を振って

• 14:戦闘機

• 15:Outnput15=none

• 16:Outnput16=none

• 17:Outnput17=none

• ==Other Command==

• 18:Cpu Temperature

• 19:Thermometer

• 20:No1 Camera Movie

• 21:No1 Camera Picture

• 22:No2 Camera Movie

• 23:No2 Camera Picture

• 24:No3 Camera Movie

• 25:No3 Camera Picture

• 26:Module Camera Movie

• 27:Module Camera Picture

Gmail経由で制御キーワードのみでコマンドリスト送付

Subject: dio

Page 28: Raspberry pi + piface=home electronics-security

Raspberry Pi+Webカメラ+gmailで動画◆ Raspberry Piは非力なマシン 320×240 1pps迄

◆modules cameraで問題ないけど◆ avconv -f video4linux2 -s 320x240 -r 1 -i /dev/vide0 -t 10

-y remote-hand.mp4 ◆ USB接続の安価なWebカメラはavconvが時々Hung Up

◆ Hung Upでも次のコマンドで再開させるScript→pepomp4ctl

◆これでRaspberry PiでRemote-Handが完成!

Page 29: Raspberry pi + piface=home electronics-security

Raspberry Pi 2は強力Webカメラ 320×240 10ppsでも余裕

Page 30: Raspberry pi + piface=home electronics-security

新音声認識APIwebkitSpeechRecognition()

◆ recognition.continuous = trueである程度、連続認識が可能になる❖x-webkit-speechは毎回クリックが必要だった

◆『電気をつけて』『電気を消して』連続技◆ 2015年7月30日確認、音声APIは事前に認証が必要、デベロッパー→errorが表示されているURLヘアクセス、パスコード入力

Page 31: Raspberry pi + piface=home electronics-security

IRKitIRKitとはネットワーク対応学習型赤外線リモコン

Page 32: Raspberry pi + piface=home electronics-security

IRKitとコラボIRKitとはネットワーク対応学習型赤外線リモコン

Page 33: Raspberry pi + piface=home electronics-security

Tocos無線モジュール• 簡単にすぐに使用できる無線モジュール• TWE-Lite DIP(トワイライト・ディップ)は AI・PWM・I2C・

DIO搭載• Remote−HandはDIO(デジタルイン・アウト)のみを使用

TWE-Lite DIP USBドングルToCoStick

Page 34: Raspberry pi + piface=home electronics-security

Tocos無線モジュールwirelessでDIOが使える

2階の電気・火災報知器や庭の自動散水が無線で制御

Page 35: Raspberry pi + piface=home electronics-security

Tocos無線モジュールを制御• USBドングルToCoStickはシリアル制御• シリアル制御コマンドは稚拙のepiconで• /usr/local/bin/epicon -s 115200 -d 5 -ql /devttyUSB0 -c ${CMD}• 無線は水もの?・・・時々不通状態→リトライ• :7881150175810000380026C9000C04220000FFFFFFFFFFA7なデータが1秒毎に定期受信→どういうアプリを組むの?

• DOの状態確認が出来ない→動作モードを変更(定期送信を行わない)、DI-DOを1ビット削りループ接続、確認用へ

• 送信時にチェックSUMを付加、安直なscriptでは計算2秒程→C• pepowirelessdioctlコマンド完成

Page 36: Raspberry pi + piface=home electronics-security

リモートハンド

クーラーIRKit赤外線リモコン

Tocos無線DIO

PepoLinux Raspberry Pi+Piface=Home Electronics&Security

Raspberry Pi+Piface Gmail連携で動物監視 外部機器の監視と制御

トラが脱走したらパトライト点灯と画像メール同時通知 音声で外部機器をON/OFF(電気をつけて・クーラーつけて) 防犯センサーでパトライト点灯と動画メール同時通知

Page 37: Raspberry pi + piface=home electronics-security

入出力端子へ別名設定

IRKit赤外線データ 登録&出力

Tocos無線モジュール DIOを制御

音声で外部機器を制御 『あかりをつけて』

入力high→low→high 22イベントとログ表示 36アクション×2設定

USB or mdulesカメラでライブ動画

PepoLinux Raspberry Pi+Piface=Home Electronics&Security

Page 38: Raspberry pi + piface=home electronics-security

イベントログを表示

入力毎に2つのイベントhigh、lowカウンターとログを表示

Page 39: Raspberry pi + piface=home electronics-security

Raspberry Pi+Piface=Home Electronics&SecurityはRemote-Hand Raspberry_pi_××.zipで公開中

◆なんとか容量1Gbyte程度

◆ Remote-Hand Raspberry_piは全てオープンソース下記からダウンロード

◆ https://osdn.jp/projects/pepolinux/releases/p14620

Page 40: Raspberry pi + piface=home electronics-security

Javascript+c+shell Script◆フルスクラッチ◆ cgi bash Script 5000行◆ Javascript 5000行◆ c 2000行◆気がつけば約10000行余り

Page 41: Raspberry pi + piface=home electronics-security

Raspberry Piはflashを酷使webアクセスlogをtmpfsへ

ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置rootfs 7319248 4842536 2129080 70% / /dev/root 7319248 4842536 2129080 70% / devtmpfs 187232 0 187232 0% /dev tmpfs 38280 260 38020 1% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 76560 0 76560 0% /run/shm /dev/mmcblk0p1 57288 13520 43768 24% /boot tmpfs 51200 3612 47588 8% /www

Page 42: Raspberry pi + piface=home electronics-security

Raspberry Piはflashを酷使/var/spool,/var/logをtmpfsへ

[root@var]# ll 合計 102428

lrwxrwxrwx 1 root root 9 9月 9 04:55 lock -> /run/lock

lrwxrwxrwx 1 root root 8 2月 24 07:05 log -> /www/log

lrwxrwxrwx 1 root root 9 2月 24 07:05 mail -> /www/mail

lrwxrwxrwx 1 root root 4 9月 9 04:55 run -> /run

lrwxrwxrwx 1 root root 10 2月 24 07:05 spool -> /www/spool

Page 43: Raspberry pi + piface=home electronics-security

Raspberry piハングアップ◆CPU温度をリアル表示させたところ、何と58℃付近◆急遽CPUファンを取り付け、50℃前後で推移◆無線LANチップが高温になるので効果絶大◆CPUファンを回しっぱなしでは芸が無いので、pifaceのリレーでオンオフ

Page 44: Raspberry pi + piface=home electronics-security

Raspberry pi無線LANダウン◆無応答時にUSB無線LANチップを抜き差しで復旧◆無線LANチップの高温が原因と違った◆定期的にgatewayへping、failしたら無線LANをrestart

if ! ping -c $GATEWAY 2>&1 > $PING_LOG;then ifdown wlan0 ifup wlan0 fi

◆これでもダメ、2.4GHZ帯は限界か

◆やっぱりRaspberry piは有線で使おう

Page 45: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

それではデモいってみよう 音声制御編

http://youtu.be/VMbOodMtHNg

Page 46: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

それではデモいってみよう 火災報知器編

http://youtu.be/UHIiRQaHXZ4

Page 47: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

それではデモいってみよう IRKIT-1編

http://youtu.be/P9tbpEEdVEU

Page 48: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

それではデモいってみよう IRKIT-2編

http://youtu.be/V-JhsCqqB6c

Page 49: Raspberry pi + piface=home electronics-security

もっと早く、もっとクールにリモートで解決 PepoLinux

それではデモいってみよう Tocos無線モジュール編

http://youtu.be/-_FqOdLbzMw

Page 50: Raspberry pi + piface=home electronics-security

おしまい

http://www.pepolinux.comTwitter@kujiranodanna

山内