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

RESETのPullUpは必要です。

実際の回路は以下のようになります。
ESP-13のパーツ図が無かったので、同じピン数の別のパーツを流用しています。
抵抗は全て10Kです。
ESP-13

以下のスケッチで GPIO_2 GPIO_4 GPIO_5 GPIO_12 GPIO_13 GPIO_14 GPIO_16 へ出力できる事を確認しました。
/*
 * Blink LED with ESP-13
 */

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

void setup() {
  delay(100);
  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);     // initialize as output
    digitalWrite(pins[i], LOW);   // turn off LED with voltage LOW
  }
}

void loop() {
  static int pin=0;

  Serial.print("pin=");
  Serial.println(pin);
  for (int i=0;i<numpins;i++) {
    digitalWrite(pins[i], LOW);   // turn off LED with voltage LOW
  }
  digitalWrite(pins[pin], HIGH);  // turn on LED with voltage HIGH
  pin++;
  if (pin == numpins) pin=0;
  delay(1000);                    // wait one second
}

以下のスケッチで GPIO_2 GPIO_4 GPIO_5 GPIO_12 GPIO_13 GPIO_14 GPIO_16 から入力できる事を確認しました。
/*
 * GPIO Input with ESP-13
 */

int pins[] = { 2, 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);                    // wait one second
}

なお、こちらで紹介しているWeMosはESP-12ですが、 GPIO_0/GPIO_15 を使う以下のスケッチが普通に動きます。
/*
 * Mode切り替えのピンを使ったBlink
 */

#define EXTERNAL_LED1  0
#define EXTERNAL_LED2  2
#define EXTERNAL_LED3 15

void setup() {
  Serial.begin(9600);
  delay(10);
  pinMode(EXTERNAL_LED1, OUTPUT);
  pinMode(EXTERNAL_LED2, OUTPUT);
  pinMode(EXTERNAL_LED3, OUTPUT);
  digitalWrite(EXTERNAL_LED1,LOW);
  digitalWrite(EXTERNAL_LED2,LOW);
  digitalWrite(EXTERNAL_LED3,LOW);
}

void loop() {
  static int flag=0;

  if (flag == 0) {
    digitalWrite(EXTERNAL_LED1, HIGH);
    digitalWrite(EXTERNAL_LED2, LOW);
    digitalWrite(EXTERNAL_LED3, LOW);
  } else if (flag == 1) {
    digitalWrite(EXTERNAL_LED1, LOW);
    digitalWrite(EXTERNAL_LED2, HIGH);
    digitalWrite(EXTERNAL_LED3, LOW);
  } else if (flag == 2) {
    digitalWrite(EXTERNAL_LED1, LOW);
    digitalWrite(EXTERNAL_LED2, LOW);
    digitalWrite(EXTERNAL_LED3, HIGH);
  }
  flag++;
  if (flag > 2) flag = 0;
  delay(1000);
}

試しにESP-13でGPOI_15を PullDown や N/C にしてみましたが起動できませんでした。
WeMosのスケッチ書き込み時、GPIO_0にLEDをつけておくと、点灯(PullUp)しますので、
WeMosでは何らかの方法でこれらのピンのPullUp/PullDownを自動的に設定しているのでしょう。

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