##前書き
僕「ESP32って、Wi-FiとBLEがついててスペックもそこそこいいし、Arduinoの環境でコード書けるし、1500円とお買い得!買ってみますか」ポチ
---ESP到着--
僕「アナログピンにマイク繋いでみますか...」
シリアルモニター君「A/D変換値は1800だよ」
僕「ん?分解能は12bitだから中心電圧のA/D変換値は4096/2=2048前後になるはずなのに、あれ..?」
僕「線形じゃないのかな?電源装置繋げて調べてみるか..」
#ESP32のアナログ入力
ESP-32のADCは12bitでの最大値は3.6Vを示しているようです。by スイッチサイエンス
前書きに書いたように誤差が大きいようです。
実施に電源装置で測定した結果が以下の通りです。
電圧 | A/D変換値 |
---|---|
0 | 0 |
0.1 | 3 |
0.2 | 83 |
1.0 | 1093 |
1.6 | 1842 |
2.0 | 2337 |
2.9 | 3597 |
3.1 | 4031 |
3.3 | 4095 |
(実際には0.1V刻みで33点取っています。)
グラフで描画すると
0.1V~3.0Vまでなら直線的な近似ができそうだなと思い最小二乗法でフィッティングすると
$$y=1260x-161$$
となり決定係数も0.994と使えそうな値が出ました。
他のピンでも同様の実験を行なった結果、同じような値が出ました。
↓HTMLで最小二乗法を行うプログラムを書いたので、もしよかったら使ってください↓
https://github.com/klme/fitting
##総評
時間をあけて行なってもほぼほぼ同じ結果がでました。
しかし、違う個体だと差が出ました。
ESP-32ではアナログリードを使うときは、まずこの特性実験をして傾きと切片をもとめることが大事ですね。
*ESP-32では、アナログ入力とWi-Fiと並行して使うことはできないみたいですね。注意しましょう!
##参考
スイッチサイエンスさん--ESP-WROOM-32に関するTIPS
https://trac.switch-science.com/wiki/esp32_tips
公式スレッドにて
https://esp32.com/viewtopic.php?f=12&t=1045
議論1
https://github.com/espressif/arduino-esp32/issues/92
議論2
https://github.com/espressif/esp-idf/issues/164