ESPr Developer 32で従来のESPr Developer用GROVEシールドを使うときのポイントメモ

ESPr Developer 32で従来のESPr Developer用GROVEシールドを使うときのポイントメモです。主にピン配置で苦労しましたが、乗り越え、またGroveシールドが使えるようになりました!

経緯

ハンダ付けが苦手な私にもスイッチサイエンスさんのESPr Developer 32が発売されたことにより追い風が吹いてきました。

image

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

image

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

ピンを付ける

image

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

image

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

image

板に貼り付けて。

image

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

image

ただでさえハンダスキルが低い中、なかなか雑な仕上がりです。 とりあえず動けばよいのです!

ひとまず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シールドをつけてみます。

image

ですが、うんともすんとも言わない・・・。D14、I2C、A0も同様。

これはもしかして、GROVEシールドはダメなやつ?

ハンダ付けがダメ?いやいや、単体で見てみたら動いてたし、違う気がする。

ここで気づいたピン配置の違い

スイッチサイエンス製の拡張基盤が使えると言っても、もしかしたら、いろいろ違いがあるかもしれないということで、ESP8266のESPr Developerと今回のESP32のESPr Developer 32の基板を見てみました。

image

おお、、、なるほど。明らかに違います。以前の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 ボタンいきます。

image

従来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 ボタンの値を取得するには上記のように書きます。

image

無事取得できました!

A0でGrove ジョイスティック

A0でGrove ジョイスティックいってみましょう。

image

従来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を当ててみます。

image

無事値が取得できました!ただ、本来ジョイスティック無操作時に50%で512を指し示す値が416のような?このあたりは引き続き文献を追ってみましょう。

I2Cでデジタル光センサー

では一番難しそうなI2C。ここはデジタル光センサーでいってみましょう。

image

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);
}

このようになりました。実行してみると無事に値が取れました!

image

よかった

ということで、以前のESP8266のESPr Developerでの制作で重宝していたESPr Developer用GROVEシールドが、ピン指定をしっかりすればESPr Developer 32でも利用できることがわかりました。よかった!

ESPr Developer 32はWi-FiもBluetoothも扱うことができるので、センサーの無線化や遠隔でアクチュエーターを動かすときに、様々なアプローチが期待できそうなので楽しみです。

それでは、よきESPr Developer 32 & Grove & IoT Lifeを!