PIC RoR Heroku

Post on 30-Jul-2015

684 views 3 download

Transcript of PIC RoR Heroku

PICとRoR・herokuの無茶な関係

@mgwsuzuki

自己紹介

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

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

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

PICマイコン

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

– MBじゃない、KB

• OS無し

マイコンとセンサ

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

ネットワーク??

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

PICマイコン

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

– MBじゃない、KB

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

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

妄想

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

• Ethernet使って

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

• PCを使わずにPICだけで

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

困難

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

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

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

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

楽観

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

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

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

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

• BASIC認証だって(ry

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

とりあえず現物

• senslogs.herokuapp.com/senslogs

Ruby on Rails

• Scaffoldingでひな形作って改造

• BASIC認証追加

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

• Herokuへdeploy

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>

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

• いわゆるString

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

受信と送信

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

Content-Ty

pe: text/h

tml; chars

set=utf-8

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

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

まとめ

• ネタとして

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

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

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

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

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