ESP8266はTOUTの入力を無効にすると、電源電圧(3V3)端子に入ってくる電源電圧が測定できます。micropythonでの使い方をまとめました。
Arduinoでの方法は、ESP8266+Arduinoの電源電圧(VCC)の測定方法に書かれています。
配線
ESP-WROOM-02のTOUTは何も接続せず、オープンにしておきます。
何か接続していると、取得する値がおかしくなります。
モード変更
電源電圧の測定をするためにはADCのモードを変更する必要があります。
Arduinoだと
ADC_MODE(ADC_VCC);
のマクロでモードが変わりますが、これはコンパイル時のオプションで、Arduinoでもコードブロックの中には書けません。
micropythonの場合は、ファームウェアを書き換える必要があります。
下記のサンプルコードで、ファームウェアを書き換え、モードを変更できます。
import esp
from flashbdev import bdev
import machine
ADC_MODE_VCC = 255
ADC_MODE_ADC = 0
def set_adc_mode(mode):
sector_size = bdev.SEC_SIZE
flash_size = esp.flash_size() # device dependent
init_sector = int(flash_size / sector_size - 4)
data = bytearray(esp.flash_read(init_sector * sector_size, sector_size))
if data[107] == mode:
return # flash is already correct; nothing to do
else:
data[107] = mode # re-write flash
esp.flash_erase(init_sector)
esp.flash_write(init_sector * sector_size, data)
print("ADC mode changed in flash; restart to use it!")
return
この関数を以下のように呼び出してモードを変更します。
set_adc_mode(ADC_MODE_VCC)
電源電圧の測定
電源電圧は、ADC(1)を読むことで取得できます。3.3Vの場合は、3300が返ります。
vcc = machine.ADC(1)
print(vcc.read())
以下を参考にしてまとめています。
esp8266 read vcc