猪百岁 发表于 2021-4-17 10:23:13

【新手基础教程】外设之 ESP32 ADC 的使用


## 1. 如何使用 ESP32 获取 ADC 模拟量

由于 K210 没有 ADC 读取模拟量的功能,所以该功能只能从 ESP32 、ESP82XX 等硬件上获取,ADC 最基础的用途就是实现一个可触摸的按键触点。

### 1.1. ESP32 示例代码

```
# Uasge see readme.md
# from network_esp32 import wifi

import time, network
from Maix import GPIO
from fpioa_manager import fm

class wifi():
    # IO map for ESP32 on Maixduino
    fm.register(25,fm.fpioa.GPIOHS10)#cs
    fm.register(8,fm.fpioa.GPIOHS11)#rst
    fm.register(9,fm.fpioa.GPIOHS12)#rdy
    print("Use Hareware SPI for other maixduino")
    fm.register(28,fm.fpioa.SPI1_D0, force=True)#mosi
    fm.register(26,fm.fpioa.SPI1_D1, force=True)#miso
    fm.register(27,fm.fpioa.SPI1_SCLK, force=True)#sclk
    nic = network.ESP32_SPI(cs=fm.fpioa.GPIOHS10, rst=fm.fpioa.GPIOHS11, rdy=fm.fpioa.GPIOHS12, spi=1)

print("ESP32_SPI firmware version:", wifi.nic.version())

# get ADC0 ADC1 ADC2
adc = wifi.nic.adc((0,1,2))
print(adc)

while True:
    try:
      # get ADC0~5
      adc = wifi.nic.adc()
    except Exception as e:
      print(e)
      continue
    for v in adc:
      print("%04d" %(v), end=" ")
    print(' : adc')

'''
    MicroPython v0.5.1-136-g039f72b6c-dirty on 2020-11-18; Sipeed_M1 with kendryte-k210
    Type "help()" for more information.
    >>>
    raw REPL; CTRL-B to exit
    >OK
    (2370, 3102, 3071)
    2017 2753 0977 2709 0963 0855: adc
    0617 0757 0150 0095 0133 0153: adc
    1319 1478 0955 0939 0698 0619: adc
    2403 3231 3299 3298 1483 0779: adc
    1119 1815 1274 1315 0230 0255: adc
    0951 0951 0295 0283 0319 0399: adc
    2175 2769 2576 2579 1487 1104: adc
    1995 2846 2647 2699 0839 0441: adc
'''

```

### 1.2. OSError: Get version fail

重试就行,通常是 esp32 还未初始化成功。

```
Traceback (most recent call last):
File "<stdin>", line 15, in <module>
File "<stdin>", line 24, in wifi
OSError: Get version fail
>

```

### 1.3. ESP82XX 实现思路

> 文档对该部分内容不做解释。

通过 AT+SYSADC 查询 ADC 值,在乐鑫的 ESP82XX AT 固件中默认为GPIO12 引脚。

直接读取值即可使用。
页: [1]
查看完整版本: 【新手基础教程】外设之 ESP32 ADC 的使用