ESP8266モジュールをArduinoとして使う

最近私の中で話題沸騰中の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ドルくらいします。
私はもちろん・・・自作します。
ESP8266ブレークアウト

Arduino IDEでプログラムを書き込む

設定等

書き込み回路は下図のようになります。
書き込み回路
GPIO0が肝のようでこの端子をGNDに落とすと書き込みモードに入るようです。

Arduino IDEの設定は次のようにします。
ボードはGeneric ESP8266 boardを選択します。
ボード選択
なんか一覧に色々ありますけど・・・

書き込み装置
書き込み装置はesptoolにします。

Lチカプログラム

とりあえず、ArduinoのLチカスケッチを書き込んでみます。

void setup() {
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);
  delay(500);
  digitalWrite(0, LOW);
  delay(500);
}

0はESP8266のGPIO0ピンになります。
その他は普通のArduinoのスケッチと何ら変わりません。

実際に書き込む

書き込みは次のようにします。

  1. GPIO0をGNDに落とす
  2. Arduino IDEの書き込みボタンをクリック
  3. 書き込みが終わったらGPIO0をGNDから離す

こんな感じです(適当)

実際の書き込み回路はこんな感じになっています。
ESP8266 ブレッドボード書き込み回路_mini

書き込みがうまくいかない時は、書き込む直前に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で接続できると、シリアルモニタにはこんな感じにずらーっと文字が出てきます。
Adafruit接続
Wi-Fiと同時にシリアル通信もできちゃいました。


ESP8266はArduino IDEの他にもプログラムが出来る方法があるようですが、そちらはIDEなどがなく難しかったです・・・
気になった方はNodeMCUやLuaLoaderやesptoolなどで検索してみてはいかがでしょうか。

これだけで色々出来るのは本当にすごいですね。

スポンサーリンク

Leave a Comment

  • Pingback: ESP12単体でwifi connection | junkhack

  • JunkHack

    参考にさせていただきました! 自分もESP8266が熱いです。面白いチップですね。今気がついたんですが、このフラッシュメモリ、512KBもあるんですね。また遊びにきますね〜

  • アキラ

    初めまして
    直前電源入れたり、
    espを自由に操っておられ
    素晴らしい

    私は本の通りにしても、
    旨く行かなくて、色々当たって
    すでに8266が三つ目でまだ動かず

    まだ勉強たりません

    ひたすら頑張るしかないかもしれませんが、
    何かアドバイスを頂けるとありがたいです

    1. たまさ Post author

      アキラ様
      ESP8266の問題で一番多いは電源周りです。
      大容量の電解コンデンサ(1000uF程度)を近くに接続したり、
      それでもだめなら高速過渡応答に優れたレギュレータを使うなど工夫が必要です。
      もしかしたら既に対策されているかもしれませんが、一度ご検討ください。