micropython on ESP32 でADC
今更だけど備忘録として。
ESP32でアナログ電圧を取得するのにADC(Analog-Digital Converter) を使用できます。
ESP32のADCのアナログ入力の電圧範囲は0~VDD(3.3V)です(ESP8266とは異なります)。
ADC入力端子として、Pin36、Pin37、Pin38、Pin39、Pin32、Pin33、Pin34、Pin35 を指定できます。
それ以外の端子を指定すると例外ValueErrorがraise されます。
初期化方法は以下の通りです。
import machine pin36=machine.Pin(36, machine.Pin.IN) adc0 = machine.ADC(pin36)
アナログ電圧値を取得するには以下のように実行します。
取得できる値は、デフォルト設定時、有効桁12bitなので、0~4095(0x0fff)の整数値です。
ただし、デフォルトのattenuation(減衰率?)が0dBに設定されていて、入力電圧が約1V程度で変換結果が最大値になります(ESP8266との互換性??)。
val = adc0.read()
attenuation(減衰率?)を変更するには以下のように実行します。
11dBを設定すると、大体フルレンジでの変換になるようです。
adc0.atten(machine.ADC.ATTN_11DB)
設定値 | attenuation | |
machine.ADC.ATTN_0DB | 0dB | (デフォルト) |
machine.ADC.ATTN_2_5DB | 2.5dB | |
machine.ADC.ATTN_6DB | 6dB | |
machine.ADC.ATTN_11DB | 11dB |
また、以下のように実行すると、ADCの変換結果の有効桁数を変更できます。
adc0.width(machine.ADC.WIDTH_9BIT)
設定値 | 変換結果 | |
machine.ADC.WIDTH_9BIT | 0~511 | |
machine.ADC.WIDTH_10BIT | 0~1023 | |
machine.ADC.WIDTH_11BIT | 0~2047 | |
machine.ADC.WIDTH_12BIT | 0~4095 | (デフォルト) |