ESP8266をArduinoとして使う

目次
  1. 1. はじめに
    1. 1.1. 配線と起動モード
  2. 2. 機能解説
    1. 2.1. デジタル IO
      1. 2.1.1. デジタル出力
      2. 2.1.2. デジタル入力
    2. 2.2. アナログ出力
    3. 2.3. アナログ入力
    4. 2.4. タイミングと遅延
      1. 2.4.0.1. リセット後の経過時間取得
      2. 2.4.0.2. 遅延
  3. 2.5. シリアル通信
  • 3. GPIO pin まとめ
  • 4. 参考
  • ESP8266(ESP-WROOM-02)をArduinoとして使う方法
    Arduino core for ESP8266 の基本的な使い方

    はじめに

    配線と起動モード

    • 実行モード(Flash Boot Mode)
      書き込んだプログラムで起動します
    • 書き込みモード(UART Download Mode)
      プログラムが書き込めるようになります

    IO0 pinを
    HIGH でリセット → 実行モード
    LOW でリセット → 書き込みモード
    になります

    GPIO pinの名前 実行モード 書き込みモード
    GPIO0 IO0 HIGH LOW
    GPIO2 IO2 HIGH HIGH
    GPIO15 IO15 LOW LOW

    機能解説

    デジタル IO

    • GPIO 0〜15 → INPUTOUTPUTINPUT_PULLUP
      ※ただし、GPIO 6〜11はGPIOとして使用不可(↓参照)
    • GPIO 16 → INPUTOUTPUTINPUT_PULLDOWN_16
    • ピン割り込みの使用 → GPIO 0〜15 attachInterruptdetachInterrupt関数

    デジタルピン0〜15は、INPUT、OUTPUT、INPUT_PULLUPのいずれかです。ピン16はINPUT、OUTPUT、INPUT_PULLDOWN_16のいずれかです。起動時に、ピンはINPUTとして設定されます。

    デジタルピン6-11は、ほとんどのモジュール上のフラッシュメモリチップを接続するために使用されているため、この図には示されていません。 IOとしてこれらのピンを使用しようとすると、プログラムがクラッシュする可能性があります。

    ピン割り込みは、attachInterrupt、detachInterrupt関数でサポートされています。割り込みは、GPIO16を除く任意のGPIOピンに接続できます。

    デジタル出力

    IO13のLEDを点滅

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define LED 13
    void setup() {
    pinMode(LED, OUTPUT);
    }
    void loop() {
    digitalWrite(LED, HIGH);
    delay(1000);
    digitalWrite(LED, LOW);
    delay(1000);
    }

    デジタル入力

    IO2のスイッチを押している間、IO13のLEDが点灯

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #define LED 13
    #define SWITCH 2
    void setup() {
    pinMode(LED, OUTPUT);
    pinMode(SWITCH, INPUT);
    }
    void loop() {
    if (digitalRead(SWITCH) == LOW) {
    digitalWrite(LED, HIGH);
    } else {
    digitalWrite(LED, LOW);
    }
    }

    アナログ出力

    • GPIO 0〜16で使用可 (※GPIO 6〜11を除く)
    • analogWrite(pin, value)でON
      value → 0~1023
    • analogWrite(pin, 0)でOFF

    analogWrite(pin、value)指定されたピンでソフトウェアPWMをイネーブルにします。 PWMはピン0〜16で使用できます。ピンのPWMをディセーブルにするには、analogWrite(pin、0)を呼び出します。 値は0からPWMRANGEまでの範囲で指定できます。デフォルトは1023です。

    IO13のLEDが徐々に明るくなるサンプルコード

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define LED 13
    void setup() {
    pinMode(LED, OUTPUT);
    }
    void loop() {
    for (int i = 0; i < 1023; i++) {
    analogWrite(LED, i);
    delay(3);
    }
    }

    アナログ入力

    analogRead(A0)で読み取り

    ADC_MODE(ADC_VCC);を関数の外に定義で、電源電圧の読み取り

    • 入力電圧範囲は0〜1.0V

     ADCピンに印加される外部電圧を読み取るには、analogRead(A0)を使用します。 入力電圧範囲は0〜1.0Vです。

    TOUT(A0)のAD変換値を読み取る

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int value;
    void setup() {
    Serial.begin(115200);
    }
    void loop() {
    value = analogRead(A0);
    Serial.println(value);
    delay(100);
    }

    0~1023が得られるはずですが、
    以下のようにつなげて読み取った所、6~1024という値が得られました

    タイミングと遅延

    • リセット後の経過時間取得

      • ミリ秒 → millis()
      • マイクロ秒 → micros()
    • 遅延

      • ミリ秒 → delay()
      • マイクロ秒 → delayMicroseconds()

    millis()およびmicros()は、それぞれリセット後に経過したミリ秒数およびマイクロ秒数を返します。

    delay(ms)は、指定したミリ秒間スケッチを一時停止し、WiFiおよびTCP / IPタスクを実行できるようにします。 delayMicroseconds(us)は、指定されたマイクロ秒数で一時停止します。

    シリアル通信

    • Serial.begin()をsetup関数に定義
    • Serial.swap()で使用するピンの組み合わせを変更
      GPIO1(TX) & GPIO3(RX) ↔ GPIO15(TX) & GPIO13(RX)
    選択 TX RX
    default GPIO1(TXD) GPIO3(RXD)
    Serial.swap()で変更 GPIO15(IO15) GPIO13(IO13)

    ※GPIO(pin Name)

    シリアルはUART 0を使用し、GPIO 1(TX)ピンとGPIO 3(RX)ピンにマッピングされます。 Serial.beginの後にSerial.swap()を呼び出すことで、SerialはGPIO 15(TX)とGPIO 13(RX)を再マッピングできます。スワップを再度呼び出すと、UART 0がGPIO 1とGPIO 3にマップされます。

    GPIO pin まとめ

    GPIO pinの名前 デジタル出力 デジタル入力 アナログ出力 アナログ入力 備考
    GPIO0 IO0 - 起動時に使用
    GPIO1 TXD - 書き込みに使用
    GPIO2 IO2 - 起動時に使用
    GPIO3 RXD - 書き込みに使用
    GPIO4 IO4 - -
    GPIO5 IO5 - -
    GPIO12 IO12 - -
    GPIO13 IO13 - -
    GPIO14 IO14 - -
    GPIO15 IO15 - 起動時に使用
    GPIO16 IO16 〇 ※1 - -
    A0 TOUT - - - -

    ※1 割り込みは不可

    ESP-WROOM-02 | データシート

    Arduino core for ESP8266 | referenceの図

    参考

    ESP-WROOM-02 | データシート
    Arduino core for ESP8266 | Documentation
    ESP-WROOM-02 Arduino互換ボードのGPIOはこうやって使う

    コメント