"WROOM-02のATモードでWiFI接続"、"ArduinoでWiFi接続してみる"の続きで、ESP-WROOM-02でATコマンドを用いてWebサーバーを構築します。 Arduinoを直接使う事はないので、ESP-WROOM-02単体で設定しても問題ありません。 まずは、WiFiモードの確認。
AT+CWMODE? +CWMODE:1 OK
+CWMODE:1(ステーションモード)になっています。 自分で設定してあるので当たり前何ですけどね。 WiFiの接続とIPアドレスの確認。
AT+CIFSR +CIFSR:STAIP,"XXX.XXX.XXX.XXX" +CIFSR:STAMAC,"XX:XX:XX:XX:XX:XX" OK
※Xには、WiFi環境によって任意の数値が入ります
Webサーバーの設定
接続数制限の有無を設定。
設定コマンド | |
---|---|
コマンド | AT+CIPMUX=<mode> |
戻り値 | OK |
パラメータ | <mode>:
|
注釈 |
|
例 | AT+CIPMUX=1 |
現在の設定内容を確認。
AT+CIPMUX? +CIPMUX:0 OK
+CIPMUX:0(単一接続)に設定されているのが確認出来ました。 これを複数接続にするには、"透過送信が無効(AT+CIPMODE=0)"である必要があるようなので、その辺りも調べてみます。+CIPMODEはクエリコマンドでの実行もできるので確認。
AT+CIPMODE? +CIPMODE:0 OK
下記で詳細を確認。
設定コマンド | |
---|---|
コマンド | AT+CIPMODE=<mode> |
戻り値 | OK |
パラメータ | <mode>:
|
注釈 |
|
例 | AT+CIPMODE=1 |
"通常送信モード"に設定されているので、複数接続の要件は問題ない事が確認できました。 続いて、複数接続(AT+CIPMUX=1)に設定します。
AT+CIPMUX=1 OK
TCPサーバーを作成・・・する前に、複数接続の最大数を確認しておきます。
設定コマンド | |
---|---|
コマンド | AT+CIPSERVERMAXCONN=<num> |
戻り値 | OK |
パラメータ | <num>: TCPまたはSSLサーバーへの接続が許可されるクライアントの最大数、範囲: [1, 5] |
注釈 | この構成を設定するには、サーバーを作成する前にコマンドAT+CIPSERVERMAXCONN=<num>を呼び出す必要があります。 |
例 | AT+CIPMUX=1 AT+CIPSERVERMAXCONN=2 AT+CIPSERVER=1,80 |
"+CIPSERVERMAXCONN"をクエリコマンドで実行。
AT+CIPSERVERMAXCONN? +CIPSERVERMAXCONN:5 OK
最大数の"5"に設定されています。 "5"つも接続する予定もないので、"例"にならい"2"に設定しておきます。
AT+CIPSERVERMAXCONN=2 OK
以降で、いよいよTCPサーバーを作成します。
Webサーバーの起動
設定コマンドを確認。
設定コマンド | |
---|---|
コマンド | AT+CIPSERVER=<mode>[,<port>] |
戻り値 | OK |
パラメータ |
|
注釈 |
|
例 | AT+CIPMUX=1 AT+CIPSERVER=1,1001 |
サーバーを作成するので<mode>は"1"、<port>は"80"を指定します。
AT+CIPSERVER=1,80 OK
ブラウザから作成したサーバーのIPアドレスにアクセスすると、シリアルモニタが以下のような表示に変わります。(Macの場合です。)
0,CONNECT 1,CONNECT +IPD,0,XXX:GET / HTTP/1.1 Host: XXX.XXX.XXX.XXX Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_XX_X) AppleWebKit/XXX.XX (KHTML, like Gecko) Chrome/XX.X.XXXX.XXX Safari/XXX.XX Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 Accept-Encoding: gzip, deflate Accept-Language: ja,en;q=0.9,und;q=0.8
シリアルモニタに表示されている、上記の赤字"0"は"link ID"となります。試しに別にブラウザを開いて再度アクセスすると"link ID"の個所が"1"となった表示を確認出来るかと思います。 このままではブラウザは読み込み状態のままで何も表示されません。 ブラウザに表示を行うには、以下の設定コマンドを用いてHTML書式の文字列を送信する必要があります。
設定コマンド | |
---|---|
コマンド |
|
戻り値 | 指定された長さのデータを送信します。 設定コマンドの後に、return > をラップします。シリアルデータの受信を開始します。<length> で定義されたデータ長に達すると、データの送信が開始されます。 接続を確立できないか、データ送信中に中断した場合、システムは次の値を返します。: ERROR データが正常に送信された場合、システムに戻ります: SEND OK 失敗した場合、システムに戻ります: SEND FAIL |
パラメータ |
|
<H1>Hello Arduino!</H1>を表示してみます。 <link ID>は0で、表示する文字列は、23byteなので、
AT+CIPSEND=0,23 OK >
を送信して>が戻ってきたら、 さらに、"<H1>Hello Arduino!</H1>"を送信。
busy s... Recv 23 bytes SEND OK
ブラウザに、
と表示された事が確認できたでしょうか? ブラウザに上記の文字が表示された後も、ブラウザは読み込み状態のままなので接続を閉じる必要があります。 TCP / UDP / SSL接続を閉じるためのコマンドを確認してみましょう。
設定コマンド | 実行コマンド | |
---|---|---|
コマンド | AT+CIPCLOSE=<link ID> | AT+CIPCLOSE |
戻り値 | OK | |
パラメータ | <link ID>: 接続を閉じる対象のID。IDが5の場合、全ての接続が閉じられます。(サーバーモードでは、ID 5は無効となります) |
- |
どちらのコマンドも、複数接続(+CIPMUX=1)で設定されている事が前提となります。設定コマンドでは<link ID>を指定して接続を閉じ、実行コマンドでは全ての接続を閉じます。 ここでは、設定コマンドで<link ID>を指定して実行してみます。
AT+CIPCLOSE=0 0,CLOSED OK 1,CLOSED 0,CONNECT +IPD,0,XXX:GET /favicon.ico HTTP/1.1 Host: XXX.XXX.XXX.XXX Connection: keep-alive User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_XX_X) AppleWebKit/XXX.XX (KHTML, like Gecko) Chrome/XX.X.XXXX.XXX Safari/XXX.XX Accept: image/webp,image/apng,image/*,*/*;q=0.8 Referer: http://XXX.XXX.XXX.XXX/ Accept-Encoding: gzip, deflate Accept-Language: ja,en;q=0.9,und;q=0.8
以上が、Webサーバーを構築する際の一連の流れとなります。 Arduinoの出番は全くありませんが、Webサーバーの設定はフラッシュメモリへ保存されないので、ここで出てきた一連の操作をArduinoのスケッチとして書き込む必要があります。 やっとArduinoの出番ですが、長くなったのでここまで。
0 件のコメント:
コメントを投稿