この記事では、Arduino IDEを使用してESP32でアナログ入力を読み取る方法を説明します。 アナログ読み取りは、ポテンショメータやアナログセンサなどの可変抵抗器から値を読み取るのに便利です。
ESP32でアナログ入力を読み取ることは、読みたいGPIOを引数として受け入れるanalogRead(GPIO)関数を使用するのと同じくらい簡単です。
ESPボードでアナログピンを使用する方法については、他のチュートリアルもあります:
- ESP8266ADC-Arduino IDE、MicroPython、Luaでアナログ値を読み取る
- Esp32MicroPythonでアナログ値を読み取る
ビデオを見る
ビデオチュートリアルを見るか、このページを読んで
アナログ入力(ADC)
ESP32でアナログ値を読み取ると、0Vから3.3Vの間の様々な電圧レベルを測定することができます。
測定された電圧は0~4095の値に割り当てられ、0Vは0に対応し、3.3Vは4095に対応します。 0Vから3.3Vの間の電圧には、その間に対応する値が与えられます。
ADCは非線形
理想的には、ESP32ADCピンを使用するときに線形動作が期待されます。 しかし、それは起こりません。 あなたが得るものは、次のチャートに示すような動作です:
この動作は、あなたのESP32が3を区別できないことを意味します。両方の電圧で同じ値が得られます:4095。
非常に低い電圧値でも同じことが起こります:0Vと0.1Vの場合、同じ値が得られます:0。 ESP32ADCピンを使用する場合は、この点に留意する必要があります。
このテーマについてGitHubで議論があります。
analogRead()関数
Arduino IDEを使用してesp32でアナログ入力を読み取ることは、analogRead()関数を使用するのと同じくらい簡単です。 読みたいGPIOを引数として受け取ります:
analogRead(GPIO);
ESP32は18のチャネルの測定を支える。 DEVKIT V1DOITボード(30Gpioを搭載したバージョン)では15のみが利用可能です。
ESP32ボードのピン配置をつかみ、ADCピンを見つけます。 これらは、下の図の赤い枠線で強調表示されています。
詳細については、ESP32Gpio:ESP32ピンアウトリファレンスをご覧ください。
これらのアナログ入力ピンの分解能は12ビットです。 これは、アナログ入力を読み取るときに、その範囲が0から4095まで変化する可能性があることを意味します。
注:Wi-Fi使用時はADC2ピンは使用できません。 したがって、Wi-Fiを使用していて、ADC2GPIOから値を取得するのに問題がある場合は、代わりにADC1GPIOを使用することを検討してください。
その他の便利な機能
他のプロジェクトで役立つADCピンで使用する他のより高度な機能があります。
- analogReadResolution(resolution):サンプルビットと分解能を設定します。 9(0–511)12ビット(0–4095)の値にすることができます。 デフォルトは12ビット分解能です。
- analogSetWidth(width):サンプルビットと分解能を設定します。 9(0–511)12ビット(0–4095)の値にすることができます。 デフォルトは12ビット分解能です。
- analogSetCycles(cycles):サンプルあたりのサイクル数を設定します。 デフォルトは8です。 範囲は1 255です。
- analogSetSamples(samples):範囲内のサンプル数を設定します。 デフォルトは1サンプルです。 それは感度を高める効果があります。
- analogSetClockDiv(attenuation):ADCクロックの分周器を設定します。 デフォルトは1です。 範囲は1 255です。
- analogSetAttenuation(attenuation):すべてのADCピンの入力減衰を設定します。 デフォルトはAdc_11Dbです。 受け入れられる値:
- Adc_0Db:減衰を設定しません。 ADCは、最大約800mV(1V入力=ADCの読み取り値1088)まで測定できます。 <9558><6450>Adc_2_5Db:ADCの入力電圧が減衰され、測定範囲が最大約2000Mhzまで拡張されます。 1100万円 (1V入力=ADCの読み値3722)。 <9558><6450>Adc_6Db:ADCの入力電圧が減衰され、測定範囲が最大約2000Mhzまで拡張されます。 1350万円 (1V入力=ADCの読み値3033)。 <9558><6450>Adc_11Db:ADCの入力電圧が減衰され、測定範囲が最大約2000Mhzまで拡張されます。 2600万円 (1V入力=ADC読取値1575)。
- analogSetPinAttenuation(pin,attenuation):指定したピンの入力減衰量を設定します。 デフォルトはAdc_11Dbです。 減衰値は前の関数と同じです。
- adcAttachPin(pin):ADCにピンを接続します(オンになる可能性のある他のアナログモードもクリアします)。 TRUEまたはFALSEの結果を返します。
- adcStart(pin)、adcBusy(pin)、resultadcEnd(pin):接続されたピンのバス上でADC変換を開始します。 ピンのADCバスの変換が現在実行されているかどうかを確認します(TRUEまたはFALSEを返します)。 変換の結果を取得する:16ビット整数を返します。
ここで見ることができるこれらの機能を説明する非常に良いビデオがあります。
ESP32でポテンショメータからアナログ値を読み取る
すべてがどのように結びついているかを確認するために、ポテンショメータからアナログ値を読み取
この例では、次の部分が必要です:
- ESP32DOIT DEVKIT V1ボード(最高のESP32開発ボードを読む)
- ポテンショメータ
- ブレッドボード
- ジャンパー線
上記のリンクを使用するか、直接に行くことができますMakerAdvisor.com/tools 最もよい価格であなたのプロジェクトのためのすべての部品を見つけるため!
回路図
ポテンショメータをESP32に配線します。 ポテンショメータの中央ピンはGPIO34に接続する必要があります。 以下の回路図を参考にすることができます。
コード
Arduino IDEを使用してESP32をプログラムしますので、先に進む前にESP32アドオンがインストールされていることを確認してください:
- Windowsの命令–Arduino IDEのESP32ボード
- MacとLinuxの命令–ARDUINO IDEのESP32ボード
Arduino IDEを開き、次のコードをコピーします。
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) const int potPin = 34;// variable for storing the potentiometer valueint potValue = 0;void setup() { Serial.begin(115200); delay(1000);}void loop() { // Reading potentiometer value potValue = analogRead(potPin); Serial.println(potValue); delay(500);}
生のコードを表示
このコードは、ポテンショメータから値を読み取り、シリアルモニタにそれらの値を出力します。
コードでは、ポテンショメータが接続されているGPIOを定義することから始めます。 この例では、GPIO3 4である。
const int potPin = 34;
setup()では、ボーレート115200でシリアル通信を初期化します。
Serial.begin(115200);
loop()では、analogRead()関数を使用してpotpinからアナログ入力を読み取ります。
potValue = analogRead(potPin);
最後に、ポテンショメータから読み取った値をシリアルモニタに出力します。
Serial.println(potValue);
あなたのESP32に提供されたコードをアップロードします。 ツールメニューで適切なボードとCOMポートが選択されていることを確認してください。
サンプルのテスト
コードをアップロードしてESP32リセットボタンを押した後、シリアルモニタをボーレート115200で開きます。 ポテンショメータを回転させ、値の変化を確認します。
あなたが得る最大値は4095であり、最小値は0です。
ラップアップ
この記事では、Arduino IDEでESP32を使用してアナログ入力を読み取る方法を学びました。 要約すると:
- ESP32DEVKIT V1DOITボード(30ピンのバージョン)には、アナログ入力の読み取りに使用できる15個のADCピンがあります。
- これらのピンの分解能は12ビットなので、0~4095の値を取得できます。
- Arduino IDEで値を読み取るには、analogRead()関数を使用するだけです。
- ESP32ADCピンにはリニア動作がありません。 おそらく、0と0.1V、または3.2と3.3Vの間を区別することはできません。
この短いガイドが役に立つことを願っています。 ESP32の詳細を知りたい場合は、コースに登録してください:Arduino IDEでESP32を学ぶ。
あなたも好きかもしれない他のESP32ガイド:
- ARDUINO IDEとESP32OLEDディスプレイ
- ARDUINO IDEを使用してDHT温度と湿度センサーとESP32
- DHT測定値とESP32Webサーバー
- 20+ESP32プロジェクトとチュートリアル
読んでくれて