LoginSignup
1
1

More than 3 years have passed since last update.

ESP-WROOM-02 の色々備忘録

Posted at

ピン配置

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

image.png

名称 働き
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/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1