最近私の中で話題沸騰中のESP8266モジュールでようやくLチカができました。
以前はArduinoとESP8266モジュールで連携してWi-Fi接続する形でしたが、今回はそのモジュール単体でなんでもしちゃいます。
今回はその方法を紹介したいと思います。
スポンサーリンク
用意するもの
- ESP8266モジュール x1
- USBシリアル変換器 x1
- Arduino IDE for ESP8266 v1.6.1
ハードウェアとしてはESP8266モジュール本体と書き込み用のUSBシリアル変換器のみです。
今回、ESP8266モジュールはESP-12を使います。
ESP8266はだいぶ流通してきたみたいでAmazonなんかでも買えるみたいです。
ちょっと高いですけどね。
私はAliexpressで1つあたり300円くらいで買いました。
IDEは下記のURLからダウンロードできます。
現在は専用のIDEを使わず、標準のArduino IDEのボードマネージャーからインストールするようになっています。
ESP8266モジュールをブレッドボードで使えるようにする
ESP8266モジュールはブレッドボードでは使いにくいです。
ESP-12は2mmピッチですのでそのままではユニバーサル基板でさえ入りません。
ブレークアウト基板はAdafruitでも発売されているのでそれを買うか、自分で作るかです。
基板にESP8266もくっついていますが10ドルくらいします。
私はもちろん・・・自作します。
Arduino IDEでプログラムを書き込む
設定等
書き込み回路は下図のようになります。
GPIO0が肝のようでこの端子をGNDに落とすと書き込みモードに入るようです。
Arduino IDEの設定は次のようにします。
ボードはGeneric ESP8266 boardを選択します。
なんか一覧に色々ありますけど・・・
Lチカプログラム
とりあえず、ArduinoのLチカスケッチを書き込んでみます。
void setup() { pinMode(0, OUTPUT); } void loop() { digitalWrite(0, HIGH); delay(500); digitalWrite(0, LOW); delay(500); }
0はESP8266のGPIO0ピンになります。
その他は普通のArduinoのスケッチと何ら変わりません。
実際に書き込む
書き込みは次のようにします。
- GPIO0をGNDに落とす
- Arduino IDEの書き込みボタンをクリック
- 書き込みが終わったらGPIO0をGNDから離す
こんな感じです(適当)
スポンサーリンク
書き込みがうまくいかない時は、書き込む直前にESP8266に電源を入れるようにしたらいいと思います。
書き込みがうまくいっても動かない時は、GPIO0がGNDに落ちている時にRESET端子をGNDに落としてみたらいいかもしれません。
書き込みできたらGPIO0にLEDを接続して確認します。
とりあえずこれでLチカはできるはずです。
Wi-Fi接続プログラム
次にESP8266モジュールの醍醐味であるWi-Fi接続のプログラムを書き込んで試してみます。
/* * Simple HTTP get webclient test */ #include <ESP8266WiFi.h> const char* ssid = "yourssid"; const char* password = "yourpassword"; const char* host = "www.adafruit.com"; void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); 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"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } int value = 0; void loop() { delay(5000); ++value; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // We now create a URI for the request String url = "/testwifi/index.html"; Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); }
上記のスケッチはSSIDやパスワードが設定されていないので
const char* ssid = "yourssid"; const char* password = "yourpassword";
この部分は適宜変更して下さい。
Wi-Fiで接続できると、シリアルモニタにはこんな感じにずらーっと文字が出てきます。
Wi-Fiと同時にシリアル通信もできちゃいました。
ESP8266はArduino IDEの他にもプログラムが出来る方法があるようですが、そちらはIDEなどがなく難しかったです・・・
気になった方はNodeMCUやLuaLoaderやesptoolなどで検索してみてはいかがでしょうか。
これだけで色々出来るのは本当にすごいですね。
スポンサーリンク
Pingback: ESP12単体でwifi connection | junkhack
参考にさせていただきました! 自分もESP8266が熱いです。面白いチップですね。今気がついたんですが、このフラッシュメモリ、512KBもあるんですね。また遊びにきますね〜
初めまして
直前電源入れたり、
espを自由に操っておられ
素晴らしい
私は本の通りにしても、
旨く行かなくて、色々当たって
すでに8266が三つ目でまだ動かず
まだ勉強たりません
ひたすら頑張るしかないかもしれませんが、
何かアドバイスを頂けるとありがたいです
アキラ様
ESP8266の問題で一番多いは電源周りです。
大容量の電解コンデンサ(1000uF程度)を近くに接続したり、
それでもだめなら高速過渡応答に優れたレギュレータを使うなど工夫が必要です。
もしかしたら既に対策されているかもしれませんが、一度ご検討ください。