ESP-WROOM-02 の色々備忘録


ピン配置

  • プログラムの書き込みのため、3つのピンをPULL-UP/DOWNする必要あり。
  • IO0,IO2,IO15は他の用途に利用しないのがおすすめ。

名称 働き
3V3 3.3V電源(VDD)
EN ChipEnablePin(Active HIGH)
RST リセットピン。
TOUT アナログ入力ピン。0V(0)〜1.0V(1024)まで
RXD UART0_RXD/GPIO3
TXD UART0_TXD/GPIO1
名称 働き Digital In Digital Out Analog In Analog Out
IO0 GPIO0(プログラム書き込みモード選択に使用) - - - -
IO2 GPIO2(ブート時は3.3Vにプルアップ) - - - -
IO4 GPIO4 / SDA
IO5 GPIO5 / SCL
IO12 GPIO12 / MISO
IO13 GPIO13 / MOSI
IO14 GPIO14 / CLK
IO15 GPIO15 / CS(ブート時はGNDにプルダウン) - - - -
IO16 GPIO16

引用元:
- http://eleclog.quitsq.com/2015/08/esp-wroom-02.html
- https://synapse.kyoto/hard/ESP-WROOM-02_blink/page003.html
- https://qiita.com/umi_kappa/items/ac3d37db44a2dcfe71fd

チップ情報/フラッシュサイズの確認

  • 以下のコードでフラッシュメモリの容量を確認して、書き込み設定のFlashSizeでSPIFFの必要量を指定しましょう。
void setup(void) {
  Serial.begin(115200);

  Serial.print("CPU Frequency = ");
  Serial.print(ESP.getCpuFreqMHz());
  Serial.println(" MHz");

  Serial.print("ChipID = ");
  Serial.println(ESP.getChipId(), HEX); //MACアドレスの下位3バイト

  Serial.print("Flash Chip IDE Size = ");
  Serial.print(ESP.getFlashChipSize()); //Arduino IDE 設定の Flash Size になる
  Serial.println(" byte");

  Serial.print("Flash Chip Real Size = ");
  Serial.print(ESP.getFlashChipRealSize()); //ESP-WROOM-02 内蔵最大 Flash Size になる
  Serial.println(" byte");

  Serial.print("Free Heap Size = ");
  Serial.println(ESP.getFreeHeap());

  Serial.print("Free Sketch Size = ");
  Serial.println(ESP.getFreeSketchSpace());

  Serial.print("Sketch Size = ");
  Serial.println(ESP.getSketchSize());  
}  

アナログ入力

  • アナログ入力はTOUTピンのみ。最大1.0Vまでなのに注意。
  • system_adc_read()という関数を使って、アナログ値を取得します。
extern "C" {
  #include "user_interface.h"
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int res = system_adc_read();
  Serial.println(res);
}

I2C

  • I2C 用の端子は、ESP8266 データシート上では IO2/IO14 となっているものの、pins_arduino.hで IO4/IO5 として定義されているので、Wire.begin()をそのまま(ピン指定無し)で使用する場合は、IO4=SDA,IO5=SCLとなります。
  • 使用するピンを変える場合は、Wire.begin(SDA,SCL)という形で、ピンを指定します。
void setup() {
  Serial.begin(115200);
  Wire.begin(); // = Wire.begin(4, 5);
}

タイマー

  • ESPで最も使いやすいタイマーはTickerです。ライブラリをインクルードして使用します。
  • 時間はmsec単位で指定します。
#include <Ticker.h>

Ticker ticker1;

void ticker1Loop() {
  Serial.print("Loop!");
}

void setup() {
  Serial.begin(115200);
  ticker1.attach_ms(1000, ticker1Loop); //連続使用
  ticker1.once_ms(1000, your_loop1);    //1回のみ
}

void loop() {
  ticker1.detach(); //タイマー停止する場合
}

引用元:https://qiita.com/exabugs/items/34aab51eb2d35207629b

スリープ

  • 3種類のスリープが存在。
  • Deep-Sleep が最も低消費電力だが、時限タイマーまたはスイッチでの復帰のみ。
  • Modem-Sleep / Light-Sleep は無線通信などの割り込みでも復帰可能。
Parameters current
Modem-Sleep 15,000 uA
Light-Sleep 900 uA
Deep-Sleep 10 uA

1.Modem-Sleep / Light-Sleep

  • setup 関数内で wifi_set_sleep_type( type ) を実行する。
  • 実行後は適当なタイミングで、自動的にスリープと目覚めを繰り返す。
extern "C" {
#include <user_interface.h>
}

void setup() {
  // ... Wi-Fi設定等
  wifi_set_sleep_type(MODEM_SLEEP_T);
  //wifi_set_sleep_type(LIGHT_SLEEP_T);
}

2.Deep Sleep

  • 指定時間経過後にリセットが実行され、再起動がかかる。消費電力はダントツで低い。
  • リセット実行のために(IO16がGNDに落ちるため)IO16をRST(リセット)に繋いでおく必要がある。
  • スリープ時間はマイクロ秒で指定する。
  • 消費電流はWiFi接続からデータ送信等までは70〜80mA程度の電流が流れ、DeepSleepに入ると0.9mA程度に。
void setup() {
  // ... Wi-Fi設定等
  // setup の末尾に記述
  ESP.deepSleep(60 * 1000 * 1000); //60秒(1分に1回)でスリープ復帰する場合
}

void loop() {
}

引用元:
- https://qiita.com/exabugs/items/9edf9e2ba8f69800e4c5
- https://ambidata.io/blog/2017/06/05/esp8266-current/