ピン配置
- プログラムの書き込みのため、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() {
}
引用元: