ESP WROOM02(ESP8266)のアナログ入力の使い方
ESP WROOM02(ESP8266)は1端子だけアナログ入力が可能なADC対応端子があります。
少し使いづらい部分もありますので、上手に使いこなすためのノウハウをお伝えします。
アナログ入力できる端子
外部からアナログ入力できる端子はTOUTの1端子だけです。
分解能は10bit、入力電圧範囲は0V〜1.0Vまでです。
アッテネーターがないので、1V以上の電圧を入力する際は外部で抵抗分圧する必要があります。
Arduinoスケッチ
WROOM02の場合、analogRead関数が使えないという記事をよく見かけたのですが、普通に使えました!
下記は単純にアナログ入力された電圧のAD変換値をシリアル出力するスケッチです。
void setup() {
Serial.begin(115200);
}
void loop() {
int val = analogRead(A0);
Serial.println(val);
delay(500);
}
精度確認
TOUT端子に0V〜1.0Vまで入力してAD変換値を取得してみました。
オフセットが13LSBあります。
また、0.96V付近でAD変換値が1024となるため、基準電圧の1Vがやや低く出ていると推測されます。
この結果から補正をかけると、AD変換値(val)から入力電圧(Vin)を求める式は次のようになります。
\[
V_{in} = 0.946 \times (val – 13)
\]
0.946は直線の傾きです。
WROOM02の個体ばらつきがあると思うので、お手元のデバイスで同様の手順で補正式を求めてください。
それでは、この補正式を使ってリチウムイオン電池の電圧を測定してみます。
測定回路と測定結果
WROOM02にはアッテネーター機能がないので、入力電圧が1V以下になるように抵抗分圧する必要があります。
リチウムイオン電池はフル充電されていれば4.2V程度の電圧となるので、47kΩと10kΩで分圧して1V以下となるようにしました。
精度を出すためそれぞれの抵抗値をテスターで測定し、分圧比を計算しておきます。
項目 | 実測・計算値 |
---|---|
10kΩ | 9.995kΩ |
47kΩ | 46.22kΩ |
分圧比 | 0.178 |
分圧比は次の計算式で求めることができます。
\[
\frac{R2}{R1 + R2}
\]
抵抗の分圧比と補正式を盛り込んだArduinoスケッチを作ります。
void setup() {
Serial.begin(115200);
}
void loop() {
int val1 = analogRead(A0);
int val2 = 0.946 * (val1 - 13) / 0.178;
Serial.print(val2);
Serial.println(" mV");
delay(1000);
}
出力結果はこのようになりました。
テスターで測定した値とほぼ一致しており、誤差は0.02%です。
ADCで読んだ値 | 4.086V |
---|---|
テスターで測定した値 | 4.085V |
誤差 | 0.02% |
次は測定した値をクラウドに送って、IoTデータロガーを作ってみたいと思います。