1、关于光敏电阻的原理介绍等信息就不一一介绍了,先上具体原理图
硬件连接,采用的是esp32s 的IO34号引脚,也就是ADC1_CH6(GPIO34)
2、程序源码
#include <stdio.h>
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_err.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include <stdio.h>
#include "driver/uart.h"
#include "driver/gpio.h"
#include <driver/adc.h>
#include "string.h"
//光敏电阻ADC初始化
void adc_Init()
{
adc1_config_width(ADC_WIDTH_12Bit); //设置为12位的ADC 2^12=4096
adc1_config_channel_atten(ADC1_CHANNEL_6 ,ADC_ATTEN_0db);
//设置ADC1通道6,参考电压为1.1V
}
void app_main()
{
int read_raw; //ADC值
adc_Init(); //ADC初始化
while(1)
{
read_raw=adc1_get_voltage(ADC1_CHANNEL_6 ); //采集ADC1 6通道的ADC值
printf("adc=%d,%dmv\r\n",read_raw, (read_raw*1100)/4096); //ADC值以及mV计算
vTaskDelay(10);
}
}
注意!!在使用过程中发现一个问题,就是当使用esp32s的wifi通信时,发现不能使用ADC2引脚,当使用wifi时,无法从ADC2 GPIO获取相关数据值,所以应该使用ADC1 GPIO的管脚
ADC输入通道具有12位的ADC分辨率,所以他的模拟数据为0到4095,假如我们设置参考电压为1.1V,也就是说模拟数据0对于0V,4095对应1.1V;同理,如果设置参考电压为3.3V,则模拟数据0对应0V,4095对应3.3V
具体介绍可以参考我的另外一篇博客:https://blog.csdn.net/weixin_41583631/article/details/108105059