CircuitPython 10行プログラミング Step9 (2) アナログ入力

 ここでは、マイコン・ボードESP32-S3-DevKitC-1-N8のアナログ入力を使います。CircuitPython は8.0.0-beta.3です。

ピン番号

 ADC1_0はGPIO1です。CircuitPythonではA1で今までアクセスできましたが、エラーになりました。IO1で利用できるようです。

CircuitPython 8.0.0用のファイルをダウンロード

  CircuitPython_Community_Bundle

から、circuitpython-community-bundle-8.x-mpy-20221017.zipをダウンロードし解凍します。

 解凍するとlibフォルダが見えます。

 このlibフォルダの中身を、CIRCUITPYドライブのlibフォルダ内にコピーします。8Gバイトの容量があるので、全部コピーできます。

 また、解凍したexamplesフォルダは、PCのどこかにコピーします。

プログラム

 GPIO1(IO1)とGNDに電圧源をつなぎます。ESP32-S3の内蔵A-Dコンバータは12ビットですが、CircuitPythonのAnalogIn(IO1)関数は0~65535の値が得られます。

 今回、20回データを取得し、ソートし、下5個と上5個を捨てて、中ほどの10個の平均をとりました。

 3.3V端子をテスタで測ると3.29Vだったので、その値で電圧に換算しています。


from analogio import AnalogIn
from board import *
from time import sleep

pin = AnalogIn(IO1)
print("")
NUM_SAMPLES = 20
while 1:
    analogData=[]
    for i in range(NUM_SAMPLES):
        analogData.append(pin.value)
        sleep(0.1)
    # print("==========")
    analogData.sort()
    # mean = sum(analogData) / float(len(analogData))
    mean1 = sum(analogData[5:NUM_SAMPLES-5]) / float(len(analogData[5:NUM_SAMPLES-5]))
    # print(analogData[5:NUM_SAMPLES-5])
    print("====")
    print(mean1)
    print(mean1 * 3.29 / 65536)
    sleep(3.14)

入力電圧と得られた電圧

 入力電圧を変えていき、データをプロットしました。

  比較的直線性の良いグラフになりました。初期のESP32に比べてA-Dコンバータは大きく改善されているようです。