MicroPython ESP32 ADC(模拟量转数字量)示例

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython ESP32 ADC(模拟量转数字量)示例相关的知识,希望对你有一定的参考价值。

MicroPython ESP32 ADC(模拟量转数字量)示例


ADC (模拟量转数字量)

在ESP32 ADC功能可用的引脚是32-39。注意,当使用默认配置时,ADC引脚上的输入电压在0~1V,超过1V虽然不至于烧但是度数就4095了 衰减输入还是有必要的,以适配弱的ADC.

  • 本示例基于Thonny平台开发

ADC属于machine模块中类

查询machine相关内置的功能模块,

MicroPython v1.19.1 on 2022-06-18; ESP32 module with ESP32

Type "help()" for more information.

>>> import machine
>>> help(machine)
object <module 'umachine'> is of type module
  __name__ -- umachine
  mem8 -- <8-bit memory>
  mem16 -- <16-bit memory>
  mem32 -- <32-bit memory>
  freq -- <function>
  reset -- <function>
  soft_reset -- <function>
  unique_id -- <function>
  sleep -- <function>
  lightsleep -- <function>
  deepsleep -- <function>
  idle -- <function>
  disable_irq -- <function>
  enable_irq -- <function>
  bitstream -- <function>
  time_pulse_us -- <function>
  Timer -- <class 'Timer'>
  WDT -- <class 'WDT'>
  SDCard -- <class 'SDCard'>
  SLEEP -- 2
  DEEPSLEEP -- 4
  Pin -- <class 'Pin'>
  Signal -- <class 'Signal'>
  TouchPad -- <class 'TouchPad'>
  ADC -- <class 'ADC'>
  ADCBlock -- <class 'ADCBlock'>
  DAC -- <class 'DAC'>
  I2C -- <class 'I2C'>
  SoftI2C -- <class 'SoftI2C'>
  I2S -- <class 'I2S'>
  PWM -- <class 'PWM'>
  RTC -- <class 'RTC'>
  SPI -- <class 'SPI'>
  SoftSPI -- <class 'SoftSPI'>
  UART -- <class 'UART'>
  reset_cause -- <function>
  HARD_RESET -- 2
  PWRON_RESET -- 1
  WDT_RESET -- 3
  DEEPSLEEP_RESET -- 4
  SOFT_RESET -- 5
  wake_reason -- <function>
  PIN_WAKE -- 2
  EXT0_WAKE -- 2
  EXT1_WAKE -- 3
  TIMER_WAKE -- 4
  TOUCHPAD_WAKE -- 5
  ULP_WAKE -- 6

ADC功能相关的函数

>>> from machine import ADC
>>> help(ADC)
object <class 'ADC'> is of type type
  init -- <function>
  block -- <function>
  read -- <function>
  read_u16 -- <function>
  read_uv -- <function>
  atten -- <function>
  width -- <function>
  ATTN_0DB -- 0
  ATTN_2_5DB -- 1
  ATTN_6DB -- 2
  ATTN_11DB -- 3
  WIDTH_9BIT -- 9
  WIDTH_10BIT -- 10
  WIDTH_11BIT -- 11
  WIDTH_12BIT -- 12
  • ADC.atten(attenuation):这个函数允许设置ADC输入的衰减量。这允许更大的输入电压范围,但代价是精度(现在相同的比特数代表更大的范围)。可能的衰减选项是:
ADC.ATTN_0DB: 0dB 衰减,最大输入电压为1v,这是默认配置
ADC.ATTN_2_5DB: 2.5dB 衰减, 最大输入电压约为1.34v
ADC.ATTN_6DB: 6dB 衰减, 最大输入电压约为2.00v
ADC.ATTN_11DB: 11dB 衰减, 最大输入电压约3.6v
  • ADC.width(width):这个函数允许设置ADC利用的位数,在ADC读取时返回使用,列表如下:
ADC.WIDTH_9BIT: 9 bit data
ADC.WIDTH_10BIT: 10 bit data
ADC.WIDTH_11BIT: 11 bit data
ADC.WIDTH_12BIT: 12 bit data - 这是默认的配置

ADC程序示例

from machine import Pin, PWM, ADC  #引入ADC模块
from time import sleep

frequency = 5000
led = PWM(Pin(2), frequency)

pot = ADC(Pin(34))         #定义34脚为ADC脚(32~39上可用),可以读取模拟电压
pot.width(ADC.WIDTH_12BIT) #读取的电压转为0-4096;ADC.WIDTH_9BIT:0-511
pot.atten(ADC.ATTN_11DB)   #衰减设置范围:输入电压0-3.3v

while True:
  pot_value = pot.read() //4  #使读取的电压变为0-1024
  print(pot_value)            #打印出读取到的电压以便调试  
  if pot_value < 15:
    led.duty(0)
  else:
    led.duty(pot_value)        #通过读取电位器的电压调节灯的占空比
  sleep(0.1)                   #每100ms读取一次

shell调试窗口输出信息

以上是关于MicroPython ESP32 ADC(模拟量转数字量)示例的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266(micropython)读取adc

Arduino ESP8266 RF433数据传输实验二(传输ADC模拟量信号)

micropython(esp8266)adc采集通过tcp发送采集的数据

micropython(esp8266)adc采集通过tcp发送采集的数据

ESP32-ArduinoGPIO输入操作,去抖,ADC多按键

ESP32 单片机学习笔记 - 04 - ADC和定时器