ESP32有两个ADC,每个ADC有多个通道,同一时间每个ADC只能采集一个通道
ADC输出关键字:
Serial.println(analogRead(35)); //analogRead(35)获取指定IO口的模拟电压数据(该方法将阻塞直到采集完成);数据范围为0~2^12-1,即0~4095.
ESP32 DAC有两个脚:25 26
DAC输出关键字:
dacWrite(25, 100); //25,26 就是两个DAC引脚,后面的值取值范围时0-255,具体输出电压是 200/255*电源电压,200就是你填入的值
如果你的ADC采集有一些精度要求,我在网上找了一些可以调整的函数,完整代码在这里
void setup() {
//关于串口后面还会,专门拿一篇博文来讲,因为有点多
Serial.begin(115200); //初始化调试串口,之后可以使用Ardunio ide 自带的串口调试,也可以自己用别的串口调试软件调试,波特率对上就行了
}
void loop() {
float adc_get;
Serial.println(analogRead(35)); //analogRead(35)获取指定IO口的模拟电压数据(该方法将阻塞直到采集完成);数据范围为0~2^12-1,即0~4095.
Serial.println(adc_get);
dacWrite(25, 100); //25,26 就是两个DAC引脚,后面的值取值范围时0-255,具体输出电压是 200/255*电源电压,200就是你填入的值
delay(1000);
/**************************************************************************************************************************************/
/********************************************* 调整精度用的一些函数 ************************************************************/
/**************************************************************************************************************************************/
//以下是我在网上找到的ADC的资料,如果简单使用就直接用下面的关键字读取,如果精度有一些要求就用下面注释的一些函数设置
//void analogReadResolution(uint8_t bits) 设置模拟数据读取分辨率,取值1~16,默认为12;
//oid analogSetWidth(uint8_t bits) 设置ADC采样分辨率,取值9~12,默认为12;
//void analogSetCycles(uint8_t cycles) 设置单次采样的周期,取值1~255,默认为8;
//void analogSetSamples(uint8_t samples)设置单次采样的实际采样次数,取值1~255,默认为1;该项的设置相当于提高了ADC的灵敏度,比如该值为2,则采样获得数据就是真实数据的2倍;
//void analogSetClockDiv(uint8_t clockDiv)设置ADC时钟分频系数,取值1~255,默认为1;
//下面是设置ADC全局输入衰减,取值ADC_0db, ADC_2_5db, ADC_6db, ADC_11db,默认为11db; 当 VDD_A 为 3.3V 时: 0dB 下量程最大为 1.1V 2.5dB 下量程最大为 1.5V 6dB 下量程最大为 2.2V 11dB 下量程最大为 3.9V(最大可以采集到3.3V电压)
//void analogSetAttenuation(adc_attenuation_t attenuation)
//void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation) 设置单独某个IO口的输入衰减;
//int hallRead()Get value for HALL sensor (without LNA) connected to pins 36(SVP) and 39(SVN);(关于霍尔传感器)
//下面几个是非阻塞采样 相关函数
//bool adcAttachPin(uint8_t pin)将IO口连接到ADC;
//bool adcStart(uint8_t pin)开启采样与转换;
//bool adcBusy(uint8_t pin)检查采样与转换是否完成;
//uint16_t adcEnd(uint8_t pin)读取采集到的数据(如果未完成将阻塞至完成);
}
最后
STM32 HAL库的教程还在更新当中但是现在每篇博文要做的都挺多的,所以会更得慢一点,但我会一直更下去的,初步更完ESP32与stm32大概率更一些树莓派,k210的教程,这这个系列教程是用ESP32连接WIFI 方式与阿里云端交互,而后面会教大家用NB-IOT,用PYTHON(树莓派这种可以直接安装包直接用)的方式与阿里云交互,最后会更算法与视觉类教程,那部分边学变更,我是个大三的学生,自学物联网2年多了,我会带着兴趣一直写下去,至少我以后看到这些博文,我觉得自己曾经学过一些东西。由于我很少碰硬件,所以硬件小白一定要注意一下,因为我会找时间从基本0基础开始边学边更一些硬件基础,PCB绘制。