基于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笔记的更多相关文章

  1. 关于esp32的ADC采集

    对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...

  2. ESP32高分辨率计时器笔记

    尽管FreeRTOS提供了软件计时器,但这些计时器有一些限制: 最大分辨率等于RTOS滴答周期 计时器回调从低优先级任务分派 硬件计时器不受这两个限制,但是通常它们使用起来不太方便.例如,应用组件可能 ...

  3. ESP32存储blog笔记

    基于ESP-IDF4.1 1 #include <stdio.h> 2 #include "freertos/FreeRTOS.h" 3 #include " ...

  4. ESP32随笔汇总

    版权声明:本文为博主原创文章,未经博主本人不得转载.联系邮箱:mynoticeable@gmail.com 1.ubuntu 14.04下搭建esp32开发环境 2.UBUNTU14.0.4安装ecl ...

  5. DSP28377S - ADC学习编程笔记

    DSP28377S -  ADC学习编程笔记 彭会锋 2016-08-04  20:19:52 1 ADC类型导致的配置区别 F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采 ...

  6. ESP32学习笔记(一) 环境搭建与下载

    ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...

  7. ESP32 ADC

    2个12位的ADC,共计18通道,ADC2比较特殊的一点就是:ADC2和wifi共用,wifi的优先级更高,所以ADC2只有在WIFI模块不用的情况下好使: 在读取ADC数据之前,必须先对ADC进行设 ...

  8. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  9. ESP32的ULP 协处理器笔记

    1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行.超低功耗协处理器的补充使得 ESP32 能够胜任一 ...

随机推荐

  1. 大数据学习之路——MySQL基础(一)——MySQL的基础知识与常见操作

    一.存储引擎 1.含义 存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引 ...

  2. PHP8开启PHPStorm + Xdebug3

    下载Xdebug 需要下载对应php版本xdebug 否则对加载xdebug失败 https://xdebug.org/download 我的是PHP版本 为php8.0.3-nts-x64 安装xd ...

  3. Python+Selenium学习笔记1 - pip命令

    1.用pip命令安装模块 pip install 模块名 e.g. pip install qrcode 2.用pip卸载模块 pip uninstall 模块名 e.g. pip uninstall ...

  4. return true 和 return false 和 return

    1.return false:相当于终止符,干了3件事,阻止默认行为,取消事件冒泡,以及停止回调执行立即返回: 2.return:停止回调执行立即返回: 3.return true:相当于执行符,继续 ...

  5. TVM中的调度原语

    TVM中的调度原语 TVM是一种用于高效内核构造的领域专用语言. 本文将展示如何通过TVM提供的各种原语来调度计算. from __future__ import absolute_import, p ...

  6. Android客户端网络预连接优化机制探究

    一.背景 一般情况下,我们都是用一些封装好的网络框架去请求网络,对底层实现不甚关注,而大部分情况下也不需要特别关注处理.得益于因特网的协议,网络分层,我们可以只在应用层去处理业务就行.但是了解底层的一 ...

  7. 【UG二次开发】获取对象类型 UF_OBJ_ask_type_and_subtype

    代码: int type=0, subtype=0; UF_OBJ_ask_type_and_subtype(objTag, &type, &subtype);

  8. 【VBA】单元格插入图片,单元格删除图片

    封装函数: Sub 插入产品形象(strRange As String, datebaseTu As String) Dim strJpg As String strJpg = datebaseTu ...

  9. 【NX二次开发】创建扫描特征

    扫描特征相关函数: 创建扫描特征的相关函数: 1.UF_MODL_create_extrude_trim_opts 拉伸 2.UF_MODL_create_extrude_trim_opts1 拉伸 ...

  10. 『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别

    目录 1.什么是计算机语言 2.高级语言中的编译型语言和解释型语言 (1)编译型语言 (2)解释型语言 (3)编译型语言和解释型语言执行流程 3.知识扩展: 4.关于Python 1.什么是计算机语言 ...