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できる」ようです。
(※ちゃんと検証したわけではないので、間違っている可能性もあります)
以上のいくつか注意点はありますが、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 を使って明るさを求める - なんでも作っちゃう、かも。