« Windows10完全シャットダウンの設定方法 | トップページ | ESPr Developer(ESP-WROOM-02開発ボード) 購入 »

2016年10月22日 (土)

ESP8266のアナログ入力とVCCの電圧測定方法

アナログ入力
ESP8266にはTOUT端子がありこの電圧のADC値を読み取ることができます。
TOUT端子の電圧を測定するためには以下のようにA0をanalogReadすれば読み出せます。

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  int v=analogRead(A0);
  Serial.println("VCC="+String(v/1000.0)+"V");
  delay(1000);
}

読み取り値は10ビットの0から1023の値で、TOUT端子が1Vのとき1000となります。

次にVCCの測定方法

以下のようにADC_MODEをADC_VCCに変更するとVCC電圧を測定できます。この値を1/1000すると電圧値になります。

#include <ESP8266WiFi.h>
ADC_MODE(ADC_VCC)

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

void loop() {
  int v=ESP.getVcc();
  Serial.println("VCC="+String(v/1000.0)+"V");
  delay(1000);
}

TOUTピンは何も接続しないでください。チップ内でVCCを1/4し1Vの基準電圧で測定し、ライブライ内で4倍した結果がESP.getVcc()から返ってきます。

ADC_MODEはマクロで以下のように定義されています。

enum ADCMode {
    ADC_TOUT = 33,
    ADC_TOUT_3V3 = 33,
    ADC_VCC = 255
    ADC_VDD = 255
};

#define ADC_MODE(mode) extern "C" int __get_adc_mode() { return (int) (mode); }

マクロで定義されいる__get_adc_mode()は以下のように使用されている

extern int __wrap_register_chipv6_phy(uint8_t* unused) {
    phy_init_data[107] = __get_adc_mode();
    return __real_register_chipv6_phy(phy_init_data);
}

ADC_VCCとADC_VDDを指定したときVCCの値が返ります。それ以外は1023が返ります。
anaroguRead()もESP.getVcc()も同じADCを使っていて、動作中のモード切り替えは出来ないと思われます。

調査には以下を使いました。

« Windows10完全シャットダウンの設定方法 | トップページ | ESPr Developer(ESP-WROOM-02開発ボード) 購入 »

android」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/569662/64385253

この記事へのトラックバック一覧です: ESP8266のアナログ入力とVCCの電圧測定方法:

« Windows10完全シャットダウンの設定方法 | トップページ | ESPr Developer(ESP-WROOM-02開発ボード) 購入 »