ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【ESP32】analogReadする方法

 ESP32でanalogReadをしたことがないことに気づいたので、調べてやってみました。ついでに照度センサーの値の読み取りも行いました。


1:ESP32でanalogReadする方法
 結論から言うと、以下のようにArduinoUnoなどの時と同じような記述でできます。

int PIN_NUM = 25;
int reading = analogRead(PIN_NUM);

 ただし読み取り値は0〜1023ではなく0〜4096で、入力電圧の範囲は0〜3.3Vのようです。

 またどのピンでもanalogReadできるわけではないらしく、ざっと試してみたところ以下の図の「ADCと記述のあるピンのみanalogReadできる」ようです。
(※ちゃんと検証したわけではないので、間違っている可能性もあります)
f:id:rikoubou:20170629133746p:plain

 以上のいくつか注意点はありますが、ESP32でもanalogReadができることがわかりました。


2:ESP32で照度センサーを使ってみる
フォトICダイオードS9648(5個入): センサ一般 秋月電子通商 電子部品 ネット通販

 この照度センサーの値をanalogReadで読み込みます。プログラムは以下の通りです。

・ESP32_photoIC

/**
 * 繋ぎ方:http://arms22.blog91.fc2.com/blog-entry-416.html
 * データシート:http://akizukidenshi.com/download/s9648.pdf
 * 
 * カソード側(足が短い方)に電源を、アノード側(足が長い方)に読み取りピンを刺す
 * ※普通のLEDとは違うので注意!!
 */

const int voutPin = 25;
const int VOLT = 3.3; // 3.3Vを電源とした場合
const int ANALOG_MAX = 4096; // ESP32の場合

void setup() {
  Serial.begin(115200);
}

void loop() {
  // R1の電圧を取得
  int reading = analogRead(voutPin);

  // AD値をmVに変換
  float voltage = ((long)reading * VOLT * 1000) / ANALOG_MAX;

  Serial.print(voltage);
  Serial.print(" mV, ");

  // 電圧から電流を求める I=E/R (R=1000)
  float microamp = (voltage * 1000) / 1000;

  Serial.print(microamp);
  Serial.print(" uA, ");

  // 電流をlxに変換
  float lx = microamp / (290 / 100);

  Serial.print(lx);
  Serial.println(" lx");

  delay(1000);
}

 回路図は参考記事の「Arduinoで遊ぼう - フォトICダイオード S9648-100 を使って明るさを求める」の回路を参考にして繋いでください。

 シリアルモニタを立ち上げると1秒ごとに読み取った値が表示されます。センサーの上を手で覆うなりすると数値が低く変動するはずです。


 以上、ESP32でanalogReadする方法でした。


・参考記事
Arduino 言語における ESP-WROOM-32 の入出力関数 | なんかしてるえかいくん
Arduinoで遊ぼう - フォトICダイオード S9648-100 を使って明るさを求める - なんでも作っちゃう、かも。