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 能够胜任一 ...
随机推荐
- Centos 重置root密码
# cat /etc/system-release #查看版本 开机后在内核grub.2上敲击 e 在linux16 行(倒数第二行)末加入 " ...
- Step By Step(Lua系统库)
Step By Step(Lua系统库) Lua为了保证高度的可移植性,因此,它的标准库仅仅提供了非常少的功能,特别是和OS相关的库.但是Lua还提供了一些扩展库,比如Posix库等.对于文件操作而言 ...
- Docker学习(3) 容器基本操作
容器的基本操作
- springboot 非端口模式启动
@SpringBootApplication @ComponentScan(basePackages = {"demo.test"}) public class ReportApp ...
- 图像实例分割:CenterMask
图像实例分割:CenterMask CenterMask: single shot instance segmentation with point representation 论文链家: http ...
- liunx:网络命令
现系统的学习一下Web渗透相关的命令 ping ping 命令是用来测试TCP/IP 网络是否畅通或者测试网络连接速度的命令,对确定网络是否正确连接,以及网络连接的状况十分有用.简单的说,ping就是 ...
- WordPress安装篇(3):用宝塔面板在Linux上安装WordPress
前面的文章已经介绍了如何在Windows环境安装WordPress,这篇文章来介绍在Linux环境怎样快速安装WordPress.大家都知道,Linux系统相对于Windows系统而言占用资源更少.更 ...
- 学习响应式编程 Reactor (2) - 初识 reactor
Reactor Reactor 是用于 Java 的异步非阻塞响应式编程框架,同时具备背压控制的能力.它与 Java 8 函数式 Api 直接集成,比如 分为CompletableFuture.Str ...
- 【模拟8.01】big(trie树)
一道trie树的好题 首先我们发现后手对x的操作就是将x左移一位,溢出位在末尾补全 那么我们也可以理解为现将初值进行该操作,再将前i个元素异或和进行操作,与上等同. 那么我们等于转化了问题: ...
- 框架篇:分布式全局唯一ID
前言 每一次HTTP请求,数据库的事务的执行,我们追踪代码执行的过程中,需要一个唯一值和这些业务操作相关联,对于单机的系统,可以用数据库的自增ID或者时间戳加一个在本机递增值,即可实现唯一值.但在分布 ...