ESP-13を使ってみる

実行環境を確認する


前回、Arduino-IDEを使ったESP-13(ESP-WROOM-02)への スケッチ書き込みを紹介しました。
そこで、今回はスケッチ実行時の環境を確認してみます。

こ ちらのページの「Minimal Hardware Setup for Running only」では
VCC VCC(3.3V)
GND GND
GPIO_0 PullUp
GPIO_15 PullDown
CH_PD PullUp
と書かれています。

この結線ではスケッチが動いたり、動かなかったり安定しませんでした。
そこでRESETのPullUpを追加したところ、安定して起動するようになりました。
VCC VCC(3.3V)
GND GND
GPIO_0 PullUp
GPIO_15 PullDown
CH_PD PullUp
RESET PullUp

実行時にGPIO_2はオープンで問題ないですが、RESETのPullUpは必要です。
また、電源(特に電流)にはかなりシビアで、500mA以上ないと安定して動きません。
USB-TTL変換モジュールからの3.3V給電では動きません。
USBの5Vを3.3Vに変換して使うときは、レギュレータ(AMS1117がよく使われます)は慎重に選ぶ必要が有ります。

GPIOとして実際に使えるのは(Tx/Rxを除いて)以下の9本で す。
・GPIO_0(※)
・GPIO_2(※)
・GPIO_4
・GPIO_5
・GPIO_12
・GPIO_13
・GPIO_14
・GPIO_15(※)
・GPIO_16

以下のスケッチで、これらのピンを使ったLチカが動くことを確認しました。
(※)GPIO_0、GPIO_2、GPIO_15は起動モードの選択ピンとして使われます。
PullUpやPullDownしておく必要がありますが、普通に出力ポートとして使うことができます。
/*
 * Blink LED with ESP-13
 */

int pins[] = { 0, 2, 4, 5, 12, 13, 14, 15, 16 };
int numpins;

void setup() {
  delay(1000);
  Serial.begin(9600);
  numpins=sizeof(pins)/4;
  Serial.print("Start numpins=");
  Serial.println(numpins);
  for (int i=0;i<numpins;i++) {
    pinMode(pins[i], OUTPUT);
    digitalWrite(pins[i], LOW);
  }
}

void loop() {
  static int pin=0;

  Serial.print("pin=");
  Serial.println(pins[pin]);
  for (int i=0;i<numpins;i++) {
    digitalWrite(pins[i], LOW);
  }
  digitalWrite(pins[pin], HIGH);
  pin++;
  if (pin == numpins) pin=0;
  delay(1000);
}

以下のスケッチで、これらのピンをディジタル入力で使える事を確認しました。
(※)GPIO_0、GPIO_2、GPIO_15は起動モードの選択ピンとして使われます。
PullUpやPullDownしておく必要がありますので、入力ピンとして使う場合は注意する必要があります。
WeMosではスケッチ書き込み時に、こちらの回路 で、これらのピンのPullUp/PullDownを自動的に切り替えています。
PullUp/PullDownを気にすることなく、全てのピンをディジタル入力で使うことができます。
*
 * Digital Read with ESP-13
 */

int pins[] = { 4, 5, 12, 13, 14, 16 };
int numpins;

void setup() {
  delay(1000);
  Serial.begin(9600);
  numpins=sizeof(pins)/4;
  Serial.print("Start numpins=");
  Serial.println(numpins);
  for (int i=0;i<numpins;i++) {
    pinMode(pins[i], INPUT);
  }
}

void loop() {
  static int pin=0;
  int data;

  Serial.print("pin=");
  Serial.print(pins[pin]);
  data=digitalRead(pins[pin]);
  Serial.print(" data=");
  Serial.println(data);
  pin++;
  if (pin == numpins) pin=0;
  delay(1000);
}

次回はSPIを試してみます。