ESP8266
ESP8266EX

●開発ボード
▼ WeMos D1 mini V2仕様
▼ ESP-WROOM-02
▼ ESP-WROOM-02D

●Arduino IDEでの開発
▼ Arduino IDEの設定

●ESP8266チップ情報確認
下記のスケッチを使用してシリアル出力することができます。
▼ スケッチ例

●UART
UART0とUART1が使用できるが、UART1については送信のみとなる。また、設定できるピン番号が決まっている。
▼ スケッチ例

●ソフトウェアSerial
ソフト的にシリアル通信を実装することで上記のハード的なUARTとは別で通信を追加できます。
2ポートまでサポートしていますがその場合、ボーレートは57600bpsまでとなります。
▼ スケッチ例
▼ スケッチ例

●I2C
SDA、SCLはすべてのピンで使用可能です。
#include <Wire.h>

void setup(){
  Serial.begin(115200);
  Wire.begin();  //SDA=2, SCL=14
}

void loop() {
  Wire.requestFrom(0x21, 1);  //request 1 bytes from Slave ID #21
  while (Wire.available()) {
    byte b = Wire.read();
    Serial.println(b);
  }
  delay(500);
}
▼ スケッチ例

●SPI
3つのSPIがありそれぞれ、汎用SPI(スレーブ/マスター)、SDIO/SPI(スレーブ)、汎用HSPI(スレーブ/マスター)になります。
・4-Wires
GPIO16 CS(SS) —– CSB
GPIO14 SCLK —– SCK
GPIO13 MOSI(Master Output Slave Input) —– SDI (Slave Data Input)
GPIO12 MISO(Master Input Slave Output) —– SDO (Slave Data Output)

・3-Wire
GPIO14 SCK —– SCK
GPIO13 SD  —– SDA
GPIO15 CS  —– WS
▼ スケッチ例

●WiFi
ESP32とほぼ同等のスケッチで同様の機能が実現できます。
▼ スケッチ例
▼ スケッチ例

●PWM出力
ハード的には実装されておらずソフト的にハードウェアタイマからの割り込みを使用して実現しています。
スケッチ自体はArduinoと共通です。
▼ スケッチ例

●ADC
アナログ入力は1回路のみになり端子はA0となります。
分解能は10bit、入力電圧範囲は0V〜1.0Vまでです。
アッテネーターがないので、1V以上の電圧を入力する際は外部で抵抗分圧する必要があります。
void setup() {
   Serial.begin(115200);
}

void loop() {
    int val = analogRead(A0);
    Serial.println(val);
    delay(500); 
}

●赤外線通信 IrDA
IRremoteESP8266ライブラリを使って比較的簡単に使用できます。
▼ スケッチ例
▼ スケッチ例

●SPIFFS
ESP8266の内蔵フラッシュメモリを使用してファイルシステムを実現します。
SPIFFSを使うためにはArduino IDEの「ツール」→「Flash Size」でサイズを指定する必要があります。
例えば、Flush Size:"4M(3M SPIFFS)"と指定すると3MのSPIFFSが使えます。
▼ スケッチ例

●CPU動作クロック
ESP8266のCPU周波数は標準で80MHzになっていますが、160MHzに変更ができます。ただし、消費電力は増加します。
また、動作中でも80MHz、160MHそれぞれに切り替えができます。
system_update_cpu_freq(160);

●Deep Sleep使用方法
3種類のスリープモードがあり消費電力が最小なのはdeep-sleepモードになる。
WAKEピン(IO16) を RST ピンに繋いでおく必要がある。→ 指定時間経過後にリセットが実行され再起動する。
ただし、直接繋ぐと書き込み動作が不安定になるため、470Ω~1kΩの抵抗かダイオードを接続すると良い。 ダイオードの場合はアノード側をRST、カソード側をGPIO16に接続する。
DeepSleep後もデーターを保持しておきたい場合は、RTCメモリーを使用する。
領域は512バイトあり、電源投入時には不定な値が入っているので注意が必要。
//5分間スリープ μ秒で時間設定
ESP.deepSleep(5 * 60 * 1000 * 1000 , WAKE_RF_DEFAULT);

//RTC書込
ESP.rtcUserMemoryWrite(offset, &data1, sizeof(data1));
//RTC読込
ESP.rtcUserMemoryRead(offset, &data1, sizeof(data1));
▼ スケッチ例

ページトップへ戻る