Linux
で外部機器を動かそう
PepoLinux Vmware appliance
Remote-Hand DIO v0.32
Raspberry Pi
+
Piface
=
Remote-Hand
OSC2013_Kansai@Kyoto
2013.8.3
会議室
B 14:00
-
14:45
Twitter@kujiranodanna
[email protected]
もっと早く、もっとクールにリモートで解決
sourceforge
もっと早く、もっとクールにリモートで解決
もっと早く、もっとクールにリモートで解決
acm-FOMA
とは
USB
接続が出来る
FOMA
携帯電話用の
Linux
Kernel-2.6
以降の
driver
/drivers/usb/class/cdc-acm.c
を
docomo
の
FOMA
の
driver
として改造、
2007.3.31
初リリース
当初
FOMA
の機種毎にコード追加してリリースを、余
りに早い新機種ラッシュそれに対応すべく
2007.11.17
に機種別コードを不要へ
従来から
MODEM
モードのみでしたが、
2011.5.28
v0.26.10
からは
OBEX
と
ATcommand
の3モードを
サポート出来るように
もっと早く、もっとクールにリモートで解決
Remote-Hand
とは
network
繋がってたら
Remote
で操作
(Hand)
network
機器コマンド叩きで大抵は
OK
network
繋がってなければ
FOMA
経由
携帯電話を
ppp
接続、
Remote login
外部信号とのやり取り
Digital Input Output
接続で機能性
UP
DIO
接続で外部信号の入力判定と出力操作
電源入/切、
Reset
ボタン、警報ブザー、パトライト等
Gmail
との連携
Web
カメラの画像をで送信
もっと早く、もっとクールにリモートで解決
PepoLinux
OpenMicroServer + FOMA Remote-Hand
リモートハンド USB接 続
•
パソコンの
ping TimeOut
を電話で通知
•
うさぎが人参を食べたら、人参を補充し電話で通知
•
トラが檻を破って脱走したら、パトライトを点灯
•
うさぎやトラをどうやって認識させる
Open Micro Server
の
DIO
端子を使い動物を監視
FOMA網
64kデジタル通信
or
OpenMicroServer
で
Remote-Hand
OpenMicroserver
は
DIO
を4ビット内蔵
Digital
信号(0
v,3.3v
)出力で
AC100
駆動させるには別途
Driver
(
TR,SCR, FLS
等)必要
如何せんとも遅い
mips
系
CPU
(
400MHz
)
値段が6万位とお高い割に結構しょぼい
2011
年早々製造中止
次機種には
DIO
は内蔵されてない
もっと早く、もっとクールにリモートで解決
Open Microserver
代替を探して
シリアル
DIO
ボード+
PepoLinux
ハードウェア
出来るだけ安く→1万円位
入手し易い→家電量販店や通販
再現性重視、特殊工具不要→半田ごて、圧着ペンチ、ラジ
オペンチ
ソフトウェア
シリアル経由なら拙者の
epicon
GUI
は
Open Microserver
の
WEB
インターフェース流用
DIO
コントロール用コマンド開発
pepodioctl
コマンドを開発
# pepodioctl
# usage $0 usage $0 read->chno:0-9 | write->chno:0-5 [DO:0|1]
[time->1 to 65535ms]
pepodioctl
の中身
CMD_DIO="/usr/local/bin/epicon -d 5 -D 5 -ql ${DIO_DEV} -c
${CMD}"
# cat ${CMD}
#!/bin/sh
echo -en "${DI_ADR}${CH}¥r¥n“
もっと早く、もっとクールにリモートで解決
シリアル経由だと結構ややこい
アプリケーション
CH
0
1
ライト
DIO
ボード
DIO
コントローラ
DIOADDRES
→
A
CH
0→
A
1→
H
ARA
を
9600bps
で送信
AAH
を
9600bps
で送信
ライトアフタ
WAIT
AHA
を
9600bps
受信
リード
WAIT
1
表示
PIC
で
なんやかんやの処理
PIC
で
なんやかんやの処理
PIC
で
AHA
送信処理
ライト直後リード→
AHA
通常のリード→
AAH
PIC
のバグ?
OK
:
read data
→1
NG
:
-
1
やりました!
でもシリアル経由だと結構時間が
orz
コマンド実行時間の計測
[root@~]# time pepodioctl 0
1
↑
↑
↑
↑
CH0
へのリード
real 0m0.138s
user 0m0.012s
sys 0m0.084s
[root@~]# time pepodioctl 0 1
1
↑
↑
↑
↑
CH0
へのライト
real 0m0.156s
user 0m0.030s
sys 0m0.082s
V0.24
までは
CH0
へのリード
real 0m0.674sCH0
へのライト
real 0m0.730s9600b/s
→
1
文字約
1ms
秒
・・・
1
÷
9600
×
10=0.00104166
・・
write
:
4
文字、
read:8
文字
read
:
8
×
1=8ms
write
:
4
×
1+4(after read)=8ms
実際は文字間
delay
が必要
文字:
5ms
、改行:
5ms
1
文字:
6ms
、
1
コマンド:
+ 5ms
read
(
4
文字送信)→
wait
:
10ms
→
read
(
3
文字受信
)=4+10+3
write
(
4
文字送信)→
wait
:
10ms
+
after
read
4
×
6+10+10
(送信)+
3
(受信)
計算上:
read=47ms,write=47ms
実際は
Lockfile
操作等に時間が
もっと早く、もっとクールにリモートで解決
daemon
の
pepodiod
コマンド開発
Digital
入力信号を定周期で読み取り
信号変化で該当コマンドを実行
具体的には入力側
DI
:
low/high
、出力側
DO
:
off/on
DI:
照明
SW
の
high
→
low
・・・
DO:
蛍光灯を点ける
DI:
照明
SW
の
low
→
high
・・・
DO:
蛍光灯を消す
DI:
池の水が満杯(フロート
SW
)
high
→
low
DO:
パトライトを点灯、
AP:
メールを送信
DI:
トラが脱走(どうにかして検出)
DO:
サイレン鳴動、
AP:
電話をする
DI
:留守中の扉開検出
Web
カメラで動画
etc
DIO
コアプログラムの完成
pepodioctl
:
DIO
の読み書きはマルチユーザー
pepodiod
:
DIO
から
1
秒毎に読み込み入力信号
の変化に合わせたアクションを実行
pepogmail4dio
:
gamil
経由で
DIO
の入出力操
作と情報を返信
pepogmail4pic
:
gamil
経由で
USB
接続カメラの
もっと早く、もっとクールにリモートで解決
フルスクラッチ
フルスクラッチ
簡単操作
Web
インターフェース
jQuery
でルックフィールと操作性
UP
殆どが
shell
スクリプト
distribution
やバージョンに左右されない
bash cgi
6613
ruby-cgi 107
javascript 2009
helper script 1911
epicon C 1934
気がつけば約
12,000
行の
C
とスクリプト群
必死のパッチ
市販のDIOシリアルボード
9600bps
非同期通信
5v14
本の入力/出力端子
もっと早く、もっとクールにリモートで解決
必死のパッチ
ソリッドステート
SW
コンセント
BOX
開発
ソリッドステート
SW
コンセント
BOX
内部
DIO
出力
0/5V
で
AC100V/5A
をオフ
/
オンさせ
る為のソリッドステートスイッチ
内蔵コンセントBOXを開発
2,000
円程度
リモートハンド USB接 続 FOMA網 64kデジタル通信 or 384kパケット通信
•
トラが檻を破って脱走したらパトライトを点灯させ電話通知
•
うさぎが人参を食べたら、人参を補充し
で通知
•Server
PepoLinux
Vmplayer
+
PepoLinux+DIO+FOMA=Remote-Hand
シリアル接続Vmplayer
+
PepoLinux
+
シリアル
DIO
ボードで動物
を監視
もっと早く、もっとクールにリモートで解決 リモートハンド USB接 続 FOMA網 64kデジタル通信 or 384kパケット通信
•
トラが檻を破って脱走したらパトライトを点灯させ電話通知
•
うさぎが人参を食べたら、人参を補充し
で通知
•
Serverの
ping TimeOut
を
と電話で同時通知
•
うさぎやトラをどうやって認識?→
WEB
カメラで動画を
PepoLinux
PepoLinux
Vmplayer
Vmplayer
+
+
PepoLinux+DIO+FOMA
PepoLinux+DIO+FOMA
=Remote
=Remote
-
-
Hand
Hand
シリアル接続
Vmplayer
+
PepoLinux
+シ
リアル
DIO
ボードで動物を監
もっと早く、もっとクールにリモートで解決
DIO
の各ポートへ別名設定
出力信号へ別名設定
もっと早く、もっとクールにリモートで解決
Ajax
で入出力制御とリアル監視
DIO
の出力設定と入力状態
を文字と色でリアル表示
Google Chrome API
もっと早く、もっとクールにリモートで解決
入力イベントに対する動作を設定
1入力信号の変化
0→1:
low
→
high
1→0:
high
→
low
2イベントの動作を設定
DIOControl2
で別動作を設定
同じイベントで2つの動作
パトライト点灯&電話
アクションは全部で15種類
出力6本の
High
と
Low
電話
文字メール
もっと早く、もっとクールにリモートで解決
Gmail
経由で
DIO
操作
•
Gmail
経由でキーワードを指定して
DIO
を操作
•
Gmail
なのでメールサーバ側で特に設定不要
•
ランプ点灯
/
消灯
•
入力信号の状態をメール通知
•
web
カメラの画像をメール送信
•
登録メールアドレス以外操作禁止
•
全てのメールアドレス操作許可
もっと早く、もっとクールにリモートで解決
動物監視(ペット)
人感センサー
無線受信器
人感センサー
センサー感知でト
コトコ逃げだす
もっと早く、もっとクールにリモートで解決
三都物語やねん、帰って来たよ
osc2011@kobe
→
osc2011@kyoto
→
kof2011
もっと早く、もっとクールにリモートで解決
ところで
Raspberry Pi
Raspberry Pi
の拡張ボード
Piface
PiFaceとはデジタルI/O拡張ボード
Raspberry
Pi用の入出力8ビットの拡
張ボード
5
V
リレー×2の出力で
AC100V/DC2
4
V
5
A
迄外部スイッチング
もっと早く、もっとクールにリモートで解決
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
リモートハンド USB接 続 FOMA網 64kデジタル通信 or 384kパケット通信
•
トラが檻を破って脱走したらパトライトを点灯させ電話通知
•
うさぎが人参を食べたら、人参を補充し
で通知
PepoLinux
PepoLinux
Raspberry Pi
+
Piface
=Remote
=Remote
-
-
Hand
Hand
動物を監視
Gamil
連携で外部機器の監視
もっと早く、もっとクールにリモートで解決
libpiface
に難あり
pfio.c
へ
patch
pepopiface
コマンドは
piface(Gpio)
を制御する
libpiface
に難あり
pfio_init()
を最初に呼ぶ事に、が呼ぶ都度出力ポート
が初期化される
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;
もっと早く、もっとクールにリモートで解決
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).
pepopiface
は
piface(Gpio)
を制御
# pepopiface** Welcome to pepopiface Version-0.1
Copyright Yamauchi.Isamu compiled:Jul 20 2013 **
usage:pepopiface port:0-8 [0|1] [timer:0-65535ms]
入力
port0
と出力
port0
を接続
# pepopiface 0 1
→
1 port0
へ
write
# pepopiface 0
→
1
もっと早く、もっとクールにリモートで解決
pepopifaced
は
daemon
定周期で
pepopiface 8
を投げ入力8ポートを監視
たとえば入力ポート0の変化によりコマンドを起動
High
→
Low
:
dio0high2low
コマンドを実行
Raspberry Pi
は
flash
メモリを酷使
web
アクセス
log
を
tmpfs
へ
# df
Filesystem
1K-blocks Used Available Use% Mounted on
/dev/root 7533648 3771908 3430628 53% /
devtmpfs
223256 0 223256 0% /dev
tmpfs
223344 0 223344 0% /dev/shm
tmpfs
223344 976 222368 1% /run
tmpfs
223344 0 223344 0% /sys/fs/cgroup
tmpfs
223344 0 223344 0% /tmp
tmpfs
10240 1952 8288 20% /www
もっと早く、もっとクールにリモートで解決
Raspberry Pi
+
Piface
それではデモいきます
電気をつけて
飛べ鬼奴?
http://www.youtube.com/watch?v=ku1aRjwkCuI
ご清聴有難う御座いました
2013.8.3
会議室
B 14:45
頃プレゼン終了予定
残り時間は少ないですがブースも見てね
PepoLinux
もっと早く、もっとクールにリモートで解決