4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MicroPython on the ESP8266 (ESP-WROOM-02) 電源電圧の取得

Posted at

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

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?