ESPr Developer 32で従来のESPr Developer用GROVEシールドを使うときのポイントメモ
ESPr Developer 32で従来のESPr Developer用GROVEシールドを使うときのポイントメモです。主にピン配置で苦労しましたが、乗り越え、またGroveシールドが使えるようになりました!
経緯
ハンダ付けが苦手な私にもスイッチサイエンスさんのESPr Developer 32が発売されたことにより追い風が吹いてきました。

しかも、従来のスイッチサイエンス製の拡張基盤が使える!

大好きなESPr Developer用GROVEシールドも使えるんじゃないかということで、発売初日に購入しました!
ピンを付ける

私の場合はスイッチサイエンス製の拡張基盤が使えればよいので、10口のピンソケットでよいのでハンダ付けしました。

マスキングテープで固定して。

板に貼り付けて。

なんとかハンダ付け対応完了。

ただでさえハンダスキルが低い中、なかなか雑な仕上がりです。 とりあえず動けばよいのです!
ひとまずLEDチカチカさせて通電テスト
ということで、ESP32(ESP-WROOM-32)でLチカ (WindowsでArduino IDE使用) などを参考に環境を整えてLEDを光らせてみます!
void setup() {
pinMode(12, OUTPUT);
Serial.begin(115200);
Serial.println("LED TEST");
}
void loop() {
digitalWrite(12, HIGH);
Serial.println("LED ON");
delay(250);
digitalWrite(12, LOW);
Serial.println("LED OFF");
delay(250);
}
いずれ、ESPr Developer用GROVEシールドのD12で動かすのでこれでやってみます。
無事LEDを光らせてみました。うれしい。
判定できる範囲のピンをLEDを光らせて通電確認して無事動いている模様。TXD0・EXD0あたりは分からないけど、とりあえずよいでしょう!
いざESPr Developer用GROVEシールドをつけてみる→動かない
さて、いざESPr Developer用GROVEシールドをつけてみます。

ですが、うんともすんとも言わない・・・。D14、I2C、A0も同様。
これはもしかして、GROVEシールドはダメなやつ?
ハンダ付けがダメ?いやいや、単体で見てみたら動いてたし、違う気がする。
ここで気づいたピン配置の違い
スイッチサイエンス製の拡張基盤が使えると言っても、もしかしたら、いろいろ違いがあるかもしれないということで、ESP8266のESPr Developerと今回のESP32のESPr Developer 32の基板を見てみました。

おお、、、なるほど。明らかに違います。以前のIO14やIO12の部分がIO25やIO26に入れ替わってますね。ということは先ほどのD12を狙うコードはESPr Developer 32ではちょっと下にずれたピンが動作してしまってGroveシールドに伝わっていません。
ということで、こうやって見比べながらD12、D14、A0、I2Cを動かしてみました。
D14でGrove LEDを光らせる
従来IO14を見ていたD14は、ESPr Developer 32の場合ではIO25です。
void setup() {
pinMode(25, OUTPUT);
Serial.begin(115200);
Serial.println("LED TEST");
}
void loop() {
digitalWrite(25, HIGH);
Serial.println("LED ON");
delay(250);
digitalWrite(25, LOW);
Serial.println("LED OFF");
delay(250);
}
D14でLEDを光らせるには上記のように書きます。
こちらで無事光りました!
D12でGrove ボタン
つづいて、D12でGrove ボタンいきます。

従来IO12を見ていたD12は、ESPr Developer 32の場合ではIO26です。
// 旧D12 = 現26pin
int pushButton = 26;
void setup() {
pinMode(pushButton, INPUT);
Serial.begin(115200);
Serial.println("DigitalRead TEST");
}
void loop() {
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
delay(1000);
}
D12でGrove ボタンの値を取得するには上記のように書きます。

無事取得できました!
A0でGrove ジョイスティック
A0でGrove ジョイスティックいってみましょう。

従来A0を見ていたTOUTという特殊なピンでした。ESPr Developer 32の場合ではIO4になっていました。以前特殊なピンでしたがうまくいくものでしょうか?
int sensorPin = 4;
int sensorValue = 0;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(115200);
Serial.println("Analog TEST");
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.print("sensorValue : ");
Serial.println(sensorValue);
delay(sensorValue);
delay(1000);
}
ひとまず、analogReadを当ててみます。

無事値が取得できました!ただ、本来ジョイスティック無操作時に50%で512を指し示す値が416のような?このあたりは引き続き文献を追ってみましょう。
I2Cでデジタル光センサー
では一番難しそうなI2C。ここはデジタル光センサーでいってみましょう。

I2Cはかなりハマりました。従来I2Cを行っていたピンはIO4とIO5だったようです。ESPr Developer 32の場合ではIO19とIO21ですが、どう指定しようか悩んでいたところ、以下文献に助けられました。
ESP32 (ESP-WROOM-32)でi2C通信 - とっくんラボ
beginの引数にSDA、SCLの順にピンの番号を入れることで出来ます。
とのことで、Wire.beginで明示的に指定できるようです。SDAとSCLがどちらかわからなかったので、上手く値が取れる方で指定しました。
#include <Wire.h>
#include <Digital_Light_TSL2561.h>
void setup()
{
// 明示的にI2Cの対象ピン指定する
int SDA = 19;
int SCL = 21;
Wire.begin(SDA, SCL);
Serial.begin(115200);
TSL2561.init();
}
void loop()
{
Serial.print("The Light value is: ");
Serial.println(TSL2561.readVisibleLux());
delay(1000);
}
このようになりました。実行してみると無事に値が取れました!

よかった
ということで、以前のESP8266のESPr Developerでの制作で重宝していたESPr Developer用GROVEシールドが、ピン指定をしっかりすればESPr Developer 32でも利用できることがわかりました。よかった!
ESPr Developer 32はWi-FiもBluetoothも扱うことができるので、センサーの無線化や遠隔でアクチュエーターを動かすときに、様々なアプローチが期待できそうなので楽しみです。
それでは、よきESPr Developer 32 & Grove & IoT Lifeを!