いっぺーちゃんの いろいろやってみよ~

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 (デフォルト)