読者です 読者をやめる 読者になる 読者になる

Aruduino のイーサネットシールドでHTTP通信(GET受信)

Aruduino uno 3を兄上に紹介されたので、購入してみた。
ついでに、イーサネットシールドも共立電子で購入。
驚く程簡単にAruduinoは、HTTPサーバに変身をする。

なんと、スニペットの様に、例文がIDEの中に入っているので、キーボードを一切打たずにサーバになる。すごい。
で、HTTP通信ができるとなると、HTTPサーバを作りたくなるというのが、人情というもの。
こうなると、結構面倒で昔のcgi(C言語)の様な香りがする。面倒で一からフルスクラッチするには心が折れる・・・。

そこで、そのあたりのくだりは、別のサイトをそのまま頂戴することにした。

http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/Arduino/%C0%D6%B3%B0%C0%FE%B3%D8%BD%AC%A5%EA%A5%E2%A5%B3%A5%F3R2-D2/
こんなサイトとか、超参考にさせてもらった。

というか、これを作りたくてAruduinoを勉強しようと思った訳なので、これで完成となるのだが、
一方で、ソースコードを読んでみると、HTTP通信でGet受信する際、Irパケット以外の情報を取得していない仕様となっている。

個人的にはHTTPのGetリクエストには、すべてを受信して、あとでプログラムの方で処理をさせたいと考えていた。
例えば、
abc.html?abc=10&def=20&ghi=TEST
とかで送られると、
abc  |  10
def  |  20
ghi   |test
といった感じで配列とかに格納したかった。

そこで、上記のGETリクエストの文字列からAruduinoで格納するためのプログラムを書くことに。
本当に久しぶりのC言語で懐かしいが、やっぱりポインタがややこしい。
超汚いコードになったが、一応動くはず。MACgccで作ったので、もしかしたらAruduinoでは動いていたかも。

問題1:が使えない!

C++入っている(一部)とか言っていたので、vector使えるかと思ったのに!

問題2:C言語にはオーバーロードがなかった!

多重定義したらgccに怒られた。ひどい(涙)。

問題3:C言語には連想配列がなかった!

ハッシュテーブルってないんだったっけ。とかつかえないのか。
本当に、GET受信も、連想配列PHPなら、一瞬なのに。

問題4:C言語にはクラスの概念がなかった!

知ってたけど、やはりめんどくさい。

で、結局しょうがないから、パラメタと値を一セットにした構造体を動的配列にした。
とりあえずNativeなCで動くと思う。