2015/11/02

[esp8266]ATコマンドでHTTPプロトコルを投げよう

HTTPプロトコルを投げるのだ。

が、その前に・・・。
以前はつながっていたESP8266が、接続できなくなっていた。
調べたところ、ESP8266のMACアドレスが全部FFになっていたため、うちのMACアドレスフィルタリングしたAPに接続できなかったのだ。
幸い、フィルタリングしている一覧から探し出して登録し直したのだが、危ないところだった・・・。

でも、このMACアドレスはSilex社のものみたい。
ESPRESSIFさんは「18:FE:34」で始まるアドレスのようなのだが、うちのAPには登録されていなかったので、違うのだろう。
http://bbs.espressif.com/viewtopic.php?f=57&t=433
ここには「最近のチップは5C:CF:7Fを使っているので、18:FE:34をハードコーディングしないでね」と書いてある。
うーん、そっちのアドレスも登録してなかったしなぁ。

うちにSilex社の製品がないし、それ以外はAppleのアドレスだったから消去法でこうなったのだけど、すっきりしない。
コンソールのログを残しておけばよかった・・・。

追記(2016/01/06):
FLASHに焼いているときに気付いたが、MACアドレスがちゃんと出ていた。
そう、18:FE:34で始まる数字だ(STAモード時)。
消えてなくてよかった。


さて、使用できるATコマンドは、PDFから探すことができる。
[Document list 4A-4B] ESP8266 AT Commands - ESP8266 Developer Zone

ここから探すのはめんどうだから、ネットで探そう。
が、その前に、このPDFに載っているのが使える全部のATコマンドなのかが気になった。
もしかしたら、隠しコマンドがあるのでは・・・。

libat.aの中に、3コマンドほどなさそうな文字列があった。

  • AT+CIPALIVE
  • AT+CIPCHECKQUEUE
  • AT+IPR

けど、打ってみたら全部ERRORで返ってきた。
なので、そういう変な心配はしなくてよかろう。

AT v0.50.0からかもしれないが、いくつかのコマンドがdeprecated扱いになっている。

  • UART
  • CWMODE
  • CWJAP
  • CWSAP
  • CWDHCP
  • CIPSTAMAC
  • CIPAPMAC
  • CIPAP

これらの代わりに、後ろに「_CUR」がついたコマンドと「_DEF」がついたコマンドができた。
「_CUR」はFLASHに保存せずに反映、「_DEF」はFLASHに保存して反映、だ。
まだ上記コマンドも使えるけれども、FLASHに保存しないコマンドは便利なこともあるかもね。


巷で話題の超小型 Wi-Fi モジュール ESP8266 で遊んでみる | FIRMLOGICS

こちらに、ATコマンドでHTTPクライアントとしてつなぐ例があったので、やってみた。
つなぎ先は、「hiro99ma.blogspot.com/」にする。
nslookupで173.194.126.204とか3つくらい出てきたので、それで接続できるのだろう。

 

AT+CIPMUX=0(CRLF)

OK
AT+CIPSTART="TCP","173.194.126.204",80(CRLF)
CONNECT

OK
AT+CIPSEND(CRLF)

ERROR
AT+CIPSEND=5(CRLF)

OK
>
Recv 5 bytes

SEND OK

CIPSENDコマンドは、送信したいデータ長がいるようだった。
ここでは「GET /」と5文字入力すると、自動的に「Recv 5bytes」「SEND OK」まで出てきた。

で?
受信はどうしたらいいんだろう。。。と放置していたら「CLOSED」と出てきた。

 

「AT+CIPSEND」とだけ打った場合がブログで説明してある「unvarnished transmission」という状態になるようだ。
けど、これだけ打ってもエラーになる。。。
このコマンドが有効なのはtransparent transmissionのときらしく、その設定は「AT+CIPMUX=0」でできる。
接続が切れていないと設定できないらしい。
「AT+CIPMUX?」で現状を確認できるが、0になってるな。。。

もうあきらめて、普通にGET要求した感じにしてみよう。

AT+CIPSEND=41(CRLF)

OK
>
GET / HTTP/1.1(CRLF)
Host: 173.194.126.204(CRLF)
(CRLF)
Recv 41 bytes

SEND OK

+IPD,540:HTTP/1.1 301 Moved Permanently
Location:
http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2015 02:43:28 GMT
Expires: Wed, 02 Dec 2015 02:43:28 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
                                                                              <TITLE>301 Moved</TITLE></HEAD><BODY>
                                                                                                                   <H1>301 Moved</H1>
          The document has moved
                                <A HREF="
http://www.google.com/">here</A>.
</BODY></HTML>

お、それっぽく出てきた。
「GET~」のところは、コンソールには出てこないけど、こういう文字列を入力したのだ。

CURLをちょっとだけやったときに知ったのだが、こういうのをGETで取得したら、今度はその内容を解析して、また別のGETをどんどん投げていかないとだめなのね。。。当たり前だけどさ。。。


私はTeraTermを使って受信しているのだが、CR/LFを受信してもラインフィードしかしてくれず、キャリッジリターンしてくれてないようなのだ(設定の受信改行はデフォルトの「CR」のまま)。
受信の改行設定を「LF」にすると、ちゃんととれた。

+IPD,540:HTTP/1.1 301 Moved Permanently
Location:
http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2015 02:52:24 GMT
Expires: Wed, 02 Dec 2015 02:52:24 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="
http://www.google.com/">here</A>.
</BODY></HTML>

これは、設定をAUTOにしてもこうなった。
なんでじゃ?と思ってヘルプを見ると、

  • CR:変換無し
  • CR+LF:受信したCRをCR+LFに変換
  • LF:受信したLFをCR+LFに変換
  • AUTO:CRかLFをCR+LFに変換

とのこと。
バイナリで確認したが、受信データはCR+LFで改行していた。
ヘルプにも書いてあるが、「CR+LF」時にCR+LFを受信すると、CR+CR+LFに変換していることになるし、「AUTO」時は変換していないことになる。
じゃあ、CRだと変換しないからAUTOと同じになってもよさそうなんだけど・・・。

まあ、深くは追求すまい。


もう1つ。

戻ってきたHTMLを見ると、Googleの検索サイトに飛ばしているように見える。
なんでだろう?

GET / HTTP/1.1
Host: hiro99ma.blogspot.com

こっちにすると、hiro99ma.blogspot.jpの方を指示された。
そして、Hostをcomからjpにすると、だああああっと受信された。
そういうもんなのだね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。