WiFi 機能を持ったArduino IDEで使用可能なIoT デバイスとして、良く判らなかったのでアマゾンでESP32S とESP8266 それぞれ2枚セットを購入。
ESP32S が1,380円、ESP8266 が1,190円で価格差が殆ど無かった。
この程度の価格差ならば、ESP32S の方が技的マークがしっかりと印刷されているし、性能もESP8266 に比べてかなり高いのでESP32S の方が良いと思う。
これらの製品を具体的にどう呼べば良いかが不明だが、同じアーキテクチャ(CPUチップ)でもピン配置が異なる製品も多く、ネット上の情報も様々で実際にやって見なければ判らない事も多い。
ESP32Sのデメリット
– 対策をしないと、書き込み時ボタン操作をしないとエラーとなる
– ブレッドボード上で幅が1列分ESP8266 より広い
– 消費電力はおそらくESP32S の方が大きい
ここでは私が購入した製品について確認できた事柄を備忘録として記録しておく。
Arduino IDE定義
Arduino IDE では、ボードタイプとして下記をそれぞれ選択して問題無く使用できている。
ESP32S – ESP32 Dev Module
ESP8266 – NodeMCU 1.0 (ESP-12E Module)
それぞれボードを選択するとArduino IDEにて自動的に下記の定義が行われるので、同じソースから各開発ボード向けにコンパイルする事が可能となっている。
ESP32S – ESP32
ESP8266 – ESP8266
例: ESP32S とESP8266 でインクルードしてくるファイルが違う場合
/*
// WiFi Network
*/
#ifdef ESP8266
#include <ESP8266WiFi.h>
#include<time.h>
#endif // ESP8266
#ifdef ESP32
#include <WiFi.h>
#endif // ESP32
I2C(IIC、Inter-Integrated Circuit) バス
I2C インタフェースは電源系を除いて、実質2本の信号線を繋いで行くだけで非常に簡単に使用できるバスで、多くのデバイスにてI2C がサポートされているので一番多く使っている。
開発ボードのどの信号ピンを使えば良いかを最初悩んだが、結局デフォルトと思われる信号ピンを使う事によって問題無く使用できてきる。
/*
// CPU ESP32 (for I2C)
*/
#ifdef ESP32
const int sda = 21; // ボード表面印刷 D21
const int scl = 22; // ボード表面印刷 D22
#endif // ESP32
/*
// CPU ESP8266 (for I2C)
*/
#ifdef ESP8266
const int sda = D2; // ボード方面印刷 D2 (意味:GBIO4)
const int scl = D1; // ボード表面印刷 D1 (意味:GPIO5)
#endif // ESP8266
こうしておけば各種ライブラリーでSCL(クロック信号)、SDA(データー信号) ピン情報を引数無しでコールしても大抵動作するようだ。
// 動作実績のあるパターン
// 引数を何も渡さない場合
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL343 accel = Adafruit_ADXL343(12345);
Adafruit_BME280 bme; // BME280インスタンスの作成
// I2Cアドレス、ピン情報を渡す場合
SSD1306 display(0x3c, sda, scl); // SSD1306インスタンスの作成
個人ルールとして、ブレッドボード上でSCL信号に緑色、SDA信号に青色のジャンパー線を可能な限り使うようにして配線の見通しを良くしている。
SPI (シリアルペリフェラルインタフェース)
SPI はI2C に比べて少々自由度が高くて、まだ自分内で王道的なピン接続を見いだせていない。
各信号線の呼び方もバラバラで、単一の情報源からだけでは迷う事も多い。
現在動作確認が取れている組み合わせは ESP8266開発ボードでは1.3インチTFT LCDモジュール(240 * 240 IPS 65Kフルカラー 3.3V SPIインタフェース ST7789 ドライバ、CS信号の無いタイプ)だけである。
ESP32S 開発ボードでは、1.3インチTFT LCDモジュールと2.2インチTFT LCDモジュールの2枚で動作確認が行えた。
下記忘れないようにメモ…
ESP32S
// for ESP32 (SPI)
#ifdef ESP32
#define TFT_SCLK 18 // SCL,SCK Default
#define TFT_MOSI 23 // SDA,SDI,MOSI Default
#define TFT_RST 2 // RESET, RES (pin of your choice)
#define TFT_DC 4 // DC,RS (pin of your choice)
// 1.3" TFT LCD の場合、結線はここまで
#define TFT_CS 5 // CS,SS Default
#define TFT_MISO 19 // SDO/MISO Default
//#define TFT_LED VCC // LED端子はVCCに接続
// 2.2" TFT LCD の場合、結線はここまで全部
#endif // ESP32
ESP8266
#ifdef ESP8266 (SPI)
#define TFT_DC D3 // DC (pin of your choice)
#define TFT_RST D4 // RES (pin of your choice)
#define TFT_MOSI D7 // SDA fixed pin
#define TFT_SCLK D5 // SCL fixed pin
// BLK no connect
#endif // ESP8266
Arduino_ST7789 tft13 = Arduino_ST7789(TFT_DC, TFT_RST);