打算利用这个暑假学习ESP-32,顺便记录一下学习过程,有什么错误和不对的地方欢迎大家批评指正。今天学了ADC模数转换实验。也是看着b站up主罗大富Bigrich的视频学的。

ADC是将模拟信号转化到数字信号,一般用于各种将传感器采集的数据转化为我们能看得懂的数字数据(个人是这么理解的?)

串口调试

这里需要用到电位器、LED、1KΩ电阻、面包板以及若干杜邦线。连接方式就是用公对母的杜邦线将ESP-32的GND引脚接在面包板上(引出GND),电阻的一端接这个GND,另一端接LED的阴极,LED阳极接在ESP-32的D13引脚上。用公对公将电位器的一个引脚接入GND。中间引脚连接ESP32的D26。另一引脚接ESP32的3V3。接线图如下图所示。

(图源up主罗大富Bigrich)

使用Arduino自带的Serial函数可以实现将读取到的数值打印在串口监视器中。主要是设置波特率以及打印数值。代码如下所示。这里需要注意的是,ESP32不是所有的引脚都是ADC引脚,具体的需要看ESP32引脚图。(第一期文章有)。

//在串口监视器中打印电位计的模拟输入信号
#define POT 26

//初始模拟输出值
int pot_value;

void setup() {
  // 设置窗口通讯波特率
  Serial.begin(9600);
  pinMode(POT, INPUT);
}

void loop() {
  //读取电位计模拟输入值
  pot_value = analogRead(POT);
  //打印模拟输入信号在串口监视器中
  Serial.println(pot_value);
  delay(50);
}

代码烧录成功后,点击左上角工具,打开那个叫串口监视器的(也可以用快捷键ctrl+shif+M),就可以看到读取的值了。转动电位器还可以看到不同的值。一开始出现的数值不是零也不要慌张,可能是你之前拧到电位器了。拧到最左边输出的是0,最右输出为4095.

通过电位器的模拟输入值来控制 LED 的亮度

学会读取到模拟输入信号,就可以利用这个转化为LED的模拟输出信号,通过analogWrite()控制LED亮度。analogWrite()的输入是0-255,一共256个数,而通过串口打印我们发现模拟输入信号的值是0-4095,一共4056个数,相差16倍。所以我们可以将读取到的模拟输入信号值除以 16,以此来匹配 analogWrite () 控制 LED 亮度所需的数值区间,实现模拟输入信号对 LED 亮度的线性调节。代码如下所示。

#define POT 26
#define LED 13

//初始模拟输出值
int pot_value;
int led_value;

void setup() {
  // 设置窗口通讯波特率
  Serial.begin(9600);
  pinMode(POT, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  //读取电位计模拟输入值
  pot_value = analogRead(POT);
  //把电位计模拟输入值转化为LED模拟输出值
  led_value = pot_value / 16;
  analogWrite(LED, led_value);
  delay(50);
}

使用ADC模拟通道输入

通过电位器的模拟输入值直接控制 LEDC 通道的占空比,从而实现对 LED 亮度的连续调节。旋转电位器 → 改变 ADC 模拟输入值 → 改变 LEDC 通道的 PWM 占空比 → LED 亮度随电位器旋钮连续变化。代码如下所示。

#define POT 26
#define LED 13
#define CHANNEL 0    //定义LEDC通道  
#define RES 12
#define FREQ 1000

//初始模拟输出值
int pot_value;
int led_value;

void setup() {
//设置ADC分辨率
  analogReadResolution(12);
  //配置输入衰减
  analogSetAttenuation(ADC_11db);
  //建立LEDC通道,配置LEDC分辨率
  ledcSetup(CHANNEL, FREQ, RES);
  //关联GPIO与LEDC通道
  ledcAttachPin(LED, CHANNEL);
  
}
void loop() {
  //读取电位计模拟输入值
  pot_value = analogRead(POT);
  //输出PWM
  ledcWrite(CHANNEL, pot_value);
  delay(50);
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐