e-DIY
基礎知識

ESP WROOM02(ESP8266)のアナログ入力の使い方

wroom02でアナログ入力値を測定

ESP WROOM02(ESP8266)は1端子だけアナログ入力が可能なADC対応端子があります。
少し使いづらい部分もありますので、上手に使いこなすためのノウハウをお伝えします。

アナログ入力できる端子

外部からアナログ入力できる端子はTOUTの1端子だけです。

wroom02のアナログ入力端子

分解能は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変換値を取得してみました。

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

出力結果はこのようになりました。

ADC変換値

テスターで測定した値とほぼ一致しており、誤差は0.02%です。

ADCで読んだ値 4.086V
テスターで測定した値 4.085V
誤差 0.02%

次は測定した値をクラウドに送って、IoTデータロガーを作ってみたいと思います。

関連キーワード

フリーワード検索