WeMosを使ってみる

GPIO機能


ここからはWeMosのGPIO機能を紹介します。
WeMosにはD0からD8の8個のディジタルピンと、A0のアナログピンがあります。
ピンアサインはこちらの ページがきれいでわかりやすいです。
ArduinoのIDEでGPIO操作をするときは、「Arduino」と書かれている青色のピン番号を使います。
例えばD1とD2を使う場合のピン番号は、5と4になります。

/*
 * WeMos LED blink
 */
#define out1Pin 4  // GIO4
#define out2Pin 5  // GIO5

int ledState = LOW;     

unsigned long previousMillis = 0;
const long interval = 1000;

void setup() {
  pinMode(out1Pin,OUTPUT);
  pinMode(out2Pin,OUTPUT);
  digitalWrite(out1Pin,LOW);
  digitalWrite(out2Pin,LOW);
}

void loop() {
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      digitalWrite(out1Pin,HIGH);
      digitalWrite(out2Pin,LOW);
      ledState = HIGH;
    } else {
      digitalWrite(out1Pin,LOW);
      digitalWrite(out2Pin,HIGH);
      ledState = LOW;
    }
  }
}

また、ESP-12起動時のブートモード選択に使われる GPIO_0/GPIO_2/GPIO_15 は、普通のGPIOとして使えます。
これらのGPIOをPullUp/PullDownしておく必要はありません。
何らかの方法でこれらのピンのPullUp/PullDownを動的に設定しているのでしょう。
/*
 * 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ののI/Oについてこ ちらのページに簡潔にまとめられています。
アナログ入力以外はWeMosにも当てはまると思います。
また、ESP8266のスケッチで注意する点については、こ ちらのページに書かれています。
ざっくりと翻訳すると
・アナログピンには最大1Vまで接続できる。→WeMosは内部に分圧回路を持っていて最大3.3Vまで接続できます
・長いブロックされたループを使うとクラッシュする。
・長いループがあるときはループの中でyield()を使う。
・Wifiはすべてのスケッチで使える。
・i2cを使うときはWireライブラリを使うが以下の違いがある。
ESP8266にはハードウェアi2cピンが無い。
SDAとSCLには任意のピンを指定することができる。
・SPIを使うときはSPIライブラリを使う。
SPI.setFrequence関数が追加されていてクロックダウンする必要がある。
SPIのMISO,MOSI,SCLKのピンは固定されている。
というようなことが書かれていますので、一度は目を通すことをお勧めします。

これらを踏まえて、ここからはWeMosでのGPIO操作を紹介していきます。
なおWeMosには3.3Vと5Vの電源供給ピンがあります。
USBから給電しているときは、ここから電源を取り出すことができますが、少し低めの値になっています。
A/Dコンバーターなど、基準電圧を必要とする場合には、注意が必要です。




続く....