概要
前回 WROOM が Mac で動作するところまで実施しました
今回は Arduino IDE で Wifi に接続するスケッチを作成して WROOM に書き込み実際に Wifi に接続するところまで確認してみます
また、この作業を実施すると WROOM が Arduino 化され前回実施した AT コマンドでの操作ができなくなるので注意してください
環境
- ESP-WROOM-02開発ボード
- Mac OS X 10.11.3
- Arduino IDE 1.6.7
- Arduino core for ESP8266 2.1.0
Arduino core for ESP8266 のインストール
まずは Arduino IDE に ESP8266 を開発するためのボードタイプを追加します
Arduino -> Preferences -> Settings -> Additional Boards Manager URLs
に以下を記載します
http://arduino.esp8266.com/stable/package_esp8266com_index.json
OK で追加した
ツール -> マイコンボード -> ボードマネージャー
から esp8266 で検索して新規のボードタイプをインストールします
インストールボタンをクリックするとダウンロードが始まります
プログレスバーが 100% になりダウンロードが完了すればインストール完了です
Arduino core for ESP8266 の設定
各種設定していきます
「ツール」から以下のように設定しましょう
- マイコンボード -> Generic ESP8266 Module
- Flash Mode -> QIO
- Flash Frequency -> 80MHz
- Upload Using -> Serial
- CPU Frequency -> 160MHz
- Flash Size -> 4M (3M SPIFFS)
- Debug port -> Disabled
- Debug Level -> None
- Reset Method -> nodemcu
- Upload Speed -> 115200
- シリアルポート -> それぞれの環境に合わせてポートを選択してください
- 書き込み装置 -> USBasp
を設定しました
細かい設定の意味までは確認できていませんが、とりあえず上記の設定で普通の Arduino スケッチを書き込むように WROOM にスケッチを書き込むことができるのを確認しています
スケッチの作成
Arduino IDE の設定ができたらスケッチを作成しましょう
全体は以下の通りです
#include <Arduino.h>
#include <ESP8266WiFi.h>
const char* ssid = "Please input your SSID";
const char* password = "Please input your SSID's password";
boolean continuousResponseFlag = true;
WiFiServer server(80);
WiFiClient client;
void responseHTML() {
client = server.available();
delay(1);
String req;
while (client) {
if (client.available()) {
req = client.readStringUntil('\n');
Serial.println(req);
if (req.indexOf("GET / HTTP") != -1) {
Serial.println("-----from Browser FirstTime HTTP Request---------");
Serial.println(req);
while (req.indexOf("\r") != 0) {
req = client.readStringUntil('\n');
Serial.println(req);
}
req = "";
delay(10);
// Headers
client.print(F("HTTP/1.1 200 OK\r\n"));
client.print(F("Content-Type:text/html\r\n"));
client.print(F("Connection:close\r\n\r\n"));
// Body
client.println(F("<!DOCTYPE html>"));
client.println(F("<html>"));
client.println(F("<font size=30>"));
client.println(F("Hello World"));
client.println(F("</html>\r\n"));
delay(1);
client.stop();
Serial.println("\nGET HTTP client stop--------------------");
req = "";
continuousResponseFlag = true;
}
}
}
}
void setup() {
Serial.begin(115200);
// Connect to WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
if (continuousResponseFlag == true) {
responseHTML();
} else if (client.available()) {
Serial.print(client.read());
}
delay(1);
}
スケッチを作成したら検証が成功するか確認しましょう
ポイント説明
setup()
で指定した SSID への Wifi 接続を試みます
接続が成功すると取得できた IP アドレスをシリアルモニタに出力します
指定した SSID やパスワードが間違っている場合はここで IP が表示されないので、SSID やパスワードがあっているかと、Wifi ルータの設定があっているかなど確認してください
loop()
でメインの処理を実行します
loop()
で responseHTML
メソッドを呼び続けます
responseHTML
はレスポンス用のクライアントオブジェクトを生成し HTTP のヘッダとボディを生成してレスポンスを返却します
今回は GET / HTTP
で GET アクセスのみレスポンスを返却するようにしています
GET リクエストがきたら、リクエスト情報をシリアルに 1 行ずつ出力し、その後 client.print
でヘッダ情報とボディ情報を返却します
1 リクエストごとにレスポンス用のクライアントオブジェクトは stop され、すぐに次のクライアントオブジェクトが生成されます
動作確認
検証が成功したら WROOM にアプリを書き込みます
書き込みは普通の Arduino スケッチと同じような書き込みます
シリアルモニタを起動しておきましょう
書き込み中は WROOM の TX と RX 用の LED が点滅します
点滅が終了しシリアルモニタに WROOM が取得した IP アドレスが表示されれば OK です
今回は WROOM にアクセスすると HTML を返却するようなアプリにしたので実際にブラウザでアクセスしてみましょう
こんな感じで「Hello World」が表示されば OK です
もちろんブラウザではなく curl コマンドなどでも OK です
シリアルモニタには以下のように表示されていると思います
最後に
ESP-WROOM-02 を Arduino 化してスケッチを作成し、そのスケッチを書き込むことで Wifi につながるところまで確認しました
あとは開発ボード上のピン情報を使って、センサなどと連携し、データが取得できたらクラウドに保存するなどができるといいなと思っています
あと、今回の作業をすると AT コマンドが使えなくなると記載しました
確かに起動すると Arduino スケッチが自動で起動してしまうので、シリアルモニタで AT コマンドは実行できなくなります
AT コマンドでも Wifi の設定などを WROOM に書き込めるので頑張ればできますが、プログラマブルに WROOM を操作できたほうが断然楽だし応用が効くので Arduino 化することをオススメします
Arduino 化を解除して出荷時の状態に戻すことってできるのだろうか・・・
Tips
ハマった点があるので紹介します
- ESP-WROOM-02 を Mac の USB ポートに接続してもシリアルポートとして認識しない
原因は不明ですが接続しても /dev/cu.usbserial-DA01OF0S
が現れずハマリました
解決できた方法は Mac の再起動だけでした
とりあえず発生したら再起動してみてください
なおシリアルポートとして認識していなくても WROOM 自体に書き込んだスケッチは問題なく動作していることは確認しました
0 件のコメント:
コメントを投稿