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 能够胜任一 ...
随机推荐
- python 定时任务APScheduler 使用介绍
python 定时任务APScheduler 使用介绍 介绍: APScheduler的全称是Advanced Python Scheduler.它是一个轻量级的 Python 定时任务调度框架. ...
- 云ERP真的已经玩不转了吗?
欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 注:以下云ERP特指Saas ERP,非指ERP系统部署在云端. 不得不说,如今市场对传统ERP的接受度要远比云ERP高得多,95%的中大型 ...
- windows 映射驱动器 图标显示不正常
正常图标是这样的: 我的变成了这样: 解决方法: 注册表进入: HKEY_CURRENT_USER\SOFTWARE\Classes\Applications\Explorer.exe\Drives\ ...
- Linux内存技术分析(下)
Linux内存技术分析(下) 五.内存使用场景 out of memory 的时代过去了吗?no,内存再充足也不可任性使用. 1.内存的使用场景 page 管理 slab(kmalloc.内存池) 用 ...
- Ryzen 4000'Vermeer' CPU和Radeon RX'Big Navi'图形卡
Ryzen 4000'Vermeer' CPU和Radeon RX'Big Navi'图形卡 来自中国媒体的多篇报道表明,AMD都准备在2020年第四季度初推出其下一代Ryzen 4000'Zen 3 ...
- 【题解】【洛谷 P1967】 货车运输
目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...
- pytest xfail的使用
@pytest.mark.xfail: 期望测试用例是失败的,但是不会影响测试用例的的执行; 如果测试用例执行失败的则结果是xfail(不会额外显示出错误信息); 如果测试用例执行成功的则结果是xpa ...
- UF_MODL 建模操作
Open C uc6560 uf5300uf5301uf5303uf5305uf5309uf5310uf5311uf5313uf5315uf5317uf5319uf5320uf5321uf5323uf ...
- tree (一本通练习||清华集训互测)
tree 内存限制:512 MiB 时间限制:3000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ...
- SpringCloud(6)Eureka架构与CAP原则与取舍策略
一:Eureka架构 Register(服务注册):把自己的 IP 和端口注册给 Eureka. Renew(服务续约):发送心跳包,每 30 秒发送一次,告诉 Eureka 自己还活着.如果 90 ...