17
PICRoRherokuの無茶な関係 @mgwsuzuki

PIC RoR Heroku

Embed Size (px)

Citation preview

Page 1: PIC RoR Heroku

PICとRoR・herokuの無茶な関係

@mgwsuzuki

Page 2: PIC RoR Heroku

自己紹介

• 本職はLSI設計とかデジタル無線通信とか組み込みソフト開発とか

• 小さいマイコンとか電子部品が好き

• Low Layer好き、というか好き

Page 3: PIC RoR Heroku

PICマイコン

• 32bit 80MHz CPU • 128KB Flash Memory, 32KB RAM

– MBじゃない、KB

• OS無し

Page 4: PIC RoR Heroku

マイコンとセンサ

• 小さいマイコンに興味を持つと大体センサに手を出す • 今回は気圧センサ

Page 5: PIC RoR Heroku

ネットワーク??

• これは?? • 10Mbpsのイーサネット

Page 6: PIC RoR Heroku

PICマイコン

• 32bit 80MHz CPU • 128KB Flash Memory, 32KB RAM

– MBじゃない、KB

• OS無し • でもEthernetでDHCP, DNS, TCP, UDP, Webサーバまでできる

– 製造メーカーがライブラリを無償提供

Page 7: PIC RoR Heroku

妄想

• 気圧センサで取得したデータを

• Ethernet使って

• 今はやりのRuby on Railsで作ったサーバに

• PCを使わずにPICだけで

• 自動的に投稿してみようじゃないか

Page 8: PIC RoR Heroku

困難

• PICでjavaやrubyが動くわけじゃない

• 文字列処理に便利な正規表現があるわけじゃない

• HTTPライブラリがあるわけじゃない

• 要するに無いないづくしorz

Page 9: PIC RoR Heroku

楽観

• TCPあれば80番ポート叩けばいいよね

• HTTPなんて”GETなんちゃら”って送ればいいよね

• セッションもcookieをオウム返しすればいいよね

• authenticity_tokenだってオウム返しでしょ?

• BASIC認証だって(ry

• なんとかなるよね、きっと

Page 10: PIC RoR Heroku

とりあえず現物

• senslogs.herokuapp.com/senslogs

Page 11: PIC RoR Heroku

Ruby on Rails

• Scaffoldingでひな形作って改造

• BASIC認証追加

• データがPOSTされたときの時間を記録する

• Herokuへdeploy

Page 12: PIC RoR Heroku

HTTP GET

• GETで得た文字列をどうにかして解析しないといけない • そのための文字列操作関数を作る

GET /senslogs/new HTTP/1.0 <- PICから送信 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 … <- 途中省略 Set-Cookie: _sensor_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRkkiJWE2MzJmMGVhNDkzNGNjZTI0ZWZlYzZiYWRkOTI2NjRjBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMUpmT1hzOHZJa1RDSHdoZDVBbC9lQTlWRkRkRHJScVdOcE5aSDRjc0pUMjA9BjsARg%3D%3D--7f1dc20e289a0a5bc0cb5dbe1bc2522cee8fb0bd; path=/; HttpOnly … <form accept-charset="UTF-8" action="/senslogs" class="new_senslog" id="new_senslog" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="nFgUyFamqODtURZ0W81UcofMPDh1Esx1hurNDC/Jt04=" /></div>

Page 13: PIC RoR Heroku

作ったライブラリ • 可変長の文字列を扱う文字列クラス

• いわゆるString

Page 14: PIC RoR Heroku

作ったライブラリ • HTTPサーバと会話するためのクラス

Page 15: PIC RoR Heroku

受信と送信

Content-Type: text/html; charset=utf-8

Content-Ty

pe: text/h

tml; chars

set=utf-8

文字列が細切れになって時間差で到着する これを連結して1つの文字列に直す 送信はその逆を行う

Page 16: PIC RoR Heroku

HTTP POST

• POSTするためにはGETが必要 – Cookie, Authenticity_token

• HTTPサーバに受け付けられるか見ながらヘッダを追加していった • BASIC認証のヘッダはとにかく付けておけばo.k.

POST /senslogs HTTP/1.1 Host: senslogs.herokuapp.com これが無いと接続できなかった Connection: close Cookie: _sensor_session=BAh7B… GETで得たCookieを返す Authorization: Basic XXXXXXXX BASIC認証の文字列 Content-Length: XXX BODYの文字列長 utf8=%E2%9C%93&authenticity_token=8r3AJu9wnUoZRL5iRG%2Ffc3TLdYRVJPcPO86PCMaeZE0%3D&senslog%5Btempature%5D=23&senslog%5Bpressure%5D=429&commit=Create+Senslog

Page 17: PIC RoR Heroku

まとめ

• ネタとして

• 2W以下の低消費電力で動作する

• 外部のサーバに指令を書いておけば… – スマホでエアコンをオンすることだって可能

• 小さなマイコンでもネットにつながる

• 最近は無線LANボードも安くなった

• Low Layerは楽しいのでオイデオイデ