ESP32-使用ADC笔记
基于ESP-IDF4.1
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "freertos/FreeRTOS.h"
4 #include "freertos/task.h"
5 #include "driver/gpio.h"
6 #include "driver/adc.h"
7 #if CONFIG_IDF_TARGET_ESP32
8 #include "esp_adc_cal.h"
9 #endif
10
11 #define DEFAULT_VREF 1100 //使用 adc2_vref_to_gpio() 获得更好的估计值
12 #define NO_OF_SAMPLES 64 //多重采样
13
14
15 static esp_adc_cal_characteristics_t *adc_chars;
16 static const adc_channel_t channel = ADC_CHANNEL_6; //GPIO34 if ADC1, GPIO14 if ADC2
17
18 static const adc_atten_t atten = ADC_ATTEN_DB_0;
19 static const adc_unit_t unit = ADC_UNIT_1;
20
21
22 static void check_efuse(void)
23 {
24 //检查TP是否烧入eFuse
25 if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP) == ESP_OK) {
26 printf("eFuse Two Point: Supported\n");
27 } else {
28 printf("eFuse Two Point: NOT supported\n");
29 }
30
31 //检查Vref是否烧入eFuse
32 if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_VREF) == ESP_OK) {
33 printf("eFuse Vref: Supported\n");
34 } else {
35 printf("eFuse Vref: NOT supported\n");
36 }
37 }
38
39 static void print_char_val_type(esp_adc_cal_value_t val_type)
40 {
41 if (val_type == ESP_ADC_CAL_VAL_EFUSE_TP) {
42 printf("Characterized using Two Point Value\n");
43 } else if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) {
44 printf("Characterized using eFuse Vref\n");
45 } else {
46 printf("Characterized using Default Vref\n");
47 }
48 }
49
50
51 void app_main(void)
52 {
53
54 //检查TP和Vreff是否烧录进eFuse
55 check_efuse();
56
57 //配置 ADC
58 if (unit == ADC_UNIT_1) {
59 adc1_config_width(ADC_WIDTH_BIT_12);
60 adc1_config_channel_atten(channel, atten);
61 } else {
62 adc2_config_channel_atten((adc2_channel_t)channel, atten);
63 }
64
65 //描述 ADC
66 adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
67 esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_chars);
68 print_char_val_type(val_type);
69
70 //连续采样ADC1
71 while (1) {
72 uint32_t adc_reading = 0;
73 //多重采样
74 for (int i = 0; i < NO_OF_SAMPLES; i++) {
75 if (unit == ADC_UNIT_1) {
76 adc_reading += adc1_get_raw((adc1_channel_t)channel);
77 } else {
78 int raw;
79 adc2_get_raw((adc2_channel_t)channel, ADC_WIDTH_BIT_12, &raw);
80 adc_reading += raw;
81 }
82 }
83 adc_reading /= NO_OF_SAMPLES;
84
85 //将ADC读取转换为毫伏的电压
86 uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars);
87 printf("Raw: %d\tVoltage: %dmV\n", adc_reading, voltage);
88
89 vTaskDelay(pdMS_TO_TICKS(1000));
90 }
91 }
原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/peripherals/adc
ESP32-使用ADC笔记的更多相关文章
- 关于esp32的ADC采集
对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...
- ESP32高分辨率计时器笔记
尽管FreeRTOS提供了软件计时器,但这些计时器有一些限制: 最大分辨率等于RTOS滴答周期 计时器回调从低优先级任务分派 硬件计时器不受这两个限制,但是通常它们使用起来不太方便.例如,应用组件可能 ...
- ESP32存储blog笔记
基于ESP-IDF4.1 1 #include <stdio.h> 2 #include "freertos/FreeRTOS.h" 3 #include " ...
- ESP32随笔汇总
版权声明:本文为博主原创文章,未经博主本人不得转载.联系邮箱:mynoticeable@gmail.com 1.ubuntu 14.04下搭建esp32开发环境 2.UBUNTU14.0.4安装ecl ...
- DSP28377S - ADC学习编程笔记
DSP28377S - ADC学习编程笔记 彭会锋 2016-08-04 20:19:52 1 ADC类型导致的配置区别 F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采 ...
- ESP32学习笔记(一) 环境搭建与下载
ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...
- ESP32 ADC
2个12位的ADC,共计18通道,ADC2比较特殊的一点就是:ADC2和wifi共用,wifi的优先级更高,所以ADC2只有在WIFI模块不用的情况下好使: 在读取ADC数据之前,必须先对ADC进行设 ...
- stm32寄存器版学习笔记07 ADC
STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...
- ESP32的ULP 协处理器笔记
1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...
随机推荐
- Docker学习(14) Docker容器的数据管理
Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原
- AutomicBoolean
AutomicBoolean 介绍 java并发包下提供的原子变量,是原子类其中之一.基本特性是在多线程环境下,多个线程同时执行这些类的实例包含的方法时,具有排他性 当某个线程进入方法,不会被其他线程 ...
- MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral)
MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral) Tracking by Instance Detection: A Meta-Learning Approach 论文链接:h ...
- 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载
源码下载地址案例开发环境:VS2010本案例未使用openssl库,内部提供了sslite.dll库进行TLS会话,该库提供了ISSLSession接口用于建立SSL会话. HTTP协议很简单,写个简 ...
- 操作系统-gcc编译器驱动程序
gcc编译器驱动程序,读取x.c文件,翻译成可执行目标文件x 1.预处理阶段 预处理器(cpp)将x.c(源程序,文本文件)中的#等直接插入程序文本中,成为另一个c程序x.i(文本文件) 2.编译阶段 ...
- pytest xfail的使用
@pytest.mark.xfail: 期望测试用例是失败的,但是不会影响测试用例的的执行; 如果测试用例执行失败的则结果是xfail(不会额外显示出错误信息); 如果测试用例执行成功的则结果是xpa ...
- 一文带你了解.Net互斥锁
本文主要讲解.Net基于Threading.Mutex实现互斥锁 基础互斥锁实现 基础概念:和自旋锁一样,操作系统提供的互斥锁内部有一个数值表示锁是否已经被获取,不同的是当获取锁失败的时候,它不会反复 ...
- 【NX二次开发】三点画圆,三角形外心,已知三点求圆心
已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
- 【NX二次开发】Block UI 选择小平面区域
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- TensorFlow入门实操课程第一章练习笔记
在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...