contents
- 2012年11月07日(金) KOF2012 BSDなひととき
- *BSDとI/O
- 本当にレガシーなインタフェース
- レガシーなインタフェース
- USB, USB, USB!!
- USBシリアル3兄弟+1; USBシリアル
- USBシリアルのdmesg; USBシリアル
- デバイス使用上の注意; USBシリアル
- シリアルパーミッションの解決方法; デバイス使用上の注意
- FreeBSDの場合; シリアルパーミッションの解決方法
- おまけ; 謎USBデバイス
- Physical Computingとは?; Physical Computing
- Physical Computing 3兄弟
- Gainer; Physical Computing 3兄弟
- Arduino; Physical Computing 3兄弟
- Sensor Board; Physical Computing 3兄弟
- Scratch / Squeak TIPS
- 付録基板の世界
- 付録基板を選ぶには…
- Future works
イマドキBSD I/O 2012
2012年11月07日(金) KOF2012 BSDなひととき
むとうたけし@K*BUG <mutoh@openedu.org>
*BSDとI/O
- むとうには、あまりHardなことは言えません(_O_)
- ◯お気軽に、ヒカリやVR(input)で、LED光らせたりサーボ動かしたり (output)
- ×インストール前にADM3202ANで電圧レベル変換してシリアルコンソールを出す
- USB使ってPhysical ComputingとBSDといった内容
- Squeak / Scratch も使いたいですよね?
- 歴史: 「Serial知りはる?知ってはる?」
本当にレガシーなインタフェース
イマドキはついているように思えても、USBの先に居たりする。
- RS-232C
- パラレルポート (IEEE1284)
- PS/2
- FDD
- ...
レガシーなインタフェース
ppc0: <Standard parallel printer port> at port 0x378-0x37f irq 7 pnpid PNP0400 on isa0 ppc0: Generic chipset (EPP/NIBBLE) in COMPATIBLE modef ppbus0: <Parallel port bus> on ppc0 plip0: <PLIP network interface> on ppbus0 lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port ppi0: <Parallel I/O> on ppbus0 uart0: <16550 or compatible> at port 0x3f8-0x3ff irq 4 pnpid PNP0501 on isa0
USB, USB, USB!!
- USBだけアレば大丈夫!?
- 「待て!! portingはシリアルを確保してからだ!!」
- 今回は主にUSBデバイスとして見えるお気楽I/Oデバイスについて
USBシリアル3兄弟+1; USBシリアル
- USBシリアル: ucom (/dev/{ttyU,cuaU}?)
- uftdi: FTDI
- uplcom: Prolific
- umodem: USB Communication Device Class (CDC)
- USB Mass Storage: umass:(/dev/{sd,da,...}?)
- USBメモリUSB HDDとか色々
- 最近はコンパイルした実行ファイルをディスクに見える所に入れるデバイスも
USBシリアルのdmesg; USBシリアル
- uftdi: Gainer
uftdi0 at uhub2 port 1 uftdi0: FTDI FT232R USB UART, rev 2.00/6.00, addr 2 ucom0 at uftdi0 portno 1
- uplcom: なのぼ〜ど
uplcom0 at uhub1 port 1 "Prolific Technology Inc. USB-Serial Controller" rev 1.10/3.00 addr 2 ucom0 at uplcom0
- umodem: Design Wave Magazine 2008/05基板
uhub4 at uhub0 port 1 "Genesys Logic USB2.0 Hub" rev 2.00/32.98 addr 4 umodem0 at uhub4 port 4 configuration 1 interface 0 "vendor 0x09b9 product 0x0000" rev 2.00/0.00 addr 5 umodem0: data interface 1, has no CM over data, has no break umodem0: status change notification available ucom0 at umodem0
デバイス使用上の注意; USBシリアル
デバイスのパーミッションに注意
- OpenBSD 5.2R
vaio-p:~ [12-11-04T7:49] % ls -l /dev/ttyU0 crw-rw---- 1 uucp dialer 66, 0 Nov 4 07:49 /dev/ttyU0
- NetBSD 6.0R ておくれ
teokure-% ls -l /dev/ttyU0 crw------- 1 uucp wheel 66, 0 Oct 17 23:55 /dev/ttyU0
- FreeBSD (devfd, devd無し)
insp700m [ ~ ] % ls -l /dev/ttyU0 crw------- 1 root wheel 0x6f 11月 7 11:46 /dev/ttyU0
シリアルパーミッションの解決方法; デバイス使用上の注意
- ×
Use root or sudo. - chmod a+rw /dev/ttyU0
- chown mutoh /dev/ttyU0
- /etc/group でグループ調整
vaio-p:~ [12-11-04T7:51] % egrep dial /etc/group dialer:*:117:mutoh teokure-% egrep wheel /etc/group wheel:*:0:root,mikutter
- FreeBSD: 動的にデバイスが生える
- /etc/devfs.conf
- /etc/devd.conf
FreeBSDの場合; シリアルパーミッションの解決方法
- 例1: /etc/devfs.conf
kohjin:~ [12-11-05T13:51] % egrep tty /etc/devfs.conf own ttyU* operator:operator perm ttyU* 0660
- 例2: /etc/devd.conf
attach 10 { device-name "umodem[0-9]+"; action "chmod 666 /dev/ttyU*"; action "chmod 666 /dev/cuaU*"; }; attach 10 { device-name "uplcom[0-9]+"; action "chmod 666 /dev/ttyU*"; action "chmod 666 /dev/cuaU*"; }; attach 10 { device-name "uftdi[0-9]+"; action "chmod 666 /dev/ttyU*"; action "chmod 666 /dev/cuaU*"; };
おまけ; 謎USBデバイス
- uipaq, uvisor, urio; 何に使うんだ?
- uipaq
ugen0.3: <vendor 0x049f> at usbus0 uipaq0: <vendor 0x049f product 0x0003, rev 1.00/0.00, addr 3> on usbus0 ums0: <EndPoint1 Interrupt Pipe> on usbus0 ums0: error reading report description device_attach: ums0 attach returned 12
- urio; Rio600 & Rio800
ugen2.2: <Diamond Multimedia> at usbus2 urio0: <Diamond Multimedia Diamond Multimedia Digital Audio Player, class 0/0, rev 1.00/1.00, addr 2> on usbus2 ugen2.2: <Diamond Multimedia> at usbus2 urio0: <Diamond Multimedia Diamond Multimedia Digital Audio Player, class 0/0, rev 1.00/1.00, addr 2> on usbus2
Physical Computingとは?; Physical Computing
- 美術系大学生でも簡単に電子工作!!
- 電子工作を教えている時間なし
- 作品作るのには場合によっては必要
- センサー: スイッチとか光センサーとか音とかの値とりだして…
- アクチュエータ: LED光らせたり、サーボ動かしたり
- オープンハードウエアで公開、自由に互換機が出る
- ⇒ 価格が安くなる
Physical Computing 3兄弟
- Gainer
- Arduino
- (AVR) マイコンでstandaloneで動作可能
- Sensor Board (PicoBoard)
Gainer; Physical Computing 3兄弟
- 小林茂@IAMASらが開発
- コントローラとしてのPC必須
- シリアルベースのプロトコル (cu で使える!!)
- プロトコル
- ?*, Q*, KONFIGURATION_1*, h*, l*, ...
- ハードウエア
- Gainer mini
- Design Wave Magazine 2008/05基板: 3軸加速度センサー付, Gainer実装はサブセット
- ライブラリ
- Squeak+Gainer
- gainerm-lib: C言語
- Goo-gleば山ほど出てきます
Arduino; Physical Computing 3兄弟
- ハードウエア
- ちびでぃ〜の2 1000円
- 大人の科学Vol.27付録 Japanino (POV付き) 3360円
- GR-SAKURA (umass+Cloud IDE) 3500円程度
- 星の数ほどの互換機
- Boarduino; ブレッドボード用
- LilyPad; 手芸用, ...
- 星の数ほどのシールドと呼ばれる拡張基板
- センサ系: CLCD-BOOSTER, タッチパッド, GPS, ...
- アクチュエータ系: LED, LCD, (サーボ)モータ,
- 通信系: Ethernet, XBee, ...
- ソフトウエア: Arduino IDE: Processing (Java (rxtx), avr-libc, avrdude, ...)
Sensor Board; Physical Computing 3兄弟
- そもそも プログラミング教育系言語 Scratch で利用するために作られた
- シリアルベースのプロトコル (Sensor Board)
- Inputのみ
- Outputとしては、WeDo用のものがある
- ハードウエア
- なのぼ〜ど 1500円
- なのぼ〜ど AG (モータつき、Output可能) 2200円
- ソフトウエア
- Scratch (Squeakプラグインとして組込済)
- Etoys(Squeak)用のライブラリもあり
Scratch / Squeak TIPS
- Squeak 4.10.2以降でScratchプラグインが標準で入る
- FreeBSDだと大丈夫!!
- Linux4Video, Sensor Board, ...
- package版SqueakVMでUSBシリアルを使う
- バイナリエディタ(bviなど)で/dev/ttyS0をttyU0に
(snip) 00080050 5D 08 83 FE 09 C7 03 2F 64 65 76 C7 43 04 2F 74 ⇒ ⇒ ]....../dev.C./t 00080060 74 79 66 C7 43 08 55 30 C6 43 0A 00 7F 0F 89 1C ⇒ ⇒ tyf.C.U0.C...... (snip)
付録基板の世界
- 付録がついたモノって好きですよね?
- 小学?年生とか、仮面ライダースナックとか
- 書店にあふれた付録付きの本
付録基板を選ぶには…
- とりあえず、落ち着いて回路図を見る
- 追加で必要なパーツ類に注意!!
- やっぱりセンサーが最初からある方が遊びやすいです
- 拡張基板は便利ですが、高いことが多いです
Future works
- FreeBSDでgainerm-libが動かないのをなんとかする
- 作者には連絡済
- Squeak / Scratch
- WeDo Pluginがコンパイルできるように
- Sendor BoardプロトコルをCなどの軽いので実装
- ちっちゃいものクラブでデモ
- Design Wave Magazine 2008/05基板
- もう少しGainerコマンドを実装
- 基板上のLEDぐらいはh*, l*で光らせたい
- 以前ちょっと作業した
*BSDで、一緒に遊びませんか!!