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 能够胜任一 ...
随机推荐
- Prometheus监控软件部署方法
背景:负责基于区块链的某公正项目的状态上报模块设计编码,基于Prometheus进行二次开发 1.说明Prometheus 是一个开源的服务监控软件,它通过 HTTP 协议从远程机器收集数据并存储在本 ...
- 学习Python中出现的错误集合(不定时更新)jupyter平台
出现的问题:1. 本图的错误,一个是line 7 init的两侧应该是是双下划线"__"导致所示错误 2. 本图的错误是 line 12 Student.student_tatal ...
- Asp.Net Core Api 使用Swagger管理文档教程的安装与使用
这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使 ...
- OpenCV 查找轮廓
本文将结合实例代码,介绍 OpenCV 如何查找轮廓.获取边界框. 代码: contours.py OpenCV 提供了 findContours 函数查找轮廓,需要以二值化图像作为输入.并指定些选项 ...
- AI推理与Compiler
AI推理与Compiler AI芯片编译器能加深对AI的理解, AI芯片编译器不光涉及编译器知识,还涉及AI芯片架构和并行计算如OpenCL/Cuda等.如果从深度学习平台获得IR输入,还需要了解深度 ...
- 广播 (broadcasting)
广播 (broadcasting) 飞桨(PaddlePaddle,以下简称Paddle)和其他框架一样,提供的一些API支持广播(broadcasting)机制,允许在一些运算时使用不同形状的张量. ...
- ARM-CPU卷积网络的自动调谐
ARM-CPU卷积网络的自动调谐 为特定的ARM设备自动调谐对于获得最佳性能至关重要.这是一个关于如何调整整个卷积网络的资料. 以模板的形式编写了TVM中ARM CPU的操作实现.模板有许多可调旋钮( ...
- C#将DataTable数据导出CSV文件
C#将DataTable数据导出CSV文件通用方法! //导出按钮调用导出方法 protected void btnCSV_Click(object sender, EventArgs e) ...
- 关于switch语句的使用方法---正在苦学java代码的新手之菜鸟日记
输入月份与年份,判断所输入的月份有多少天. switch支持和不支持的类型 支持的类型 int 类型 short 类型 byte 类型 char 类型 enum (枚举)类型 (java5.0 之后支 ...
- linux安装后配置
1.1 系统设置(自测用,公司不需要) 1.1.1 Selinux系统安全保护 Security-Enhanced Linux – 美国NSA国家安全局主导开发,一套增强Linux系统安 全的强制访问 ...