ESP32でADC2と DACを使う (ESP32-DevKitC+ESP-IDF)
前回ADC1を使用してみたので、今回はADC2を使用してみる。これであらかたADCについて分かったはず。今回もテンプレートで用意されているプロジェクトを動かしてみる。ついでにDACも動かす。
テンプレートを開く
配線
ADCテスト用に可変抵抗を3.3V、GND、GPIO27に接続して分圧した後の電圧をADCで読み取る。
DACテスト用にLEDをGPIO27に接続した。
動作
書き込んでシリアルモニタでESP32の起動直後のメッセージを読むとADCとDACの設定端子の情報が出力される。これはADCのチャンネルからGPIO端子番号を出力する関数から得た情報だ。
その下から始まる数値の羅列は左側はDACの出力設定値、右側がADC2の入力値だ。
下の動画はDACでLEDを調光している様子。テンプレートの周期から8倍にしている。 youtu.be
テンプレートのプログラム
テンプレートのプログラムを下に示す。一部変更してある。
ADC2
ADC2を使用する。ADC2は前回述べた通りWiFiと一緒に使うことはできないし、設定できる端子も制約が多い。 どの関数を使う前にもまずヘッダファイルをインクルードする。
#include "driver/adc.h"
ADC2のGPIO端子出力関数
ADC2のチャンネルがどのGPIOに対応しているか出力してくれる関数。便利だけど書き込んでからわかるってどうなの...
adc2_pad_get_io_num(adc2_channel_tchannel, gpio_num_t *gpio_num)
channel :調べたいADC入力端子
*gpio_num:GPIOの番号を代入してほしい変数のアドレス(&でアドレスを渡す)
ADC2設定関数
ADC2もADC1と同様に設定関数で設定する必要がある。
esp_err_t adc2_config_channel_atten(adc2_channel_t channel, adc_atten_t atten)
channel :ADC入力端子
atten :減衰量設定
0:減衰量0[dB] 推奨範囲 100~950[mV]
1:減衰量2.5[dB] 推奨範囲 100~1250[mV]
2:減衰量6[dB] 推奨範囲 150~1750[mV]
3:減衰量11[dB] 推奨範囲 150~2450[mV]
ADC2値読み取り関数
ADC2で端子に入力されている電圧を読み取るためには下の関数を用いる(ADCの生値)。
esp_err_tb adc2_get_raw(adc2_channel_t channel, adc_bits_width_t width_bit, int *raw_out)
channel :ADC入力端子
width_bit :ADC分解能設定
0:9Bit
1:10Bit
2:11Bit
3:12Bit
*raw_out :値を代入する変数のアドレス(&で渡す)
DAC
ESP32のDAC機能を使用する。ESP32のDACは8bitで分解能は小さいが、簡単なメロディーや正弦波を流すには使える。 その為の関数を使う前にヘッダファイルをインクルードする。
#include "driver/dac.h"
DACの端子設定
DACを使用するにはまず、DAC端子の設定をする必要がある。
下の関数で端子を設定する。
dac_output_enable(dac_channel_t channel)
channel :DAC出力端子
0 :GPIO25 1:GPIO26
DAC出力関数
dac_output_voltage(dac_channel_t channel, uint8_t dac_value)
channel :DAC出力端子
0 :GPIO25 1:GPIO26