ESP8266をArduinoとして使う

いまさらだが自分用まとめ

ESP8266とは?

ESP-WROOM-02のスペック

  • 32bit CPU 80MHz (ARMではない。懐かしのTensilica Xtensa!)
  • データRAM 80kB (SDKが約30kBを消費するため、ユーザが使えるのは約50kB)
  • SPIフラッシュ 4MB (SDKが約220kBを消費)
  • 3.3V駆動
  • GPIO x 11 (兼用ピン含む。一部制約あり)
  • SPI x 1, I2C x 1 (SPIとI2Cは一部ピン兼用のため同時使用不可)
  • UART x 1 (デバッグプリント用にTxDのみのUARTがもう一個ある)
  • 10ビットADC x 1



ピン表はこちらのものが見やすい。

ピン表

購入

モジュール単体では試作には使いにくいので、ブレークアウトボードとかを利用する

 【秋月】

 【スイッチサイエンス】



ここでは、共立電子の基板を使用した。
チップ抵抗のハンダ付けは初心者向きではないが、基板上でプルアップできる。

Arduino開発環境

  • まず、ArduinoIDE をインストールしておくこと (ここでは 1.6.9 を使用)
  • [ファイル] > [環境設定] > [Additional Boards Manager URLs:]に下記URLをコピペ
  • [ツール] > [ボード] > [ボードマネージャ] で [esp8266] をインストール
  • [ツール] > [ボード] で [Generic ESP8266 Module]を選択
    • Flash Mode : QIO
    • Flash Frequency : 40MHz
    • Upload Using : Serial
    • CPU Frequency : 80MHz
    • Flash Size : 4M(3M SPIFFS) (3MBをファイルシステムで使用 / 1MBをスケッチで使用)
    • Debug port : Disabled
    • Debug Level : None
    • Reset Method : nodemcu
    • Upload Speed : 115200
    • シリアルポート : USBシリアルのCOM番号(後述)
    • 書込装置 : USBasp

配線

配線

PCと接続するためにUSBシリアル変換基板を用い、電源もとりあえずここから取る。

  • 3V3 → 3.3V電源
  • EN → 10kΩでプルアップ
  • RST → 10kΩでプルアップ, タクトスイッチでGNDへ
  • TXD → USBシリアルのRXD
  • RXD → USBシリアルのTXD
  • GND → GND
  • IO0 → 10kΩでプルアップ, タクトスイッチでGNDへ
  • IO2 → 10kΩでプルアップ
  • IO15 → 10kΩでプルダウン

※写真の例ではブレークアウトボード裏面にプルアップ抵抗実装ずみ
※起動時のIO0, IO2, IO15のレベルによってモードが決定する

DIP IO0 IO2 IO15
UART Download Mode 0 1 0
Flash Startup Mode 1 1 0
SD-Card Boot Mode 0 0 1
IO0のスイッチを押したまま、RSTのスイッチを押して離すとファーム書き込みモードになる。

Lチカ

とりあえず、シリアル出力とLチカとサーボ制御とPWM出力を確認してみる。

#include <Servo.h>

Servo servo;

void setup() {
  Serial.begin(115200);
  pinMode(13, OUTPUT);  // IO13にLED
  servo.attach(12);     // IO12にサーボ
  servo.write(90);      // サーボを90°に
  analogWrite(14, 512); // IO14にPWM (10bitであることに注意)
}

void loop() {
  Serial.print("Hello, ");
  digitalWrite(13, HIGH);
  delay(1000);
  Serial.println("world!");
  digitalWrite(13, LOW);
  delay(1000);
}

Arduinoとしてプログラムできることが確認できた。肝心のWiFiはまた今度。