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コンバータは大きく改善されているようです。