ハードウェアを用いてpythonを学ぶ
DESCRIPTION
2011年01月29日、Pycon mini JPにて発表したプレゼン資料お前、誰よ!→http://noise.artifactnoise.com/Twitter: @nonNoiseTRANSCRIPT
![Page 1: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/1.jpg)
![Page 2: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/2.jpg)
![Page 3: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/3.jpg)
自分はハードウェア設計人得意な言語はC
パソコンのソフトとか大の苦手w
何故、Pythonを使うの?
近年、ハードウェアを扱うソフトがMac 化しているのが原因。
昔から、Windowsでしか操作出来ない事に疑問があった。
だから、Pythonを使ってOS依存しないハードウェアを操作するソフトウェアを作りたかった。
物語の始まり。
![Page 4: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/4.jpg)
他の人はどうやっていたのか。
ケース1GCCでLinux向けに開発する。
ケース2Cygwinを使ってWinに対応させる。
ケース3Javaで開発してLinux&Winに対応させる。
ケース4OS別にプログラムソースを変える。
![Page 5: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/5.jpg)
Python
![Page 6: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/6.jpg)
ここが良かったPython!
・オープンソースで商用利用OK!・ライブラリが無駄に豊富!・C言語と親和性があった!・ソースが兎に角、綺麗!・サンプルも豊富!・Winで開発してLinuxでも動く!
そして何より、この場で発表が出来た事が一番嬉しいw
![Page 7: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/7.jpg)
ハード屋が喜びそうなライブラリ
ドライバー系pySerial : シリアルポート、 COM ポートpyUSB :USBドライバが叩ける?pyParallel: パラレルポート制御
GUI系wxPython :クロスプラットホームGUIEasyGui :同じくGUI用ライブラリPyGame:GUIゲームを作る強力なライブラリ
![Page 8: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/8.jpg)
ハード屋が喜びそうなライブラリ 2
理数系Matplotlib :某製品風なライブラリNumPy :多次元配列や行列をサポートSciPy :積分、線形代数、フーリエ変換
3D系VPython :3D描画PythonCAD :3DでCADも扱える
ロボット系pyrobot :Googleが作ったライブラリ
![Page 9: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/9.jpg)
Python で作ろう!
自作したハードウェアとPythonを使って お手軽!電光掲示板ガジェットを作るよ~w
![Page 10: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/10.jpg)
![Page 11: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/11.jpg)
私が作った電光掲示板
![Page 12: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/12.jpg)
システムの全体図
+ +
++++
+
+ +
++
+
++
+++
+
![Page 13: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/13.jpg)
Pythonで作って良かったこと
・シリアル通信が簡単に出来た。・文字の操作が簡単だった。・細かな変更を繰り返す実験に効果的・他のライブラリを組み合わせ出来そう・Winで作ってLinuxで確認できた。
夢が広がる。作りたい物が増える。
![Page 14: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/14.jpg)
悪かった部分もある。
・シリアル送信時の改行文字の指定
・WinとLinuxとのポートの指定先の違い
・パソコンの性能による駆動時間の違い
頭を使えば(ソースを工夫すれば)何とかなる問題だと思う。
![Page 15: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/15.jpg)
こうしてクロスプラットフォーム電光掲示板が
完成した。
![Page 16: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/16.jpg)
ちょっと脱線。
for num in range(0,51): for j in range (0,16): ser.write("Matlix.Buff\r\n") for i in range(0,16): buf_viwe[i] =((0x8000>>j & line[num][i])<<j)>>15 viwe[i] = 0xFFFF & (viwe[i]<<1) viwe[i] |= buf_viwe[i] tmp_str = "H.%04x\r\n" % (viwe[i]) ser.write( tmp_str) ser.write("Matlix.DispON\r\n")
for num in range (0,17): for i in range (0,16): ser.write("Matlix.OneData\r\n")
tmp_str = "H.%04x\r\n" % (line[num][i])ser.write( tmp_str)ser.write("Matlix.DispON\r\n")
改善前の電光掲示板 表示機構
改善後の電光掲示板 表示機構
![Page 17: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/17.jpg)
ちょっと脱線。for num in range(0,51): for j in range (0,17): ser.write("Matlix.Buff\r\n") for i in range(0,16): buf_viwe[i] =((0x8000>>j & line[num][i])<<j)>>15 viwe[i] = 0xFFFF & (viwe[i]<<1) viwe[i] |= buf_viwe[i] tmp_str = "H.%04x\r\n" % (viwe[i]) ser.write( tmp_str) ser.write("Matlix.DispON\r\n")
for num in range (0,51): for i in range (0,16): ser.write("Matlix.OneData\r\n")
tmp_str = "H.%04x\r\n" % (line[num][i])ser.write( tmp_str)ser.write("Matlix.DispON\r\n")
ループ回数を減らし、高速化!
![Page 18: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/18.jpg)
ハード屋らしい解決法w
ループ回数を減らすと高速化する!
ループ処理を外部のマイコンに処理させる。
![Page 19: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/19.jpg)
リリース盤が出来ました!w
![Page 20: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/20.jpg)
![Page 21: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/21.jpg)
もう一つ 作って見ました。
GamePong
![Page 22: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/22.jpg)
Pongとは
![Page 23: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/23.jpg)
既にサンプルが沢山あった
![Page 24: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/24.jpg)
早速、遊んでみる
遊び方:・Player1 ↑と↓・Player2 WとS
ボールがぶつかると音が出る。
キーボード操作ではちっとも面白くないゲーム!!
![Page 25: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/25.jpg)
サンプルを改造してみる挑戦
![Page 26: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/26.jpg)
改造した代表的なソース
ser.write("AD.ad8\r\n")ser.readline()ser.write("I.\r\n")adstr = ser.readline()print int(adstr,10)
player1.position.y= ball.position.yplayer2.position.y = (SCREEN_HEIGHT ) - (int(adstr,10) * ((SCREEN_HEIGHT )/255.0))
マイコン機器からPyserial で可変抵抗のデータを貰って来る。
player1はボールのY軸と同じ(無敵のCOM)player2は可変抵抗で画面を上下に移動する。
![Page 27: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/27.jpg)
早速、遊んでみよう!!
![Page 28: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/28.jpg)
![Page 29: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/29.jpg)
ここまでが Python触りだして1ヶ月
これまで作った物は、・ Python で 電光掲示板・ Python で Pongゲーム触っている内に、何となくPython が扱えるようになったwソースも見やすいし、サンプルから学べる物が多い。何より、完成形に持ち込みやすい!!w
![Page 30: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/30.jpg)
もう時間になってしまったので、
兎に角、Python は、最強だと思う!!
![Page 31: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/31.jpg)
次は、
WEBライブラリも追加して 電光掲示板に Twitter を流す!
理数形ライブラリを追加して GUI計測ソフトを作って見たい。
仕事でも積極的に取り入れていきたいと思う。
![Page 32: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/32.jpg)
![Page 33: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/33.jpg)
以上で発表を終わります。
![Page 34: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/34.jpg)
最後に、
![Page 35: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/35.jpg)
日本でPythonが流行らないので、試しに 擬人化をしてみたw
名前は、錦 伊織(仮)
ヘビを飼っている。胸(ソースコード)が大きく魅力的w
書籍化する際はご用命をw
![Page 36: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/36.jpg)
以上で発表を終わります。
![Page 37: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/37.jpg)
The END
![Page 38: ハードウェアを用いてPythonを学ぶ](https://reader033.vdocuments.mx/reader033/viewer/2022060121/5593aaea1a28ab77148b4605/html5/thumbnails/38.jpg)